求助、学习51中、串口通信的问题
时间:10-02
整理:3721RD
点击:
#include<reg52.h>
#define uchar unsigned char
main()
{
REN=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
// EA=1;
// ES=1;
SM0=0;
SM1=1;
while(1)
{
if(RI==1)
{ RI=0;
P1=SBUF;
}
}
}
void rx() interrupt 4
{
RI=0;
P1=SBUF;
}
上面这个程序、在用串口调试助手、向单片机传输数据、单片机接收数据 的时候只能接受一次、然后就算再次改变串口调试助手的数值、单片机的二极管却不会再变化、而把串口调试助手的、关闭串口按钮、然后再次点、开启串口、按钮、就又可以向单片机传输一次数据、为什么啊、是因为我用的USB接口、而不是串口的问题吗、、?
改成这种就可以实现、串口调试助手与单片机的、多次传输数据了、
#include<reg52.h>
#define uchar unsigned char
uchar a,flag;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
REN=1;
PCON=0x80;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void serial() interrupt 4
{
P1=SBUF;
a=SBUF;
flag=1;
RI=0;
}
为什么啊、希望高手指点、
#define uchar unsigned char
main()
{
REN=1;
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
// EA=1;
// ES=1;
SM0=0;
SM1=1;
while(1)
{
if(RI==1)
{ RI=0;
P1=SBUF;
}
}
}
void rx() interrupt 4
{
RI=0;
P1=SBUF;
}
上面这个程序、在用串口调试助手、向单片机传输数据、单片机接收数据 的时候只能接受一次、然后就算再次改变串口调试助手的数值、单片机的二极管却不会再变化、而把串口调试助手的、关闭串口按钮、然后再次点、开启串口、按钮、就又可以向单片机传输一次数据、为什么啊、是因为我用的USB接口、而不是串口的问题吗、、?
改成这种就可以实现、串口调试助手与单片机的、多次传输数据了、
#include<reg52.h>
#define uchar unsigned char
uchar a,flag;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
EA=1;
ES=1;
REN=1;
PCON=0x80;
while(1)
{
if(flag==1)
{
ES=0;
flag=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void serial() interrupt 4
{
P1=SBUF;
a=SBUF;
flag=1;
RI=0;
}
为什么啊、希望高手指点、
这个···这个···还真没遇到过。一般我都用中断接收。你换个串口助手试试。
不懂.
和我当时遇到的问题一模一样,用中断法就OK了,具体为什么用查询不行?我也不清楚
同样遇到此问题。
、用中断接受的时候、就可以重复多次了啊?
、、、好吧、、谢谢了呢
那要看你中断程序怎么写了。
、、求教、怎么写才可以呢、谢谢呢
像你第二个程序不就可以多次接收了么,你每次通信只需要收一个字节数据,就没必要协议和缓存了。正常通信需要拟造串口协议的。
、串口协议?什么意思啊、还不懂呢、、、去百度下吧
意思是不是说、我接受一个字节存在SBUF里、然后再把SBUF发送给计算机、然后我就可以继续接收数据了
、、接收和发送的SBUF是一个内存地址、所以只能存一次是吗、不发给计算机的话、它就在内存空间占用空间、所以不可以接收数据?
学习单片机第六天了、、、看来还有很多需要了解的啊、
我也是刚学习,遇到这种情况,,好像第一个TR没有置0,一直在发
、、第一个TR、?那个不是设定成了、八位自动重装啊、