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; } 展开
完整程序如下:
#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; } 展开
2个回答
展开全部
RI=0; //先是收到电脑发送过来的数据,数据放在在SBUF中
SBUF=4;
a=SBUF; }
SBUF这个寄存器在单片机里接收和发送虽然是同名,但是物理上是分开的,我记忆里好像接收那个缓存是只能读不能写的,所以说SBUF=4;这个语句是不能成功写入;
除非上位机发数据下来,要不这个寄存器的值应该一直都是0.
……
SBUF=4;
a=SBUF; }
SBUF这个寄存器在单片机里接收和发送虽然是同名,但是物理上是分开的,我记忆里好像接收那个缓存是只能读不能写的,所以说SBUF=4;这个语句是不能成功写入;
除非上位机发数据下来,要不这个寄存器的值应该一直都是0.
……
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询