第5章定时器计数器..pptVIP

  • 13
  • 0
  • 约1.03万字
  • 约 28页
  • 2016-12-21 发布于重庆
  • 举报
#define X (-50000) ;不能写成-100000/2,why? CNT_HUND_MS data 0x20 //100ms计数变量 second data 0x30 //秒变量 minute data 0x31 //分钟变量 Hour data 0x32 //小时变量 ORG 0000H LJMP START ORG 001BH LJMP T1Interrupt START: MOV SP,#60H MOV CNT_HUND_MS,#10 LCALL InitTimer1 LOOP: ;add your code here! LJMP LOOP InitTimer1: MOV TMOD,#10H MOV TL1,#low X //T1初值 MOV TH1,#high X SETB EA SETB ET1 SETB TR1 RET ;T0中断开始,产生时间。用工作寄存器1组 T1Interrupt: PUSH ACC PUSH PSW MOV TL1,#low X //T0初值 MOV TH1,#high X SETB RS0 //切换到寄存器组1 DJNZ CNT_HUND_MS,RETURN MOV CNT_HUND_MS,#10 //100ms计数器重新设为10,准备下一轮计数 MOV A,SECOND //对SECOND按BCD码加1 ADD A,#1 DA A MOV SECOND,A CJNE A,#0x60,RETURN MOV SECOND,#0x0 //SECOND清0 MOV A,MINUTE //对MINUTE按BCD码加1 ADD A,#1 DA A MOV MINUTE,A CJNE A,#0x60,RETURN MOV MINUTE,#0x0 //MINUTE清0 MOV A,HOUR //对HOUR按BCD码加1 ADD A,#1 DA A MOV HOUR,A CJNE A,#0x24,RETURN MOV HOUR,#0x0 //HOUR清0 RETURN: POP PSW POP ACC RETI end #include reg51.h const long X=-100000/2; unsigned char cnt_hund_ms,second,minute,hour; t1interrupt() interrupt 3 { TL1=X%256; //T1初值 TH1=X/256; cnt_hund_ms++; if(cnt_hund_ms=10){cnt_hund_ms=0;second++; if(second==60){ second=0;minute++; if(minute==60){minute=0;hour++; if(hour==24)hour=0; } } } } main() { TMOD=0x10; TL1=X%256; //T1初值 TH1=X/256; EA=1; ET1=1; TR1=1; while(1); } //测正脉冲宽度程序 #define GATE P3.3 MAIN: MOV TMOD, ;T1定时,方式1,GATE = 1 MOV TLl, #00H ;置TL1计数初值 MOV THl, #00H ;置THl计数初值 LOOP: JB GATE ,LOOP ;等待(/INT1)变低 SETB TR1 ;为启动T1作好准备 LOOPl:JNB GATE ,LOOP1 ;等待正脉冲到,并开始计数 LOOP2:JB

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档