单片机C语言程序中断问题,高手进

#include <reg52.h>
sbit m=P2^0;
sbit b=P2^6;
sbit y=P2^7;
unsigned char count;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
count=0;
}
void timer()interrupt 1
{
m=!0; b=!1; y=!0;
count++;
if(count==20)
{
m=0; b=1; y=0;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TF0=0;
count=0;
}
这个程序用在图上的电路中,就是左边的电机转动,且红蓝两灯同时亮,而且一直持续这种状态。
而我要达到的效果是左边转1秒,同时黄灯亮》右边转1秒,同时蓝灯亮》依次循环。
这是怎么回事?请高人分析下,谢谢了!!

#include <reg52.h>
sbit m=P2^0;
sbit b=P2^6;
sbit y=P2^7;
unsigned char count;
void main()
{
TMOD=0x01;
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
TR0=1;
ET0=1;
EA=1;
count=0;
while(1)
{
}
}
void timer()interrupt 1
{
count++;
if(count > 40) count = 0;
if(count<=20)
{
m=0; b=1; y=0;
}
else
{
m=1; b=0; y=1;
}
TH0=(65536-50000)/256;
TL0=(65536-50000)%256;
}
这样就行了!
温馨提示:答案为网友推荐,仅供参考
第1个回答  2011-09-21
count=0; 放if程序里面
另外不一定对吧 把m=!0; b=!1; y=!0; 改成m=1;b=0;y=1不行吗!? 万一有引脚是三态的 你这样的赋值有可能出错 另外把这个初始赋值放MAIN里面去 if里面的状态有取异

对不起 昨天晚上的作答没有过脑子追问

没事。
这个我搞明白了,在另一个提问里问其它人问明白了,现在有个新问题,那个通过单片机播放电子音乐的原理及程序是怎么写的?

追答

不难 但是你不会是要我手敲给你说吧 你去CSDN EEHOME 这些论坛找找吧 肯定有

追问

那些论坛什么的我有看,看不懂,可能是写文章的人没站在读者的角度,你现在说说几个难点或几个重点呗??

第2个回答  2011-09-21
主程序 退出了,所以 没用 加个while(1); 试下,你把你程序的效果也说出来,我们好帮你改,没装,那个 只能凭效果,所以你问要属于清楚
第3个回答  2011-09-21
高手真多,我是来打酱油的
第4个回答  2011-09-22
外部中断,要求是低电平/下降沿触发。
你应该把按键改成接地,不要接电源。

另外,程序缺少延时,这样,按一下键,会加上很多次的。
试试如下程序:
#include <reg52.h>
unsigned char code tab[] = {
0xc0,0xf9,0xa4,0xb0,0x99,
0x92,0x82,0xf8,0x80,0x90};
unsigned char a, b, c;
//-------------------------------
void delay(unsigned int k)
{
unsigned int i, j;
for(i = 0; i < k; i++)
for(j = 0; j < 121; j++);
}
//-------------------------------
void main()
{
IT0 = 1;
EX0 = 1;
EA = 1;
while(1) {
P0 = tab[c];
}
}
//-------------------------------
void key()interrupt 0
{
c++;
if(c > 10) c = 0;
delay(200); //延时一会
}
//-------------------------------
相似回答