发表于: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;
}
这段代码实现基本的串口通信。使用“串口调试助手”给单片机发一个字节的数据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;
}