找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1164|回复: 5
收起左侧

单片机与pc串口通信,虚拟端口发送1接收却显示q,发送2接收显示r,求大佬帮帮

[复制链接]
ID:1140226 发表于 2024-12-17 22:57 | 显示全部楼层 |阅读模式
#include <REGX51.H>
#define uchar unsigned char
#define uint unsigned int


sbit RS = P2^0;
sbit RW = P2^1;
sbit E = P2^2;

sbit KEY = P3^7;

uchar received_data;


void delayms(uint ms)
{
    uchar i;
    while (ms--)
        for (i = 0; i < 123; i++);
}


void w_com(uchar com)
{


    RS = 0;
    RW = 0;
    E = 1;
    P0 = com;
    E = 0;
    delayms(1);

}


void w_dat(uchar dat)
{

    RS = 1;
    RW = 0;
    E = 1;
    P0 = dat;
    E = 0;
    delayms(1);
}


void lcd_ini(void)
{
    delayms(10);
    w_com(0x38);
    delayms(10);
    w_com(0x0c);
    delayms(10);
    w_com(0x06);
    delayms(10);
    w_com(0x01);
    delayms(10);
    w_com(0x80);
    delayms(10);
}


void send_data(uchar data_to_send)
{

    SBUF = data_to_send;
    while (TI == 0);
    TI = 0;
}


void uart_init()
{
    // 9600bps 11.0592MHz
    SCON = 0x50;        
    TMOD &= 0x0F;      
    TMOD |= 0x20;      
    TL1 = 0xFD;        
    TH1 = 0xFD;        
    ET1 = 0;           
    TR1 = 1;           
    EA = 1;            
    ES = 1;            
}


void main()
{
    uchar data_to_send[8] = "12345678";
    uchar i;
    lcd_ini();
    uart_init();
    while (1)
    {
        if (KEY == 0)
        {
            delayms(20);
            if (KEY == 0)
            {
                for (i = 0; i < 8; i++)
                {
                    send_data(data_to_send[ i]);
                }
                while (KEY == 0);
            }
        }
    }
}


void uart_interrupt() interrupt 4
{
    if (RI)
    {
        RI = 0;
        received_data = SBUF;


        w_dat(received_data);
    }
}

仿真图

仿真图
回复

使用道具 举报

ID:860926 发表于 2024-12-18 08:27 | 显示全部楼层
发送的字符 +0x30 试试
回复

使用道具 举报

ID:294886 发表于 2024-12-18 09:28 | 显示全部楼层
两边的格式不一样吧,都设置成16进制看看
回复

使用道具 举报

ID:275826 发表于 2024-12-18 15:34 | 显示全部楼层
单片机与虚拟终端是同一个设备
回复

使用道具 举报

ID:161164 发表于 2024-12-19 11:50 | 显示全部楼层
检查一下单片机晶振设置,如果也是11.0592Mhz
那就可能是电脑太慢引致仿真速度不匹配现实
回复

使用道具 举报

ID:30165 发表于 2024-12-28 17:26 | 显示全部楼层
ASCII码  0 的ASCII码是 0X30  你发送 1   实际发送(1+0x30)试试
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表