找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 1838|回复: 12
收起左侧

做了一个单片机语音控制模块有一个难点始终没有攻破求解

[复制链接]
ID:467178 发表于 2022-9-8 19:49 | 显示全部楼层 |阅读模式
近期搞了一个传感器模块A和一个音乐模块B,A传感器串口输出AA 55 01 02 03的数据一共有10组,模块B一共有30个触发串口地址为 55 03 11 01 02 ,55 03 11 02 02,55 04 01 03 02类似格式的数据,比如单片机收到传感器AA 55 01 02 03数据后,让它TXd口输出 55 03 11 01 02,然后再过1秒输出 55 03 11 02 02到B模块。意思就是收到X,发送Y延时1秒发送Z,怎么写这部分代码,我绞尽脑汁也没弄好请求大神帮忙

单片机源程序如下:
//晶振为11.0592Mhz 波特率9600
#include "reg52.h"
#define uint unsigned int
sbit d=P1^5;
sbit a=P1^1;
uint x,y,z;
void delay(z); //声明子函数
void UART_Init()
{
        SCON=0x50;
        PCON |=0X80;
        TMOD &=0x0f;
        TMOD |=0x20;
        TL1=0XFD;
        TH1=0XFD;
        TF1=0;
        TR1=1;
        ET1=0;
        EA=1;
        ES=1;

}
void main()
{
        UART_Init();        
        while(1)
        {


        }
}
void UART_SendByte(unsigned char Byte)
{
        SBUF=Byte;
        while(TI==0);
        TI=0;
  }
void UART_Routine() interrupt 4
{
        if(RI==1)
        {
                RI=0;
               
                UART_SendByte(SBUF);
        
        }
}

void delay(z)   
{
                for(x=z;x>0;x--)
                        for(y=114;y>0;y--);
                        
                        
}

回复

使用道具 举报

ID:123289 发表于 2022-9-9 08:53 | 显示全部楼层
1、开辟一个缓冲区域A,用于存入串入的数据。
2、串行通讯用中断,中断接收程序中只负责将接收到的数据存入A区,满一帧数据做个标记S=1,不做判断处理。
3、判断识别在主程序的进行:
如果S=1(已收到一帧数据),就分析处理数据,然后清除S。
如果S=0(没有数据),就跳过。
回复

使用道具 举报

ID:161164 发表于 2022-9-9 11:53 | 显示全部楼层
Record_2022_09_09_11_46_51_908.gif
Capture_2022_09_09_11_49_12_124.png

2022-09-09_115206.png


Test.zip

1.1 KB, 下载次数: 11

回复

使用道具 举报

ID:467178 发表于 2022-9-12 14:18 | 显示全部楼层
感谢总工程师呀,也感谢1楼的工程师太牛逼你们
回复

使用道具 举报

ID:467178 发表于 2022-9-12 18:16 | 显示全部楼层

哥们请问我在编译的时候为什么出现错误了?(89C52)
51hei截图20220912181256.jpg
回复

使用道具 举报

ID:467178 发表于 2022-9-12 18:33 | 显示全部楼层
yzwzfyz 发表于 2022-9-9 08:53
1、开辟一个缓冲区域A,用于存入串入的数据。
2、串行通讯用中断,中断接收程序中只负责将接收到的数据存 ...

感谢哥们,你的思路让我有了方向
回复

使用道具 举报

ID:467178 发表于 2022-9-12 18:36 | 显示全部楼层

哥们我把你这个代码原封不动的复制,编译的时候出现了错误,是不是要声明一下这个StartUp

有一行错误的地方无法编译

有一行错误的地方无法编译
回复

使用道具 举报

ID:467178 发表于 2022-9-12 20:02 | 显示全部楼层

你好哥们:我把你的代码复制进去后进行编译,出现了一条错误麻烦你看看
指向这段代码 UART_Send_Array(StatrUp,sizeof(StartUp));
错误c202:’StatrUp‘:undefined identifier
是不是’StatrUp需要声明?
回复

使用道具 举报

ID:883242 发表于 2022-9-13 12:33 | 显示全部楼层
zhhdok 发表于 2022-9-12 20:02
你好哥们:我把你的代码复制进去后进行编译,出现了一条错误麻烦你看看
指向这段代码 UART_Send_Array(S ...

他的这个StartUp是要发送的字符串,后面跟的sizeof(StartUp)是字符串长度。

我不知道你是怎么用的,但是楼主位你的代码里面是一个字节一个字节的发送,所以你把这部分注释掉就行了。
回复

使用道具 举报

ID:467178 发表于 2022-9-14 11:53 来自手机 | 显示全部楼层
Hephaestus 发表于 2022-9-13 12:33
他的这个StartUp是要发送的字符串,后面跟的sizeof(StartUp)是字符串长度。

我不知道你是怎么用的,但 ...

你好,我是想和他模拟的那个一样的,接收到指定的后,然后发送指定的5位 16进制数据,这个代码编译的时候就出错在startup
我要怎么改?才能顺利编译
回复

使用道具 举报

ID:161164 发表于 2022-10-17 09:09 | 显示全部楼层
你没有创建startup数组吗?
回复

使用道具 举报

ID:467178 发表于 2023-4-9 14:05 | 显示全部楼层
lkc8210 发表于 2022-10-17 09:09
你没有创建startup数组吗?

弄好了过程很曲折
回复

使用道具 举报

ID:291668 发表于 2023-4-9 15:08 | 显示全部楼层
实现了功能就行。这个帖子很久了吧?
回复

使用道具 举报

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

本版积分规则

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

Powered by 单片机教程网

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