单片机通过rs232与pc进行简单的串口通信

最近仿照写了一段比较简单的程序,是仿真单片机与pc进行的串口通信:将按键的数字通过led显示,并发送给pc机上,可是结果没有出来,我估计在这块我的理解有点问题,希望大家能给我看看,下面是仿真图和程序,谢谢了!

#include<reg52.h>
unsigned char i,j,k;
unsigned char tab[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f,0x77,0x7c,0x39,0x5e,0x79,0x71,0x73};
void inti();
void delay();
void keyscan();
void display();
void trainsmit();

void inti()
{
SCON=0x50;//串口工作方式2
PCON=0x00;//设置波特率
TMOD=0X02;//定时器工作方式2
TH0=0XFD;//设置波特率为9600
TL0=0XFD;
TR0=1;
EA=1;
ES=1;
}

void delay()
{
unsigned char i,j;
for(i=0;i<200;i++)
for(j=0;j<100;j++);
}

void keyscan()//键盘扫描
{
P3=0x0f;
if(P3!=0x0f)
delay();
if(P3!=0x0f)
{
while(P3!=0x0f);
switch(P3)
{
case 0x0e:i=0;break;
case 0x0d:i=1;break;
case 0x0b:i=2;break;
case 0x07:i=3;break;
}
}
P3=0xf0;
if(P3!=0xf0)
{
delay();
if(P3!=0xf0)
{
while(P3!=0xf0);
switch(P3)
{
case 0xe0:j=0;break;
case 0xd0:j=1;break;
case 0xb0:j=2;break;
case 0x70:j=3;break;
}
}
}
}

void display()
{
k=4*i+j;
P0=tab[k];
}

void trainsmit()//单片机向pc发送数据
{
SBUF=k;
while(!TI);
TI=0;
}
void main()
{
while(1)
{
inti();
keyscan();
trainsmit();
display();
}

}

第1个回答  2021-04-04

单片机+RS232通信模块实现Modbus RTU串口通信

第2个回答  2014-08-08
TMOD=0X20;//定时器工作方式2
TH1=0XFD;//设置波特率为9600
TL1=0XFD;
TR1=1;
这样试一试 好像默认用的是T1定时器本回答被网友采纳
第3个回答  2014-08-09
3处:
①波特率发生器 使用的是 T1定时器,把T0 的参数 转到 T1定时器。
②按键扫描函数无效,while(P3!=0xf0) 该语句是等待松手,一旦松手,P3 的按键值 就会 丢失,返回 0xf0,LZ 再进行 switch (P3) 的操作,根本无效。
③串口初始化函数 inti() 是 一次性的,不应该 也不能放在 主 函数的 while 里面,重复的调用初始化,会导致 定时器 无法 产生中断,波特率就也无法产生。本回答被提问者采纳
相似回答