Rt 问题是同样一个程序 连接实物示波器实验时结果不稳定 一个程序能跑出四 五个结果 希望大侠解释下 马上附程序
#include 一
sbit output=P2^4;
int flag=0;
void delay(unsigned int i)
{
unsigned int j;
for(;i>0;i--)
for(j=0;j<125;j++)
{;}
}
void Outside_Int(void) interrupt 0 //ía2¿0ÖD¶Ïoˉ
{
TH0=0xee;//¸ø¶¨ê±Æ÷μĸß8λ¸33õÖμ
TL0=0x00;//¸ø¶¨ê±Æ÷μÄμí8λ¸33õÖμ
TR0= 1;
}
void T0_time() interrupt 1 //¶¨ê±Æ÷0μÄÖD¶Ï′|àíoˉêy
{
TR0=0;
flag=1;
output=0;
}
void main()
{
delay(2000);
TMOD=0x01;//16붨ê±Æ÷
EA=1;//¿a×üÖD¶Ï
PT0=0;//¼ÆêyÆ÷0¶¨òåÎa¸ßóÅÏ輶ÖD¶Ï
IT0=1;//2éóñßÑØ′¥·¢
EX0=1;//¿aía2¿ÖD¶Ï0
ET0=1;//¿a¼ÆêyÆ÷ÖD¶Ï0
if(flag==1)
output=0;
else
output=1;
}
想实现的功能:输入的是50HZ方波 外部中断输入 当单片机检测到下降沿时计数器启动 计到制定的数后溢出 输出端口p2.4实现从1到0的跳变 程序结束
理想的状况是多次实验 输出波形跳变的位置每次都对应于输入波形一个周期内固定的一点 然而同样的程序 多次上电后发现位置并不固定 差不多实验10次 7 8次是正确结果 剩下几次错误 波形都会有跳变 只是位置不对
我最不能理解的是单片机同样一个程序执行多次为什么会有不同的结果呢??请大家给个意见 谢谢大家了
我觉得你可以写成while(1)output=0;
您好 这样的做法我试过 但是好像没有多大的用处。。。能给解释下为什么要这样吗?谢谢!
你用的是keil吧,keil会自动给你整个程序加上while(1),如果你 程序里面没有while(1),每次都会重新配置中断和定时器,会有影响。但是while(1)不要多用啊 有一个就够了。至于你这个的问题在哪我看不出来,才疏学浅,抱歉
程序很混乱,编程思想有严重问题,可以看得出你对单片机怎么工作的还不透彻,仅仅是对输入方波计数处理,两种方法,一个是外部中断,让后变量自加1,一个是定时器选择计数功能,溢出会中断,看了你的程序,我滴天啊,一进来就延时,还有一个很大的问题,程序不能停!哪怕是while(1);做结尾都可以,在看看你的中断,说是外部中断,可你用的是定时中断,你啊,还需努力啊,磨刀不误砍柴工,别急
天地庄周马;江湖范蠡船。
个性签名还是放QQ号吧,2060347305,添加说明EEworld好友