/*SBUF:接受器具有双缓冲结构,即在从接收器寄存器中读出前一个已经收到的字节之前
,便能接受到第二个字节,如果第二个字节已经接收完毕之前,第一个字节还没有读出来,
则将丢失其中一个字节,对于发送器,因为数据时由CPU控制和发送的,所以不需要考虑*/
#include <reg51.h>
#define uchar unsigned char
#define uint unsigne int
uchar flag,a,i;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
ES=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
很简单的一个串口通信程序 为什么单个的字母不能显示啊,两个或者三个就会出现一个 错误的乱码 51单片机 实在解决不了了
共5条
1/1 1 跳转至页
2楼
发送55,没有出现理想中的高低电平,但是P1检测出来的数据是对的,接收的也是55,但是发送fe的话就会出现fe3f循环着来
4楼
#include <reg51.h>
#define uchar unsigned char
#define uint unsigne int
uchar flag,a,i;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
flag=0;
ES=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
中间加上flag=0,再换上11.0592M的晶振就可以了
#define uchar unsigned char
#define uint unsigne int
uchar flag,a,i;
void main()
{
TMOD=0x20;
TH1=0xfd;
TL1=0xfd;
TR1=1;
SM0=0;
SM1=1;
REN=1;
EA=1;
ES=1;
while(1)
{
if(flag==1)
{
flag=0;
ES=0;
SBUF=a;
while(!TI);
TI=0;
ES=1;
}
}
}
void ser() interrupt 4
{
RI=0;
P1=SBUF;
a=SBUF;
flag=1;
}
中间加上flag=0,再换上11.0592M的晶振就可以了
共5条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |