![]() |
|
|
|
|
#1 |
|
Nhập môn đệ tử
Tham gia ngày: Jan 2011
Bài gửi: 7
: |
Vậy không có cách nào sao ? Hhuhuhu!!!!!!
|
|
|
|
|
|
#2 |
|
Đệ tử 7 túi
Tham gia ngày: May 2005
Bài gửi: 258
: |
tại sao lại không (nhưng cũng phải mất vài chu kỳ máy)
Code:
#include <16F877A.h>
#include <def_877a.h>
#include <DEFS_16F877A.h>
#device *=16 //su dung het ram trong pic
# fuses NOWDT, XT, NOPROTECT, NOLVP, PUT
# use delay (clock = 4000000)
void DELAY();
int8 bien=0,x=0,quay;
#int_ext
void ngat()
{
x=0xaa;
bien++;
if(bien>1)bien=0;//dem=0->2
}
void main()
{;
enable_interrupts(GLOBAL);
enable_interrupts(INT_EXT);
ext_int_edge(H_TO_L);
setup_timer_1 ( T1_INTERNAL | T1_DIV_BY_8 );
set_timer1(0x0000);//thiet lap gia tri ban dau cho timer1
trisb=0x01;
trisd=0;
portd=0x00;
while(true)
{
switch(bien)
{
case 0: {
portd=0x01;
delay();
for(quay=0;quay<=7;quay++)
{
portd<<=1;//quay trai
delay();
if(x==0xaa)
{
x=0;
break;
}
}
break;}
case 1: {
portd=0x80;
delay();
for(quay=0;quay<=7;quay++)
{
portd>>=1;//quay phai
delay();
if(x==0xaa)
{
x=0;
break;
}
}
break;}
}
}
}
void delay(void)
{
int8 tam;
for(tam=0;tam<=2;tam++)
{
if(x==0xaa)
break;
set_timer1(0x0000);//thiet lap gia tri ban dau cho timer1
while(TMR1IF==0)
{
if(x==0xaa)
break;
}
TMR1IF=0;
}
}
__________________
viết chương trình cho vdk chạy ổn định là cả một vấn đề. thay đổi nội dung bởi: tdm, 25-03-2011 lúc 08:37 PM. |
|
|
|
|
|
#3 |
|
Nhập môn đệ tử
Tham gia ngày: Feb 2010
Bài gửi: 2
: |
Anh cho e hỏi trong chương trình trên khai báo timer 1 dùng để làm gì vậy? Có phải là dùng trong phần hàm delay ở cuối k? e k hiểu lắm ở chỗ này, khi cờ tràn TMRIF1==0 tức là cờ chưa tràn thì xét giá trị x, nếu x==0xaa thì lại thoát khỏi vòng lặp và cho TMRIF1=0, mục đích của việc này dùng để làm gì? và khi nó tràn(TMRIF1=1) thì sẽ ra sao?
while(TMR1IF==0) { if(x==0xaa) break; } TMR1IF=0; } thay đổi nội dung bởi: tuthantuthuc, 23-05-2011 lúc 11:39 PM. |
|
|
|