当前位置:首页 > 单片机 > 单片机
[导读]◆测试代码:#includevoid main(void){TMOD = 0x01;//定时器T0 工作方式1 16位定时TH0=0x3c;//50ms65536-50000usTL0=0xb0;ET0 = 1;//允许定时器T0中断EA = 1;//开启总中断断点:TR0 = 1;//启动定时器,可以随便放置^_^

◆测试代码:
#include

void main(void)
{
TMOD = 0x01;//定时器T0 工作方式1 16位定时

TH0=0x3c;//50ms65536-50000us
TL0=0xb0;

ET0 = 1;//允许定时器T0中断
EA = 1;//开启总中断

断点:TR0 = 1;//启动定时器,可以随便放置^_^ TMOD←→while(1)

while(1);//无限循环………………

}


void intsert0(void) interrupt 1 using 0//T0中断服务程序
{
TH0=0x3c;//50ms65536-50000us
TL0=0xb0;//软件重新装载!!!
{
断点:P0=0x00;//可以处理其他程序却不影响定时器计时工作!!!
P1=0x00;
P2=0x00;
P3=0x00;
………… //代码随便写,处理时间不超过定时时间就OK啦!
}
}


◆实验数据记录
TH0/TL0=3cb0T0 16-bit
0.000 397 00
0.050 406 000.050 009 00
0.100 412 000.050 006 00
0.150 418 000.050 006 00
0.200 424 000.050 006 00
50 000+2+2+2=50 006

◆产生的汇编代码:
; FUNCTION main (BEGIN)
0000 758901 MOV TMOD,#01H
0003 758C3C MOV TH0,#03CH
0006 758AB0 MOV TL0,#0B0H
0009 D2A9 SETB ET0
000B D2AF SETB EA
000D D28C SETB TR01'
000F ?C0001:
000F 80FE SJMP ?C0001
; FUNCTION main (END)

; FUNCTION intsert0 (BEGIN)
0000 758C3C MOV TH0,#03CH2'
0003 758AB0 MOV TL0,#0B0H2'
0006 758000 MOV P0,#00H
0009 759000 MOV P1,#00H
000C 75A000 MOV P2,#00H
000F 75B000 MOV P3,#00H
0012 32 RETI 2'
; FUNCTION intsert0 (END)

◆实验结论推测:
假设要定时的时间为: 50000us 即50ms
则定时器初始值为: 65536+6-50000=15542(15542)d→(3cb6)h

◆推测论证:
TH0/TL0=3cb6T0 16-bit
0.000 397 00
0.050 400 00 0.050 003 00
0.100 400 000.050 000 00
0.150 400 000.050 000 00
0.200 400 000.050 000 00OK!推测正确!


◆实验总结:
T0 工作方式1 16-bit定时器fosc=12MHz
设要定时的时间为: T
则定时器初始值为: 65536+6-T
【即定时器初始值为:: 65542-T】

定时器初始值计算方法:
TH = (2^n+6-T*fosc/12)/256//(2^n+6-T*fosc/12)<<8
TL = (2^n+6-T*fosc/12)%256//(2^n+6-T*fosc/12)&0xff

若定时器工作方式为0n=13TH全8位;TL低5位,高3位为0,没有使用
若定时器工作方式为1n=16
若定时器工作方式为2n=8
若定时器工作方式为3n=8

//以上内容仅供参考~


本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除( 邮箱:macysun@21ic.com )。
换一批
延伸阅读
关闭