51单片机串口通信时,读取串口SBUF,SBUF始终为0!

SBUF始终会被清0!完整程序如下:#include<reg52.h>#include<intrins.h>#include<stdio.h>#defineuintuns... SBUF始终会被清0!
完整程序如下:
#include <reg52.h> #include <intrins.h> #include <stdio.h>
#define uint unsigned int
unsigned char flag_uart,flag_time,flag_on,a,i,t0_num,ad_val,a,s;float ad_vo;sbit bb=P1^1;
void init(){ TMOD|= 0x20; //定时器1工作方式2 //SMOD|=1; //TH1 = 0xFD; //baud*2 /* reload value 19200、数据位8、停止位1。效验位无 (11.0592) PCON|= 0x80; TH1 = 0xF3; // //baud*2 /* 波特率4800、数据位8、停止位1。效验位无 (12M) TL1 = 0xF3; TR1 = 1; //SCON = 0x50; //REN=1允许串行接受状态,串口工作模式1 ET0=1; SM0=0; SM1=1; REN=1; EA = 1; // 开总中断 ES = 1; //开串口中断
}
void main(){
while(1) { init(); if(flag_uart==1) { flag_uart=0; ES=0; TI=1; switch(flag_on) { case 2: puts("Turn on ad!\n"); //TR0=1; break; case 0: printf("Turn off ad!\n"); //TR0=0; break; case 1: puts("Error!\n"); break; } } }} void ser() interrupt 4{
if(RI==1) { RI=0; //先是收到电脑发送过来的数据,数据放在在SBUF中 SBUF=4; a=SBUF; } P1=SBUF; s=a; flag_uart=1; if(s==1) flag_on=0; else flag_on=1; }
展开
 我来答
jingmingxie
推荐于2016-01-02 · TA获得超过2213个赞
知道小有建树答主
回答量:730
采纳率:100%
帮助的人:270万
展开全部
RI=0; //先是收到电脑发送过来的数据,数据放在在SBUF中
SBUF=4;
a=SBUF; }
SBUF这个寄存器在单片机里接收和发送虽然是同名,但是物理上是分开的,我记忆里好像接收那个缓存是只能读不能写的,所以说SBUF=4;这个语句是不能成功写入;
除非上位机发数据下来,要不这个寄存器的值应该一直都是0.
……
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
6gps
2012-07-10 · TA获得超过209个赞
知道小有建树答主
回答量:178
采纳率:0%
帮助的人:113万
展开全部
SBUF=4;
a=SBUF; }
P1=SBUF;

这个地方写错了
追问
改了还是不行!"SBUF=4;"这条语句是我调试失败(就是SBUF的值始终为0)后添加的,另外我回来也看了,主函数中的switch-case后的完整程序应为:
case 1: puts("Error!\n");
break;
}

while(!TI);
TI=0;
ES=1;
}
}
}
可是就是不管用啊,改了之后
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式