微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > MCU和单片机设计讨论 > 51单片机串口通讯的问题

51单片机串口通讯的问题

时间:10-02 整理:3721RD 点击:
想写一个简单的代码 使矩阵按键的值通过串口发送到PC,可是串口调试助手上一直没有接收到数据,求大神帮忙看一下问题出在了哪里。

#include<reg52.h>
#define GPIO_KEY P1
unsigned char KeyValue;
bit flag;
void Delay10ms(void)   //误差 0us
{
    unsigned char a,b,c;
    for(c=1;c>0;c--)
        for(b=38;b>0;b--)
            for(a=130;a>0;a--);
}
void KeyDown(void)
{
        char a=0;
        GPIO_KEY=0x0f;                        //测试
        if(GPIO_KEY!=0x0f)                //读取按键是否按下
        {
                Delay10ms();//延时10ms进行消抖
                if(GPIO_KEY!=0x0f)//再次检测键盘是否按下
                {
                       
                        //测试列
                        GPIO_KEY=0X0F;
                        switch(GPIO_KEY)
                        {
                                case(0X07):        KeyValue=0;break;
                                case(0X0b):        KeyValue=1;break;
                                case(0X0d): KeyValue=2;break;
                                case(0X0e):        KeyValue=3;break;
                        }
                        //测试行
                        GPIO_KEY=0XF0;
                        switch(GPIO_KEY)
                        {
                                case(0X70):        KeyValue=KeyValue;break;
                                case(0Xb0):        KeyValue=KeyValue+4;break;
                                case(0Xd0): KeyValue=KeyValue+8;break;
                                case(0Xe0):        KeyValue=KeyValue+12;break;
                        }
                        while((a<50)&&(GPIO_KEY!=0xf0))         //检测按键松手检测
                        {
                                Delay10ms();
                                a++;
                        }
                }
        }
}
void UsartConfiguration()
{
        SCON=0X50;                                //设置为工作方式1
        TMOD=0X20;                                //设置计数器工作方式2
        PCON=0X80;                                //波特率加倍
        TH1=0XF3;                                //计数器初始值设置,注意波特率是4800的
        TL1=0XF3;
        ES=1;                                        //打开接收中断
        EA=1;                                        //打开总中断
        TR1=1;                                        //打开计数器
}

void main()
{
        KeyDown();
        UsartConfiguration();
        while(1)
        {
        }
}
void Usart() interrupt 4
{       

                SBUF = KeyValue;
                while(!TI);
                TI = 0;
}

代码正在审核中

请各位大神看看问题出在哪里?

你的流程错了,应该是在while(1)里进行键盘扫描,就是执行KeyDown();,在判断有按键按下时,向串口发送数据,串口的发送数据一般不在中断里,至少在你的这种情况下,发送数据是不在串口中断里的。

你好 改正之后现在计算机可以接收到数据 但是不是按照十进制数显示的 这里我的unchar型变量怎么转换成十进制发送呢

a = KeyValue / 100; 百位,
b = KeyValue%100/10;十位,
c = KeyValue%10;个位,
共3个字节

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

网站地图

Top