定時器產生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,但是高低電平的時間明顯多了
|