单片机实验,求大神帮我改源码,题目要求误差小于0.0
时间:10-02
整理:3721RD
点击:
/*初始状态为南北通行:南北绿灯、东西红灯保持25秒;
后转为过渡状态:南北黄灯、东西红灯保持5秒;再转为东西通行:
东西绿灯、南北红灯保持25秒;
最后转为过渡状态:东西黄灯、南北红灯保持5秒。
南北红黄绿接P2。0~2,东西接P2.3~5,分别在12MHZ,6MHZ下怎么改*/
#include<reg51.h>
unsigned char time1;//定时参数
unsigned char sco1;
void main(void)
{
TMOD=0x01;
TR0=1;
ET0=1;
EA=1;
TH0=(65536-46483)/256;
TL0=(65536-46483)%256;
time1=0;
sco1=0;
while(1)
{;}
}
void hlddl(void) interrupt 1 using 1
{
time1++;
if(time1==20)
{ time1=0;
sco1++;
}
if(sco1<30)
{
if(sco1<25)
P2=0xf3;
else
P2=0xf5;
}
else
{
if(sco1<55)
P2=0xde;
else
P2=0xee;
}
if(sco1==60)
{ sco1=0;
}
TH0=(65536-46483)/256;
TL0=(65536-46483)%256;
}
后转为过渡状态:南北黄灯、东西红灯保持5秒;再转为东西通行:
东西绿灯、南北红灯保持25秒;
最后转为过渡状态:东西黄灯、南北红灯保持5秒。
南北红黄绿接P2。0~2,东西接P2.3~5,分别在12MHZ,6MHZ下怎么改*/
#include<reg51.h>
unsigned char time1;//定时参数
unsigned char sco1;
void main(void)
{
TMOD=0x01;
TR0=1;
ET0=1;
EA=1;
TH0=(65536-46483)/256;
TL0=(65536-46483)%256;
time1=0;
sco1=0;
while(1)
{;}
}
void hlddl(void) interrupt 1 using 1
{
time1++;
if(time1==20)
{ time1=0;
sco1++;
}
if(sco1<30)
{
if(sco1<25)
P2=0xf3;
else
P2=0xf5;
}
else
{
if(sco1<55)
P2=0xde;
else
P2=0xee;
}
if(sco1==60)
{ sco1=0;
}
TH0=(65536-46483)/256;
TL0=(65536-46483)%256;
}
找到解决方法了,用定时器初值计算软件就好了
如果程序没有问题,在6M的晶振下工作只要改一下定时器的初值就行了,是定时时间和12M的一样。
有用protus仿真,误差总是大得吓人,你能告诉初值设多少好
仿真效果你要看下面 如果看电脑时间,肯定不行的啊