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

原题题目:

11.设系统时钟频率为12MHz,利用定时器T1中断,控制P2.1引脚和P2.2引脚分别输出频率为1000Hz和10Hz的方波

解:由题意,时钟频率为12MHz即一个机器周期为1us,需要使用定时器T1,这里选用方式1

1000Hz即一个方波周期T1=0.001s(1ms),半个周期为0.5ms=500us

10Hz即一个方波周期T2=0.1s(100ms),半个周期为50ms=50000us

取最小时间单位,那么TH1和TL1的值分别为:

TH1=(65536-500)/256

TL1=(65536-500)%256

则有如下程序:

#include
#define uchar unsigned char
#define uint unsigned int
sbit MHz=P2^1;
sbit TenHz=P2^2;
uint counter=0;
void main()
{
	TMOD=0x10;//定时器T1做16位计数器使用
	TH1=(65536-500)/256;//置初值
	TL1=(65536-500)%256;
	EA=1;//开放中断
	ET1=1;//允许T1中断
	TR1=1;//启动T1,开始计数
	MHz=TenHz=1;
	while(1);
}
void T1_inter()interrupt 3
{
	counter++;
	MHz=~MHz;
	if(counter%99==0)
	{
		TenHz=~TenHz;
		counter=0;	
	}
	TH1=(65536-500)/256;//重装初值
	TL1=(65536-500)%256;
}

个人解题思路,且已在个人的开发板上验证结果,不喜勿喷。

你可能感兴趣的:(单片机汇编)