单片机通信问题 ,按一个键,输出1

void interruptet1() interrupt 3
{

while(1)
{ if(TI)
{
TI=0;
if(KEYIN1==0)

{
delay(2000);
if(KEYIN1==0)
{
SBUF=1;
}

}

while (TI==1);
TI=0;

}

}
}
我是菜鸟,请问什么是串口中断和定时器中断?
我把整个程序贴一下
#include<reg51.h>
#include "LX.h"

void uart(void)
{
SCON=0X50;
TMOD|=0X20;TMOD&=0XEF;
TH1=0XFD;TL1=0XFD;
TR1=1; EA=1;ET1=1;
}
void delay(uint16 i)
{
while(i--);
}
void main()
{
KEYOUT1=0;KEYOUT2=1;KEYOUT3=1;KEYOUT4=1;
uart();
while(1);这里为什么要加个while啊,不加可以吗

}

void interruptet1() interrupt 3
{

while(1)
{

if(KEYIN1==0)

{
delay(2000);
if(KEYIN1==0)
{
SBUF=1;
}

}

while(TI==1);这里的while是什么意思
TI=0;

}
}

从整体上来说,这程序是错误的。

不应该开 T1 的中断。
不应该编写 T1 的中断程序。
不应该在 T1 的中断程序中,进行串口发送。

while(TI==1);这里的while是什么意思
--这一句,也是错误的。
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-11-29
你进的是定时器中断,是否要进串口中断?
如果你只要发送一个数据,开始的判断不要。
while(1)
{
if(KEYIN1==0)

{
delay(2000);
if(KEYIN1==0)
{
SBUF=1;
}

}

while (TI==1);
TI=0;

}追问

请问什么是定时器中断和串口中断,有什么区别吗?
还有,我又把整个程序都贴出来了,你看看

追答

1,你应该再补下单片机,单片机的中断分定时器中断,串口中断,外部中断。
2,interrupt 3就是进入串口中断时执行的程序,计算机发信息给单片机就会进入此中断,我看你的程序是不需要这个中断程序的。
3,你程序里的KEYIN1不知定义是什么?
4,while(1)是循环,防止程序不断复位。

第2个回答  2013-11-29
建议你先学习一下C语言基础。追问

请问我的程序哪里有错误

追答

ET1=1; 这个错了,不能为1

第3个回答  2013-11-29
是不是程序死了??最后的WHILE做什么用的,后面还有个TI=0????

单片机通信问题 ,按一个键,输出1
从整体上来说,这程序是错误的。不应该开 T1 的中断。不应该编写 T1 的中断程序。不应该在 T1 的中断程序中,进行串口发送。while(TI==1);这里的while是什么意思 --这一句,也是错误的。

用51单片机怎么通过独立按键实现串口通信 比如说你按下一个键S1 在串 ...
用键盘检测程序检测按键按下,检测到按下就用串口向上位机发送字符“1”的ASCII码值,这样在串口调试助手里就可以看到字符“1”了

...串口通信程序 PC发送一段任何数据到单片机,按一个按钮让原数据再返回...
void timer0() interrupt 1 \/\/T0中断 定时0.1ms { EA=0;TH0=0xfc;TL0=0x18;MCU_RXD_FLG=1;TR0=0;

51单片机(CC2530)发送按键次数到串口助手显示 实现功能:按1次按键...
你先一步一步的实验,单独的进行按键测试,先按键跟数码管一起,按键按一下,数码管数值加1,看看是不是达到你想要的目的,然后,进行串口通信, 串口助手发送,单片机接收,然后单片机发送一个数值给串口助手。 两个都完成,然后再结合到一起去, 我不知道你的程序有什么问题,但是尽量不要用delay函...

设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码...
设计一个单片机输入显示系统,要求每按一下按键数码管显示数据加1(数码管初始值为0,9加1 后显示0)。 我来答 1个回答 #活动# 《请回答2022》答题瓜分现金奖池 好学者百科 2022-12-14 · 百度认证:北京惠企网络技术有限公司官方帐号 好学者百科 科技生活门户网站,探索发现百科全书。 向TA提问 关注 ...

...单片机实验板的按键信号传给PC啊。比如按一个键,51给PC发送一个'a...
同学你好,我来帮你,你可以使用串口啊,比如:1:给你一个从PC发给单片机数据后,单片机再原样发给PC的参考代码:2:将51某一个(引脚)按键0,1状态,发给PC;1:::include <REG52.H> bit Flag;unsigned int R_D,S_D;unsigned char i;void usart_init(void); \/\/\/串口初始化 void ...

单片机中串行口通信,用按键控制两个单片机实现数码管数值转换?
要实现两个单片机之间的串行口通信,可以使用USART(Universal Synchronous\/Asynchronous Receiver\/Transmitter)模块。以下是一个可能的实现方案:1. 硬件连接:将两个单片机的USART模块相互连接,其中一台单片机的发送引脚连接到另一台单片机的接收引脚,而另一台单片机的发送引脚连接到第一台单片机的接收引脚。2...

想用电脑一个键控制单片机上的灯,发送数据没变化呢
要实现这个功能需要能和单片机正常通信,建议:1,先完成电脑通过串口助手给单片机发送数据,控制LED 2,编写上位机 当按下键盘按键的时候 上位机能给单片机发送相应的串口数据。这样就ok了,

单片机的串口通信过程问题,具体问题如下,求解。
你可以这样理解:由于SM2是专门为了多机通信而设计的,为的是要让从机知道什么时候收到的数据是表示通信地址,从而区分主机是否要和自己通信。SM2=1时,主机发来的第9位数据就可以知道收到的数据是不是自己想要的。我们先回顾一下TB8、RB8的知识:SM2,多机通信控制位,主要用于方式2和方式3。当从...

...按一下,数码管从0开始加1,加到9,用c语言单片机编写并且要用计数器...
P32=1则会一直在循环里,P32=0则进行下一步,在串口双机通信实验里也许还能用上 *\/ if(s1==9){s1==0;}\/\/如果是9就下一个显示0 else{s1++;}\/\/如果不是正常加一 } } P0=num[s1];\/\/刷新7seg值}}这程序我刚打的,我也不知道能不能行,你看看吧,试试。能帮上点...

相似回答