C51(AT89C52)同济大学出版社《单片机原理及应用》(魏鸿磊)第六章第12题答案

原题题目:

12.设系统时钟频率为12MHz,利用定时器T0中断,实现从P2.1输出高电平宽度为10ms,低电平为20ms的矩形波。

解提思路:

1.系统时钟频率为12MHz,那么一个机器周期为1us,因而在计算TH0和TL0的初值的时候要定时多少微秒直接用定时器最大值减去多少微秒,再分别给TH0和TL0赋值

2.利用定时器T0中断,那么TMOD应赋值为0x01,并且选择TH0和TL0以及TR0还有中断号1

3.高电平宽度为10ms,低电平宽度为20ms的矩形波,一个矩形波周期为30ms,最小时间单位为10ms

于是有如下程序:

#include<reg52.h>
#define uchar unsigned char
#define uint unsigned int
sbit XHz=P2^1;
uint counter=0;
void main()
{
	TMOD=0x01;//定时器T0做16位计数器使用
	TH0=(65536-10000)/256;//置初值 最小时间单位为10ms,即10000us
	TL0=(65536-10000)%256;
	EA=1;//开放中断
	ET0=1;//允许T0中断
	TR0=1;//启动T0,开始计数
	XHz=1;//初始化为高电平,第一次中断发生时取反置低电平
	while(1);//让程序暂停在这里等待中断程序运行
}
void T1_inter()interrupt 1
{
	counter++;
	if(counter==1)XHz=~XHz;//第一次中断发生,取反置低电平
	if(counter==3)
	{
		XHz=~XHz;//第一个矩形波完成,取反置高电平
		counter=0;//并重置计数为0
	}
	TH0=(65536-10000)/256;//重装初值
	TL0=(65536-10000)%256;
}

以上是个人解题思路,且程序已在个人开发板上验证,如有建议或意见欢迎留言指出。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值