微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 这样的RS232串口通信为什么不行啊?!

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

时间:10-02 整理:3721RD 点击:






电路和仿真时的图片我都附上了。
请各位大侠指正!
我在串口调试助手上输入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


有哪位大侠可以指点一下啊?!

这个问题我解决了!
是proteus软件的问题,我用别的程序试了一下,不管我怎么改动P0、P2口的状态。
单片机那都没反应, 这时我才意识到问题。我再画电路图之前先备份了一个单片机的最小系统。
然后做仿真实验时,直接另存。  
可能没说太清楚, 总之我重画了一个电路,就ok了!
虽然没人给我指点,但还是说一下吧!
也许有人也会遇到这样的问题,
小手一点  进步一点!

十位应该是
  shiwei=0;
  P0=table[dat%100/10];

程序的细节问题,请注意

大侠  
有个问题想问一下  
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
这样是不是不对啊?   数码管显示的不是零

谢谢指点
不过现在有个问题
ASC码不是十进制的么?0的ASC码是48,我程序如下  只写关键的部分
uchar code table[]={0X3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //0~9
dat=SBUF;
P0=table[dat-48];//这时如果发送的是0
但是数码管根本不显示0  是个乱码
这是怎么回事啊?

谢谢指点
不过现在有个问题
麻烦看一下给别人的回复

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

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top