找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 756|回复: 10
收起左侧

51单片机串口如何接受7位数的数据(10进制)

[复制链接]
ID:149043 发表于 2023-5-23 16:50 来自手机 | 显示全部楼层 |阅读模式
麻烦大佬给个程序参考下
回复

使用道具 举报

ID:161164 发表于 2023-5-23 17:04 | 显示全部楼层
1. 用联合体
2. 用字符串
回复

使用道具 举报

ID:94031 发表于 2023-5-23 17:07 | 显示全部楼层
双方定义收发浮点数,串口4个字节就可实现7位10进制数收发。
回复

使用道具 举报

ID:744809 发表于 2023-5-23 17:19 | 显示全部楼层
3个字节就可以了,比如1234567,你放到一个unsigned long的变量中,将右边24位分别放入一个3字节的buf中,buf[0] = temp_long >> 16;buf[1] = temp_long >> 8; buf[2] = temp_long & 0xFF;
然后发送这个数组就好了。接收到数据后通过左移操作还原成unsigned long变量即可
回复

使用道具 举报

ID:824490 发表于 2023-5-23 17:22 | 显示全部楼层
串口收发的都是数据,都是“16进制”,“10进制'也是当成"16进制"来收发,其实对串口来说都是2进制,根本没有x进制这个说法,有的只是后数据的处理才出现什么10进制之类的
回复

使用道具 举报

ID:824490 发表于 2023-5-23 17:25 | 显示全部楼层
卡住你的不是什么10进制,而是7位数。你可以开个缓存(7字节),收到第一个字节存入缓存第一个地址中,,,第7个存入7中。。。
回复

使用道具 举报

ID:65956 发表于 2023-5-24 08:28 | 显示全部楼层
把接收到的数据屏蔽最高位(&07F),这样不就是把8位当7位接收了,不过这种在51单片机中是不得以的方法,在高级单片机就能设置相应的接收位数
回复

使用道具 举报

ID:213173 发表于 2023-5-24 09:52 | 显示全部楼层
楼主语焉不详,地板回复应该是楼主想要的,但楼主未必能看明白。
回复

使用道具 举报

ID:123289 发表于 2023-5-24 10:40 | 显示全部楼层
串口总是按字节一个一个的接收二进制数,它可不管什么这个数那个数的花花定义。
至于7位数据什么的,关键在于你如何将这个7位数据,按字节拆分(发送时)、组合(接收时,复原)。
回复

使用道具 举报

ID:526543 发表于 2023-5-24 12:31 | 显示全部楼层
#include <reg52.h>

#define uchar unsigned char
#define uint unsigned int

sbit RX = P3^0;   // 串口接收引脚

uchar receivedData = 0;  // 存储接收到的数据

// 串口初始化函数
void InitUART() {
    TMOD = 0x20;    // 设置定时器1为模式2(8位自动重装)
    SCON = 0x50;    // 设置串口工作在模式1(8位数据,可变波特率)
    TH1 = 0xFD;     // 设置波特率为9600,晶振频率11.0592MHz
    TR1 = 1;        // 启动定时器1
}

// 串口接收中断处理函数
void UART_ISR() interrupt 4 {
    if (RI) {  // 接收到数据
        RI = 0;  // 清除接收中断标志

        // 获取接收到的数据
        uchar data = SBUF;

        // 忽略最高位的数据位(第8位)
        receivedData = data & 0x7F;
    }
}

// 延时函数
void Delay(uint del) {
    uint i, j;
    for (i = 0; i < del; i++) {
        for (j = 0; j < 1827; j++) {
            // 空循环
        }
    }
}

void main() {
    InitUART();  // 初始化串口

    // 启用全局中断
    EA = 1;
    // 启用串口接收中断
    ES = 1;

    while (1) {
        // 在这里可以使用 receivedData 变量进行处理,比如打印到LCD等
        // 这里只是简单的延时示例,可根据需要修改
        Delay(100);
    }
}
回复

使用道具 举报

ID:149043 发表于 2023-5-25 09:00 来自手机 | 显示全部楼层
123456ZXC1 发表于 2023-5-24 12:31
#include

#define uchar unsigned char

这个是7位数啊
,怎么能uchar
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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