Mình đang tập lập trình C cho VDK 8051
Thầy ra yêu cầu là phải thiết lập timer toàn cục ko đc làm cục bộ
Mình code ra và test thử trên Proteus nhưng hầu như nó ko theo cái hàm delay_ms với delay_s minh mún
hầu như nó chỉ chạy theo thanh ghi timer
Mọi người xem rồi góp ý cho mình với
Thầy ra yêu cầu là phải thiết lập timer toàn cục ko đc làm cục bộ
Mình code ra và test thử trên Proteus nhưng hầu như nó ko theo cái hàm delay_ms với delay_s minh mún
hầu như nó chỉ chạy theo thanh ghi timer
Mọi người xem rồi góp ý cho mình với
Code:
#include <REG51F.H> int duration; void init_timer0(){ IE &= ~(0x82); // enable timer0 IE |= 0x82; TMOD &= ~(0x02); // setup timer0 TMOD |= 0x02; TH0 = (-10000/256); //10ms TL0 = (-10000%256); } void timer0_isr() interrupt 1{ TR0=0;//stop timer0 TH0 = (-10000/256);//reinitalize TL0 = (-10000%256); if( duration!=0){ duration--; } TR0=1; } void start_timer0(){ TR0=1; } void stop_timer0(){ TR0=0; } void delay_ms(int time){ duration=time; while(duration!=0) {} } void delay_s(int time){ duration=time*1000; while (duration!=0) {} } void main(){ init_timer0(); while (1){ P1=0xAA; delay_s(100); P1=0x55; delay_s(100); } }
Comment