標(biāo)題: 做了一個(gè)單片機(jī)語音控制模塊有一個(gè)難點(diǎn)始終沒有攻破求解 [打印本頁(yè)]

作者: zhhdok    時(shí)間: 2022-9-8 19:49
標(biāo)題: 做了一個(gè)單片機(jī)語音控制模塊有一個(gè)難點(diǎn)始終沒有攻破求解
近期搞了一個(gè)傳感器模塊A和一個(gè)音樂模塊B,A傳感器串口輸出AA 55 01 02 03的數(shù)據(jù)一共有10組,模塊B一共有30個(gè)觸發(fā)串口地址為 55 03 11 01 02 ,55 03 11 02 02,55 04 01 03 02類似格式的數(shù)據(jù),比如單片機(jī)收到傳感器AA 55 01 02 03數(shù)據(jù)后,讓它TXd口輸出 55 03 11 01 02,然后再過1秒輸出 55 03 11 02 02到B模塊。意思就是收到X,發(fā)送Y延時(shí)1秒發(fā)送Z,怎么寫這部分代碼,我絞盡腦汁也沒弄好請(qǐng)求大神幫忙

單片機(jī)源程序如下:
//晶振為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); //聲明子函數(shù)
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    時(shí)間: 2022-9-9 08:53
1、開辟一個(gè)緩沖區(qū)域A,用于存入串入的數(shù)據(jù)。
2、串行通訊用中斷,中斷接收程序中只負(fù)責(zé)將接收到的數(shù)據(jù)存入A區(qū),滿一幀數(shù)據(jù)做個(gè)標(biāo)記S=1,不做判斷處理。
3、判斷識(shí)別在主程序的進(jìn)行:
如果S=1(已收到一幀數(shù)據(jù)),就分析處理數(shù)據(jù),然后清除S。
如果S=0(沒有數(shù)據(jù)),就跳過。
作者: lkc8210    時(shí)間: 2022-9-9 11:53






Test.zip

1.1 KB, 下載次數(shù): 11


作者: zhhdok    時(shí)間: 2022-9-12 14:18
感謝總工程師呀,也感謝1樓的工程師太牛逼你們
作者: zhhdok    時(shí)間: 2022-9-12 18:16
lkc8210 發(fā)表于 2022-9-9 11:53

哥們請(qǐng)問我在編譯的時(shí)候?yàn)槭裁闯霈F(xiàn)錯(cuò)誤了?(89C52)

51hei截圖20220912181256.jpg (42.91 KB, 下載次數(shù): 85)

51hei截圖20220912181256.jpg

作者: zhhdok    時(shí)間: 2022-9-12 18:33
yzwzfyz 發(fā)表于 2022-9-9 08:53
1、開辟一個(gè)緩沖區(qū)域A,用于存入串入的數(shù)據(jù)。
2、串行通訊用中斷,中斷接收程序中只負(fù)責(zé)將接收到的數(shù)據(jù)存 ...

感謝哥們,你的思路讓我有了方向
作者: zhhdok    時(shí)間: 2022-9-12 18:36
lkc8210 發(fā)表于 2022-9-9 11:53

哥們我把你這個(gè)代碼原封不動(dòng)的復(fù)制,編譯的時(shí)候出現(xiàn)了錯(cuò)誤,是不是要聲明一下這個(gè)StartUp

51hei截圖20220912181256.jpg (42.91 KB, 下載次數(shù): 82)

有一行錯(cuò)誤的地方無法編譯

有一行錯(cuò)誤的地方無法編譯

作者: zhhdok    時(shí)間: 2022-9-12 20:02
lkc8210 發(fā)表于 2022-9-9 11:53

你好哥們:我把你的代碼復(fù)制進(jìn)去后進(jìn)行編譯,出現(xiàn)了一條錯(cuò)誤麻煩你看看
指向這段代碼 UART_Send_Array(StatrUp,sizeof(StartUp));
錯(cuò)誤c202:’StatrUp‘:undefined identifier
是不是’StatrUp需要聲明?
作者: Hephaestus    時(shí)間: 2022-9-13 12:33
zhhdok 發(fā)表于 2022-9-12 20:02
你好哥們:我把你的代碼復(fù)制進(jìn)去后進(jìn)行編譯,出現(xiàn)了一條錯(cuò)誤麻煩你看看
指向這段代碼 UART_Send_Array(S ...

他的這個(gè)StartUp是要發(fā)送的字符串,后面跟的sizeof(StartUp)是字符串長(zhǎng)度。

我不知道你是怎么用的,但是樓主位你的代碼里面是一個(gè)字節(jié)一個(gè)字節(jié)的發(fā)送,所以你把這部分注釋掉就行了。
作者: zhhdok    時(shí)間: 2022-9-14 11:53
Hephaestus 發(fā)表于 2022-9-13 12:33
他的這個(gè)StartUp是要發(fā)送的字符串,后面跟的sizeof(StartUp)是字符串長(zhǎng)度。

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

你好,我是想和他模擬的那個(gè)一樣的,接收到指定的后,然后發(fā)送指定的5位 16進(jìn)制數(shù)據(jù),這個(gè)代碼編譯的時(shí)候就出錯(cuò)在startup
我要怎么改?才能順利編譯
作者: lkc8210    時(shí)間: 2022-10-17 09:09
你沒有創(chuàng)建startup數(shù)組嗎?
作者: zhhdok    時(shí)間: 2023-4-9 14:05
lkc8210 發(fā)表于 2022-10-17 09:09
你沒有創(chuàng)建startup數(shù)組嗎?

弄好了過程很曲折
作者: li64331218    時(shí)間: 2023-4-9 15:08
實(shí)現(xiàn)了功能就行。這個(gè)帖子很久了吧?




歡迎光臨 (http://www.torrancerestoration.com/bbs/) Powered by Discuz! X3.1