c语言t0定时100ms初值,章单片机的定时计数器.ppt

章单片机的定时计数器

N 100ms到? Y 启动T1 启动T0 P1.0 求反 计满5次? 装入T0定时初值 P1.7 求反 装入T1计数初值 设T0为定时方式1 设T1为计数方式2 P1.7=0,P1.0=1 Y N ORG 0000H MAIN:CLR P1.7 SETB P1.0 MOV TMOD,#61H MOV TH1,#0FBH MOV TL1,#0FBH SETB TR1 LOOP1:CPL P1.7 LOOP2:MOV TH0,#3CH MOV TL0,#0B0H SETB TR0 LOOP3: JBC TF0,LOOP4 SJMP LOOP3 LOOP4:CPL P1.0 JBC TF1,LOOP1 AJMP LOOP2 END 程序中用JBC指令对定时/计数溢出标志位进行检测,当标志位为1时跳转并清标志。 * 方法2:T0每隔100ms中断一次,利用软件对T0的中断次数进行计数,中断10次即实现了1秒的定时。 ORG 0000H AJMP MAIN ORG 000BH ;T0中断服务程序入口 AJMP IP0 ORG 0030H ;主程序开始 MAIN:CLR P1.7 MOV TMOD,#01H ;T0方式1 MOV TH0,#3CH ;定时100ms MOV TL0,#0B0H SETB ET0 SETB EA MOV R4,#0AH;中断10次计数 SETB TR0 SJMP $ ;等待中断 IP0:DJNZ R4,RET0 ;未到10次转重新装初值 MOV R4,#0AH ;到10次重置R4 CPL P1.7 ; P1.7的灯变反 RET0:MOV TH0,#3CH ;重新定时100ms MOV TL0,#0B0H SETB TR0 RETI * #include sbit P1_0=P1^0; sbit P1_7=P1^7; timer0( ) interrupt 1 using 1 { /*T0中断服务程序*/ P1_0=!P1_0; /*100ms到P1.0反向*/ TH0=-50000/256; /*重载计数初值高8位*/ TL0=-50000%256; } /*重载计数初值低8位*/ timer1( )interrupt 3 using 2 /*T1中断服务*/ { P1_7=!P1_7; } /*1s到,灯变状态*/ main( ) { P1_7=0; /*置灯初始灭*/ P1_0=1; /*保证第一次反向便开始计数*/ TMOD=0x61; /*T0方式1定时,T1方式2计数*/ TH0=-50000/256; /*预置T0计数初值*/ TL0=-50000%256; TH1=-5; TL1=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值