这样的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 01:34
 精彩回答 2  元偷偷看……
爱﹏奔跑
2楼-- · 2019-07-16 03:59
这个问题我解决了!!!

是proteus软件的问题,我用别的程序试了一下,不管我怎么改动P0、P2口的状态。

单片机那都没反应, 这时我才意识到问题。我再画电路图之前先备份了一个单片机的最小系统。

然后做仿真实验时,直接另存。  

可能没说太清楚, 总之我重画了一个电路,就ok了!!

虽然没人给我指点,但还是说一下吧!!

也许有人也会遇到这样的问题,

小手一点  进步一点!!!
xieyang
3楼-- · 2019-07-16 07:48
十位应该是
  shiwei=0;
  P0=table[dat%100/10];
余亚东
4楼-- · 2019-07-16 09:43
程序的细节问题,请注意
爱﹏奔跑
5楼-- · 2019-07-16 15:25
余亚东 发表于 2013-5-9 21:00
程序的细节问题,请注意

大侠  

有个问题想问一下  

SBUF传过来的数据,如果不是十六进制过来的,就应该发的是ASC码对吧? 0的编码不是48么?

这个码是十进制的吧?   程序这样写对不对

uchar code table[]={0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9
dat=SBUF;
P0=table[dat-48];//这时发送一个0

这样是不是不对啊?   数码管显示的不是零
爱﹏奔跑
6楼-- · 2019-07-16 17:02
 精彩回答 2  元偷偷看……

一周热门 更多>