您现在所在的是:

单片机论坛

回帖:3个,阅读:1983 [上一页] [1] [下一页]
700
雅沐
文章数:9
年度积分:50
历史总积分:700
注册时间:2010/2/23
发站内信
发表于:2010/2/23 19:13:35
#0楼
自学8051时由于对原理了解不透彻,遇到一些问题,希望得到各位老师的指导。表情
这段代码实现基本的串口通信。使用“串口调试助手”给单片机发一个字节的数据K,单片机马上回发K。
我不明白的有两个地方:
1、为什么必须使用一个a变量来储存SBUF的值才能成功将该K回发。如果直接写“SBUF=P1”的话,无论K为何值,发回来的都是“00”。
2、为什么必须先关闭中断,即给ES=0,否则单片机会连续不断的发送数据?发送这个动作究竟在什么时候进行的?是给SBUF赋值以后,还是...?



#include<reg51.h>
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;
}


700
雅沐
文章数:9
年度积分:50
历史总积分:700
注册时间:2010/2/23
发站内信
发表于:2010/2/23 19:16:09
#1楼
在Keil里输入的中文注释复制出来成了乱码,所以只好删干净。
18808
pqsh 版主
文章数:7377
年度积分:638
历史总积分:18808
注册时间:2006/8/22
发站内信
2018论坛解答高手
发表于:2010/2/24 12:36:13
#2楼
1.好像有些片读端口不等于针,所以P1可能读全0
2.有些是填发送缓冲(即SBUF赋值),即触发发送.
如果我忘了我
请帮忙记得我
pqsh@163,326199298@v&q同号
10451
xlian
文章数:3235
年度积分:91
历史总积分:10451
注册时间:2002/5/7
发站内信
2018论坛热心网友
西门子PLC体验(二)
发表于:2010/2/25 14:14:23
#3楼
a是一个中间变量,将串口接收缓冲器的数据存储在中间变量a中,在发送程序中再将接收的这个数据发送出去。51单片机的发送缓冲器与接收缓冲器共用一个地址,读这个地址就是将接收缓冲器中的数据读走,写这个地址就是将待发送数据写入发送缓冲器同时触发发送.

关于我们 | 联系我们 | 广告服务 | 本站动态 | 友情链接 | 法律声明 | 非法和不良信息举报

工控网客服热线:0755-86369299
版权所有 工控网 Copyright©2024 Gkong.com, All Rights Reserved

62.4004