因测试示波器需要,用51单片机产生方波,为了精准,决定用定时器,结果波形未达到要求,不知为何?代码如下:
#include <reg51.h> //51单片机头文件
#define LED P0
#define T0_CNT 1 //定时时间1us,12MHZ晶振
// =========主程序==========================
void main(void)
{
TMOD = 0x02; //T0模式2,定时
//IE = 0x82; //使能T0中断
EA = 1; ET0 = 1; //使能T0中断
TH0 = 256-T0_CNT ; //载入定时初值
TL0 = 256-T0_CNT ; //载入定时初值
TR0 = 1; //启动T0
while(1); //等待中断
}
//======== T0中断=========================
void T0_zd (void) interrupt 1 //中断编号1
{
LED = ~LED; //
}
Proteus 8.6软件仿真,结果是高低电平各10us的方波,把T0_CNT一直增加到10,结果都是一样,怀疑是 Proteus仿真软件的问题,下载到单片机里用示波器检测,结果仍是如此。把T0_CNT一直增加到11,则产生低电平10us,高电平12us的矩形波,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到12,则产生周期为24us的方波,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到13,则产生12us+14us的矩形波,下载到单片机里用示波器检测基本是周期24us方波;把T0_CNT一直增加到14,则产生接近周期28us的方波,高低电平持续时间略有差异,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到15,则产生接近周期30us的方波,高低电平持续时间略有差异,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到16,则产生接近周期32us的方波,高低电平持续时间基本相同,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到19,则产生接近周期38us的方波,高低电平持续时间还是有差异,下载到单片机里用示波器检测也是如此;把T0_CNT一直增加到20,则产生接近周期40us的方波,高低电平持续时间相同,下载到单片机里用示波器检测也是如此;T0_CNT大于20,则是稳定的方波,开发板单片机型号STC89C52RD,看来51单片机的定时器也不是很准确,不知何故?请高手解答一下。 |