![]() |
|
![]() |
#1 |
Đệ 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. |
![]() |
![]() |
![]() |
#2 |
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. |
![]() |
![]() |