标题: 做了一个单片机语音控制模块有一个难点始终没有攻破求解 [打印本页]

作者: zhhdok    时间: 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--);
                        
                        
}


作者: yzwzfyz    时间: 2022-9-9 08:53
1、开辟一个缓冲区域A,用于存入串入的数据。
2、串行通讯用中断,中断接收程序中只负责将接收到的数据存入A区,满一帧数据做个标记S=1,不做判断处理。
3、判断识别在主程序的进行:
如果S=1(已收到一帧数据),就分析处理数据,然后清除S。
如果S=0(没有数据),就跳过。
作者: lkc8210    时间: 2022-9-9 11:53






Test.zip

1.1 KB, 下载次数: 11


作者: zhhdok    时间: 2022-9-12 14:18
感谢总工程师呀,也感谢1楼的工程师太牛逼你们
作者: zhhdok    时间: 2022-9-12 18:16
lkc8210 发表于 2022-9-9 11:53

哥们请问我在编译的时候为什么出现错误了?(89C52)

51hei截图20220912181256.jpg (42.91 KB, 下载次数: 85)

51hei截图20220912181256.jpg

作者: zhhdok    时间: 2022-9-12 18:33
yzwzfyz 发表于 2022-9-9 08:53
1、开辟一个缓冲区域A,用于存入串入的数据。
2、串行通讯用中断,中断接收程序中只负责将接收到的数据存 ...

感谢哥们,你的思路让我有了方向
作者: zhhdok    时间: 2022-9-12 18:36
lkc8210 发表于 2022-9-9 11:53

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

51hei截图20220912181256.jpg (42.91 KB, 下载次数: 82)

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

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

作者: zhhdok    时间: 2022-9-12 20:02
lkc8210 发表于 2022-9-9 11:53

你好哥们:我把你的代码复制进去后进行编译,出现了一条错误麻烦你看看
指向这段代码 UART_Send_Array(StatrUp,sizeof(StartUp));
错误c202:’StatrUp‘:undefined identifier
是不是’StatrUp需要声明?
作者: Hephaestus    时间: 2022-9-13 12:33
zhhdok 发表于 2022-9-12 20:02
你好哥们:我把你的代码复制进去后进行编译,出现了一条错误麻烦你看看
指向这段代码 UART_Send_Array(S ...

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

我不知道你是怎么用的,但是楼主位你的代码里面是一个字节一个字节的发送,所以你把这部分注释掉就行了。
作者: zhhdok    时间: 2022-9-14 11:53
Hephaestus 发表于 2022-9-13 12:33
他的这个StartUp是要发送的字符串,后面跟的sizeof(StartUp)是字符串长度。

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

你好,我是想和他模拟的那个一样的,接收到指定的后,然后发送指定的5位 16进制数据,这个代码编译的时候就出错在startup
我要怎么改?才能顺利编译
作者: lkc8210    时间: 2022-10-17 09:09
你没有创建startup数组吗?
作者: zhhdok    时间: 2023-4-9 14:05
lkc8210 发表于 2022-10-17 09:09
你没有创建startup数组吗?

弄好了过程很曲折
作者: li64331218    时间: 2023-4-9 15:08
实现了功能就行。这个帖子很久了吧?




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1