单片机串口通信的问题

minghuaiping 2011-03-20 03:29:48
我写了一个单片机串口通信程序,单片机为STC90C52RC.用串口助手调试。发过去字符之后,能到正确的字符,但是进Swich语句判断的时候,总是不对,这是为什么呢?把程序贴出来如下:


#include <reg51.h>
unsigned char sw;
unsigned int t;
void Init();
sbit P00 = P0^0;
sbit P01 = P0^1;
sbit P02 = P0^2;
sbit P03 = P0^3;
sbit P04 = P0^4;
sbit P05 = P0^5;
sbit P06 = P0^6;
sbit P07 = P0^7;

sbit P20 = P2^0;
sbit P21 = P2^1;
sbit P22 = P2^2;
sbit P23 = P2^3;
sbit P24 = P2^4;
sbit P25 = P2^5;
sbit P26 = P2^6;
sbit P27 = P2^7;

sbit P30 = P3^0;
sbit P31 = P3^1;
sbit P32 = P3^2;
sbit P33 = P3^3;
sbit P34 = P3^4;
sbit P35 = P3^5;
sbit P36 = P3^6;
sbit P37 = P3^7;
void Init()
{
/*中断允许控制寄存器 */
IE=0x00; //中断允许控制寄存器初始化
EA=1; // all interrupt enable
//ET0=1; // 允许定时中断
//ET1=1; // 允许计数中断
ES=1; //允许串行中断
TI=0;
RI=0;
/*定定时、计数 工作方式控制寄存器 */
TMOD=0X20; //T2工作方式2,作为波特率发生器;Tl工作方式1,定时
TL1=0XF5,TH1=0XF5; //设定波特率9600

/*定时器控制寄存器 TCON */

TR0=1; //启动定时器工作
TR1=1; //启动计数器工作
/*串行口控制寄存器 ,串行工作方式设置 */
SCON=0x50; // 串行口控制寄存器 01010000 工作方式1 允许接收

/*电源控制寄存器 */
PCON=0x80; // 电源控制 、波特率选择寄存器 10000000 波特率加倍
P20=0; //正常运行指示
}

void serial(void) interrupt 4 //串口中断处理函数
{
ES=0; //禁止串口中断
if(TI)
{ //发送完数据
TI=0;
}

if(RI){
RI=0; //接受完数据
t=SBUF;
SBUF=t;
switch(t)
{
case 'a':
P00=0;
P20=0;
break;
case 'b':
P00=1;
P20=0;
break;
case 'c':
P03=0;
P20=0;
break;
case 'd':
P03=1;
P20=0;
break;
default:
P20=1;

break;
}

}
ES=1; //重新允许中断
}

void main()
{
Init(); //初始化

while(1)
{
;
}
return ;
}
...全文
88 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
shenshunxiao 2011-03-21
  • 打赏
  • 举报
回复
你接收串口的变量是t,而t定义的是int,把它换成你定义的unsigned char 的sw试试吧。
hello_mcu 2011-03-20
  • 打赏
  • 举报
回复
SBUF串口的寄存缓冲器。你的接收数据和发送数据两个判断,SBUF=t和t=SBUF,这是不是不对啊。你试试把SBUF=t放到发送数据那里。

27,374

社区成员

发帖
与我相关
我的任务
社区描述
硬件/嵌入开发 单片机/工控
社区管理员
  • 单片机/工控社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧