这样的RS232串口通信为什么不行啊?!!!

2019-07-16 00:49发布

仿真.jpg

串口通信.jpg

未命名.jpg

电路仿真时的图片我都附上了。

请各位大侠指正!!

我在串口调试助手上输入72,  但是为什么数码管没有变化呢??

程序如下:


#include<reg52.h> //包函8051 内部资源的定义

#define uchar unsigned char
#define uint unsigned int

unsigned char dat; //用于存储单片机接收发送缓冲寄存器SBUF里面的内容


sbit shiwei=P2^6; //十位选通定义
sbit baiwei=P2^5; //百位选通定义
sbit gewei=P2^7; //百位选通定义

uchar code table[]=
{
0xc0,0xf9,0xa4,0xb0,
0x99,0x92,0x82,0xf8,
0x80,0x90,
}; //1~10

void delay(uint z) //延时程序
{
        uint x,y;
        for(x=z;x>0;x--)
                for(y=110;y>0;y--);       
}//end of delay

void LED() //LED显示接收到的数据(十进制)
{
        gewei=0;
        P0=table[dat%10];
        delay(10);
        gewei=1;
       
        shiwei=0;
        P0=table[dat/10];
        delay(10);
        shiwei=1;

        baiwei=0;
        P0=table[dat/100];
        delay(10);
        baiwei=1;
}

void init_com(void)           //功能:串口初始化,波特率9600,方式1/////////
{
        TMOD = 0x20;//定时器1,工作方式一
        PCON = 0x00;//
        SCON = 0x50;//串行工作方式1,允许串行口接收
        TH1 = 0xFd;//波特率9600bit/s
        TL1 = 0xFd;
        TR1 = 1;//启动定时器1
        EA=1;//开总中断
        ES=1;//允许串行口中断
}

/////主程序功能:实现接收数据并把接收到的数据原样发送回去///////
void main()
{
        init_com();//串口初始化

        while(1)
        {
                if ( RI ) //扫描判断是否接收到数据,
                {
                        dat = SBUF; //接收数据SBUF赋与dat
                        RI=0; //RI 清零。
                        SBUF = dat; //在原样把数据发送回去(接收数据为发送数据的ASCII码,如发送q显示为113)
                }
                LED(); //显示接收到的数据

        }//end of while

}//end of main





友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
爱﹏奔跑
1楼-- · 2019-07-16 18:36
爱﹏奔跑 发表于 2013-5-8 20:56
有哪位大侠可以指点一下啊??!

谢谢指点

不过现在有个问题

麻烦看一下给别人的回复
爱﹏奔跑
2楼-- · 2019-07-16 18:39
xieyang 发表于 2013-5-9 15:58
十位应该是
  shiwei=0;
  P0=table[dat%100/10];

不知道为什么    有一个回复没显示出来

简写一个程序uchar table[]={};//0~9 在此略去 编程的时候有
dat=SBUF;
P1=(dat-48);
//数据以ASC码形式发送  为什么显示出的是乱码

一周热门 更多>