题目
已知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,定时器1TH1=0xB1;//赋定时器初值TL1=0xE0;TR1=1;//开启定时器1EA=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;中断服务程序TIMEORG 0040HSTART: MOV TMOD,#10H;定时器模式,模式1,定时器1MOV TH1,#0B1H;赋定时器初值MOV TL1,#0E0H SETB TR1;开启定时器1SETB EA;开启总中断SETB ET1;开启定时器1中断SJMP $
TIME1: MOV TH1,#0B1H;赋定时器初值MOV TL1,#0E0H CPL P1.0;产生方波RETIEND