定时器产生54us的方波,用Proteus仿真一周期内总是存在20us左右的误差,试了不一样的方法,也是一样的结果,用示波器检测也是一样存在误差。代码仿真如下:
#include<reg52.h> //头文件
#include<intrins.h>
sbit P1_1=P1^1;//位定义
void Timer1_Init();//函数声明
bit Flag1;
void main()
{
Timer1_Init();
while(1);
}
//定时器
void Timer1() interrupt 3
{
TH1=(65536-54)/256;//重新赋值
TL1=(65536-54)%256;
P1_1=~P1_1;
}
void Timer1_Init()
{
TMOD=0X10;//定时器1设置为16位进制
TH1=(65536-54)/256;//赋初值,一周期存在20us左右误差
TL1=(65536-54)%256;
TR1=1;//启动计数
ET1=1;
EA=1;}
明明我设置的为54us,但是高低电平的时间明显多了
|