题目
已知Fosc=12MHz,T1工作于方式1,
①:实现20ms延时,求定时器初值TH0=?TL0=?写出具体的计算过程。
②:利用汇编或C语言编程实现输出周期为40ms的方波。
周期为40ms的方波,半周期就为20ms
TH0=(65536-20000)/256=177=0B1H
TL0=(65536-20000)%256=224=0E0H
C代码
#include <REGX52.H>
sbit flag=P1^0;
void main()
{
TMOD=0x10;//定时器模式,模式1,定时器1
TH1=0xB1;//赋定时器初值
TL1=0xE0;
TR1=1;//开启定时器1
EA=1;//开启总中断
ET1=1;//开启定时器1中断
while(1);
}
void timer1()interrupt 3//定时器1中断服务程序
{
TH1=0xB1;//重新赋初值
TL1=0xE0;
flag=~flag;//产生方波
}
汇编
ORG 0000H;程序入口地址
AJMP START;跳转到START程序
ORG 001BH;中断服务程序入口
LJMP TIME1;中断服务程序TIME
ORG 0040H
START: MOV TMOD,#10H;定时器模式,模式1,定时器1
MOV TH1,#0B1H;赋定时器初值
MOV TL1,#0E0H
SETB TR1;开启定时器1
SETB EA;开启总中断
SETB ET1;开启定时器1中断
SJMP $
TIME1: MOV TH1,#0B1H;赋定时器初值
MOV TL1,#0E0H
CPL P1.0;产生方波
RETI
END