单片机外部中断让led亮,但反应太快根本看不到,怎么办,怎么改
答案:3 悬赏:30
解决时间 2021-11-24 15:21
- 提问者网友:猖狂醉薇
- 2021-11-23 14:56
这是原程序
#include
sbit LED1=p1^1;
sbit LED2=p1^2;
void main()
{
EA=1;
EX0=1;
IT0=0;
while(1)
{
LED1=1;LED2=0;
}
void int_0() interrupt 0
{
LED1=0;LED2=1;
}
}
最佳答案
- 二级知识专家网友:陪衬角色
- 2021-11-23 15:03
外部中断里写一个位操作:bit LED_SET=0;
void int_0() interrupt 0
{
LED_SET=1;
}
while(1)
{
LED1=1;LED2=0;
if(LED_SET)
{
EX0=0;//关外部中断
LED1=0;LED2=1;
delay();//加延时
LED_SET=0;
EX0=1;
}
}
全部回答
- 1楼网友:請叫我丶偏執狂
- 2021-11-23 17:14
电脑上,你是用什么软件发送数据的?用串口调试助手就行,网上到处可以下载。也好用。关键问题是在电脑上发送的0,1,是以什么数据格式发送的,通常以字符格式发送的,即是ascii码。所以,单片机接收时,也要按字符格式发才行。而你的程序是按十六进制数的格式判断的,也就是二进制数,所以,发送和接收格式不统一,单片机就不能正常接收控制led0,也就不能正常返回数据。 if(sbuf==0) //这是按二进制数接收的 if(sbuf==1) //这也是按二进制数接收的 这样写程序,要求电脑上,要按二进制数即十六进制数发送才行。 还是按字符格式收发比较好。 这样,程序改一下就行了。 if(sbuf==‘0’) //这就是按字符接收的 if(sbuf==‘1’) //这也是按字符接收的 其它行不用动。 这样,收发比较可靠。
- 2楼网友:嗷呜我不好爱
- 2021-11-23 16:12
清楚原理就ok!因为你的外部中断是接按键的,按键按下是最少有20毫秒左右,也就是20毫秒中是总是在响应中断的!你的灯就会一直处在未定的状态中!
我要举报
大家都在看
推荐资讯