登录
首页 单片机论坛
回帖 发帖
正文

主题:8051串口通信的问题(C语言代码)

点击:2030 回复:3

自学8051时由于对原理了解不透彻,遇到一些问题,希望得到各位老师的指导。表情
这段代码实现基本的串口通信。使用“串口调试助手”给单片机发一个字节的数据K,单片机马上回发K。
我不明白的有两个地方:
1、为什么必须使用一个a变量来储存SBUF的值才能成功将该K回发。如果直接写“SBUF=P1”的话,无论K为何值,发回来的都是“00”。
2、为什么必须先关闭中断,即给ES=0,否则单片机会连续不断的发送数据?发送这个动作究竟在什么时候进行的?是给SBUF赋值以后,还是...?
#include
unsigned char flag;
unsigned char a;
void main()
{

TMOD=0x20;
TR1=1;
TH1=0xfd;
TL1=0xfd;
EA=1;


SM0=0;
SM1=1;
REN=1;
ES=1;
while(1)
{
   if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void receive() interrupt 4
{
flag=1;
P1=SBUF;
a=SBUF;
RI=0;
}
10-02-23 19:13
在Keil里输入的中文注释复制出来成了乱码,所以只好删干净。
10-02-23 19:16
1.好像有些片读端口不等于针,所以P1可能读全0
2.有些是填发送缓冲(即SBUF赋值),即触发发送.
10-02-24 12:36
a是一个中间变量,将串口接收缓冲器的数据存储在中间变量a中,在发送程序中再将接收的这个数据发送出去。51单片机的发送缓冲器与接收缓冲器共用一个地址,读这个地址就是将接收缓冲器中的数据读走,写这个地址就是将待发送数据写入发送缓冲器同时触发发送.
10-02-25 14:14

工控新闻

更多新闻资讯