原题题目:
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<reg52.h>
#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;
}
个人解题思路,且已在个人的开发板上验证结果,不喜勿喷。