[單片機課程設(shè)計]MCS51與SPI串行接口語音芯片連接

上傳人:仙*** 文檔編號:28282473 上傳時間:2021-08-24 格式:DOC 頁數(shù):29 大?。?.61MB
收藏 版權(quán)申訴 舉報 下載
[單片機課程設(shè)計]MCS51與SPI串行接口語音芯片連接_第1頁
第1頁 / 共29頁
[單片機課程設(shè)計]MCS51與SPI串行接口語音芯片連接_第2頁
第2頁 / 共29頁
[單片機課程設(shè)計]MCS51與SPI串行接口語音芯片連接_第3頁
第3頁 / 共29頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《[單片機課程設(shè)計]MCS51與SPI串行接口語音芯片連接》由會員分享,可在線閱讀,更多相關(guān)《[單片機課程設(shè)計]MCS51與SPI串行接口語音芯片連接(29頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、MCS-51與SPI串行接口語音芯片連接 一、實驗?zāi)康? (1) 進一步理解SPI串行總線傳輸協(xié)議。 (2) 理解ISD4000系列語音芯片工作原理,放音、錄音控制過程。 (3) 理解MCS-51與SPI總線外設(shè)(如ISD4000系列語音芯片)的硬件連接、讀寫方式。 二、實驗設(shè)備與器材 仿真器及附件、圖0-1所示實驗電路板各一套。 三、實驗電路 本實驗涉僅僅涉及實驗板上的U101、U103、U104、U401(ISD4002語音芯片)、U404(集成功率放大器),而與其他元器件無關(guān)。接通電源前,將JP103的1-2引腳短路,使ISD4002語音芯片的中斷輸出端引腳與MCS-51外

2、中斷(P3.2)引腳相連。 由于多數(shù)MCS-51芯片沒有內(nèi)置SPI串行總線接口部件,因此只能用軟件模擬SPI總線時序方式讀寫SPI總線接口器件。 四、實驗原理(ISD4000系列語音芯片簡介) ISD4000系列語音芯片包括ISD4002、ISD4003、ISD4004三個子系列芯片,電源電壓為3V,單片錄音時間在2~16分鐘之間,音質(zhì)中上,廣泛用于公共汽車語音報站系統(tǒng)、移動及自動應(yīng)答電話設(shè)備、語音復(fù)讀機等電子產(chǎn)品中。 該系列語音芯片采用CMOS工藝,內(nèi)含振蕩器、防混淆濾波器、平滑濾波器、音頻放大器、自動靜噪及高密度多電平Flash ROM存貯器陣列。通過串行通信接口(SPI或Micr

3、owire總線協(xié)議)與微控制器(如MCS-51芯片)相連,所有操作均由微控制器控制。內(nèi)部采用多電平直接模擬量存儲技術(shù), 每個采樣值直接存貯在片內(nèi)Flash ROM存貯器中,因此能逼真、自然地再現(xiàn)語音、音樂、音調(diào)等聲響效果,避免了一般固體錄音電路因量化和壓縮造成的量化噪聲和"金屬聲"??蛇x4.0,5.3,6.4,8.0kHz等多個采樣頻率,采樣頻率越低,錄放時間就越長(但音質(zhì)會略有下降),片內(nèi)信息存放在Flash ROM存貯器中,在斷電狀態(tài)下可保存100年(典型值),能反復(fù)錄音10萬次以上。 (一) 主要參數(shù) ISD4000系列語音芯片主要參數(shù)如表13-1所示。 表13-1 主要參數(shù)

4、 型號 存儲時間 (秒) 最大 段數(shù) 信息分辯 率(毫秒) 采樣頻 率(HZ) 濾波器 帶寬(HZ) 控制碼+地址位 長度 ISD4002-120 120 600 200 8.0K 3.4K 5+11 ISD4002-180 180 600 300 5.3k 2.3k 5+11 ISD4002-240 240 600 400 4.0k 1.7k 5+11 ISD4003-04 240 1200 200 8.0K 3.4K 5+11 ISD4003-06 360 1200 300 5.3K 2.3K 5

5、+11 ISD4003-08 480 1200 400 4.0K 1.7K 5+11 ISD4004-08 480 2400 200 8.0K 3.4K 8+16 ISD4004-16 960 2400 400 4.0K 1.7K 8+16 (二) 封裝及引腳排列 ISD4000系列語音芯片采用28引腳TSOP、PDIP或SOIC封裝方式,其中PDIP或SOIC封裝方式引腳排列如圖13-1所示。 圖13-1 PDIP或SOIC封裝引腳排列 引腳功能: VCCD——芯片內(nèi)部數(shù)字電路電源引腳, VSSD——芯片內(nèi)部數(shù)字電路地線引腳;

6、VCCA——芯片內(nèi)部模擬電路電源引腳, VSSA——芯片內(nèi)部模擬電路地線引腳。 為減小噪聲,芯片內(nèi)部模擬、數(shù)字電路具有各自的電源、地線總線,以方便在印制板上實現(xiàn)數(shù)字、模擬電路電源和地線分開走線,形成單點接地的布線規(guī)則。 ANA IN+、ANA IN-——分別是錄音輸入放大器的同相輸入端和反相輸入端。輸入放大器可用單端或差分方式之一驅(qū)動。采用單端驅(qū)動時,信號由耦合電容輸入,最大為32mV(峰峰值)。耦合電容與本端內(nèi)部的3KΩ串聯(lián)電阻構(gòu)成的輸入阻抗決定了芯片頻帶的低端截止頻率。采用差分驅(qū)動時,最大為16mV(峰峰值)。 XCLK——外部采樣時鐘輸入端,可選的采樣頻率如表10所示。一般使用芯

7、片內(nèi)部采樣頻率(在出廠前已調(diào)校,誤差在+1%以內(nèi)),除非對采樣精度要求很高。當不用外部采樣時鐘信號時, XCLK引腳必須接地。 AM CAP——自動靜噪輸入端。當錄音信號電平下降到內(nèi)部設(shè)定的某一閾值以下時,自動靜噪功能使信號衰弱,這樣有助于養(yǎng)活無信號(靜音)時的噪聲。一般情況系情況下,改引腳對地接1μF電容,構(gòu)成內(nèi)部信號電平峰值檢測電路的一部分。檢出的峰值電平與內(nèi)部設(shè)定的閾值作比較,決定自動靜噪功能的翻轉(zhuǎn)點。大信號時,自動靜噪電路不衰減,靜音時衰減6dB。1μF電容也影響自動靜噪電路對信號幅度的響應(yīng)速度。當AM CAP引腳接VCCA時,則禁止自動靜噪。 AUD OUT——音頻輸出,可驅(qū)動5

8、KΩ的負載。 MOSI——命令及數(shù)據(jù)信息的串行輸入端。 MIS0——狀態(tài)信息的串行輸出端。 SCLK——串行時鐘輸入端,由SPI總線主設(shè)備(一般為MCU)提供。 ——片選信號輸入端,輸入,低電平有效。當片選信號無效時,芯片處于待用狀態(tài),靜態(tài)電流典型值為1uA。 ——中斷輸出端,漏極開路(OD)輸出,低電平有效。在放音(包括快進)、錄音操作過程中,遇到到段結(jié)束(EOM)、存儲器末尾(OVF)時,引腳輸出低電平并保持,直到SPI總線主設(shè)備向ISD芯片寫入新的命令。 RAC——行地址時鐘輸出端,漏極開路(OD)。每個RAC周期表示ISD存儲器的操作進行了一行(ISD4003系列中的存貯器

9、有1200行)。該信號高電平時間為200ms,低電平為25ms??爝M模式下,RAC的218.75μs是高電平,31.25μs為低電平。該端可用于存儲管理技術(shù)。 (三) 控制命令及SPI端口控制寄存器位 ISD4000系列語音芯片控制命令如表13-2所示,SPI端口控制寄存器位含義如圖13-2所示。 表13-2 控制命令 指令 5位控制碼<11位地址> 操作摘要 POWERUP 00100 上電:等待TPUD后器件可以工作 SET PLAY 11100< A10-A0> 從指定地址開始放音。必須后跟PLAY指令使放音繼續(xù) PLAY 111

10、10 從當前地址開始放音(直至EOM或OVF) SET REC 10100 從指定地址開始錄音。必須后跟REC指令錄音繼續(xù) REC 10110 從當前地址開始錄音(直至OVF或停止) SET MC 11101 從指定地址開始快進。必須后跟MC指令快進繼續(xù) MC 11111 執(zhí)行快進,直到EOM.若再無信息,則進入OVF狀態(tài) STOP 0X110 停止當前操作(C3沒有定義) STOP WRDN 0X01X

11、XXXXX> 停止當前操作并掉電(C3、C0沒有定義) RINT 0X110 讀OVF和EOM標志(C3沒有定義) 圖13-2 SPI端口控制寄存器位及含義 1. 放音過程 (1) 執(zhí)行上電命令(POWER UP)。 (2) 延遲等待上電結(jié)束(當采樣頻率為8KHz時,上電延遲時間約為25mS)。 (3) 執(zhí)行“SET PLAY”命令,設(shè)置放音段起始地址。 錄音、放音段起始地址與每段最短時間及放音長度有關(guān)。例如,對ISD4002-120芯片來說,最多有600段(段地址編號為000~599),每段最短錄音時間為200mS。如果每段記錄一個單音

12、,長度為400mS(即每個單音占用兩段),則第n個單音對應(yīng)的段地址為(n2)。 (4) 執(zhí)行“PLAY”命令,從當前地址開始放音,遇到段結(jié)束標志EOM或存儲器末尾標志OVF時停止放音,同時引腳輸出低電平,指示當前段播放結(jié)束。 當需要播放兩段或兩段以上時,如果段與段之間間隔很小時,可在上一段播放結(jié)束后,延遲一段時間(需通過試聽確定延遲時間的長短,一般為數(shù)十mS)后再播放下一段。放音過程如圖13-3(a)所示。 在放音操作過程中,執(zhí)行“STOP”或“STOP WRDN”命令時,將終止當前放音操作。 2. 錄音過程 (1) 執(zhí)行上電命令(POWER UP)。 (2) 延遲等待上電結(jié)束

13、(當采樣頻率為8KHz時,上電延遲時間TPUD約為25mS)。 (3) 再執(zhí)行上電命令(POWER UP)。 (4) 延遲兩倍上電等待時間(即延遲2TPUD時間)。 (5) 執(zhí)行“SET REC”命令,設(shè)置錄音段的起始地址。 (6) 執(zhí)行“REC”命令,從當前地址開始錄音,直到出現(xiàn)存儲器末尾標志OVF信號。 在錄音過程中,未錄到存儲器末尾時,就執(zhí)行“STOP”或“STOP WRDN”命令,將終止當前錄音操作,并產(chǎn)生EOM標志。因此,可利用這一特性在芯片上錄制多段語音信息。 可見,錄音過程與放音過程相似,只是每次錄音操作操作只能錄一段,如圖13-3(b)所示。 圖13-3 放音

14、、錄音流程 (四) SPI總線接口時序及命令格式 芯片支持8位、16位命令格式,傳輸時序如圖13-4所示,ISD4000系列語音芯片SPI總線參數(shù)如表13-3所示。 從ISD4000系列語音芯片SPI總線時序可以看出:其SPI總線時序與SPI總線接口存儲器EEPROM 25C01/02/04兼容。在接收控制命令時,先接收LSB(這要求SPI總線控制器先輸出LSB);空閑時,SCLK為低電平,在SCLK上升沿鎖存器MOSI引腳上的信息。 表13-3 ISD4000系列語音芯片SPI總線參數(shù) 符號 參數(shù) 最小 典型 最大 單位 TSSS 片選信號建立時間 500

15、 nsec TSSH 片選信號保持時間 500 nsec TDIS 串行輸入數(shù)據(jù)DI建立時間 200 nsec TDIH 串行輸入數(shù)據(jù)DI保持時間 200 nsec TPD 輸出延遲 500 nsec TDF 輸出延遲到高阻態(tài) 500 nsec TSSmin 片選信號高電平時間 1 μsec TSCKhi SCLK 高電平時間 400 nsec TSCKlow SCLK低電平時間 400 nsec F0 SCLK頻率 1000 kHz

16、(a) 傳輸時序 (b) 8位命令格式 (c) 16位命令格式 圖13-4 命令格式 (五) 典型應(yīng)用電路及與MCS-51的連接 MCS-51芯片一般沒有內(nèi)置SPI總線部件,可通過軟件方式模擬SPI總線操作時序控制ISD4000系列語音芯片的操作,典型連接線路如圖13-5所示。 圖13-5 與MCS-51芯片的典型連接 (六) 參考驅(qū)動程序 根據(jù)圖13-5連接方式,下面給出了與SPI模擬總線驅(qū)動程序、組合播放、從指定段連續(xù)播放、單段錄音有關(guān)的參考程序段,完整程序參閱磁盤文件實驗十三(ISDN4000系列語音驅(qū)動程序).ASM。 MOSI BIT P1.

17、5 MISO BIT P1.6 SCLK BIT P1.7 ISDSS BIT P1.4 ;片選信號 MIC_C BIT P1.3 ;功放電源控制,同時也作放音/錄音標志(0-放音、1-錄音) ISDBUF DATA 50H ;ISD語音芯片命令緩沖區(qū) ;50H單元存放命令碼(C4-C0)及段高3位地址(A10-A8) ;51H單元存放段低8位地址(A7-A0) ISDBUFSP DATA 52H ;播放指針 TASK3 DATA 53H ;語

18、音播放狀態(tài),b2-b0記錄放音或錄音狀態(tài) ISDTIME DATA 54H ;語音播放延遲時間 XmtDat DATA 60H ;段緩沖區(qū) RECNO EQU 0F0H ;可錄音的最小段號 ;初始化外中斷INT0 SETB IT0 ;下降沿觸發(fā)(采用查詢方式檢測) ;------從指定段連續(xù)播放初始化 CLR MIC_C ;設(shè)置放音標志 MOV ISDBUFSP, #0 ;設(shè)置播放的起始段號 MOV TASK3, #05H ;啟動標志(未上電標志) HE

19、RE1: LCALL ISD_RD_A ;調(diào)用逐段播放過程 MOV A, TASK3 CJNE A, #0, HERE1 SJMP $ ;虛擬等待 ;--------段組合播放初始化 ;把待播放的段編號(一次最多可播放16段)裝入播放緩沖區(qū)內(nèi) ;當待播放的段號不足16時,在播放段后放0FFH,作為結(jié)束標志 MOV R0, #XmtDat MOV @R0, #02h ;初始化語音段緩沖區(qū) INC R0 MOV @R0, #01H INC R0 MO

20、V @R0, #22h INC R0 CLR MIC_C ;設(shè)置放音標志 MOV ISDBUFSP, #0 ;初始化播放指針 ;-------段組合播放啟動 MOV TASK3, #05H ;啟動標志(未上電標志) HERE2: LCALL ISD_RD ;調(diào)用段組合播放過程 MOV A, TASK3 CJNE A, #0, HERE2 SJMP $ ;虛擬等待 ;------單段錄音初始化 MOV R0, #XmtDa

21、t MOV @R0, #xxh ;段地址送緩沖區(qū)首字節(jié) INC R0 MOV @R0, #xx ;錄音時間送緩沖區(qū)第二字節(jié) SETB MIC_C ;設(shè)置錄音標志 ;------單段錄音過程啟動 MOV TASK3, #05H ;啟動標志(未上電標志) HERE3: LCALL ISD_WR ;調(diào)用單段錄音過程 MOV A, TASK3 CJNE A, #0, HERE3 SJMP $ ;虛擬

22、等待 ;把語音緩沖區(qū)語音段送IDS4000芯片播放子程序 PROC ISD_RD ;入口參數(shù):TASK3置為05H ;b2-b0記錄放音或錄音狀態(tài) ;000-空閑 ;001-執(zhí)行上電延遲(25ms) ;010-段播放延遲 ;011-段間延遲 ;101-未上電標志 ISD_RD: JNB MIC_C, RUN ;錄音狀態(tài),不執(zhí)行! JMP EXIT ;退出 RUN: MOV A, TASK3 A

23、NL A, #07H ;保留標志位b2~b0 CJNE A, #000B, NEXT1 ;b2~b0為000,空閑 JMP EXIT ;退出 NEXT1: CJNE A, #101B, NEXT2 ;b2~b0為101,未上電,先執(zhí)行上電操作 ;執(zhí)行“POWER UP” (上電)命令 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV @R0, #20H ;00100XXX,執(zhí)行上電操作 LCALL SPIBW ;調(diào)用SPI總線控制

24、命令寫入子程序 MOV ISDTIME, #5 ;延遲時間為5*5ms(即25ms) MOV TASK3, #1 ;進入上電延遲狀態(tài) JMP EXIT NEXT2: CJNE A, #001B, NEXT3 ;b2~b0為001,處于上電延遲期間,檢查延遲時間 NEXT30: MOV A, ISDTIME JZ NEXT31 ;不是0,上電延遲時間未到,等待 SJMP EXIT NEXT31: MOV A, #XmtDat ADD A, ISDBUFSP M

25、OV R0, A MOV A, @R0 ;取出待放音段編號 MOV B, #2 ;假設(shè)每一單音占用兩個最小段 MUL AB ;計算段首地址 MOV R0, #ISDBUF+1;語音命令緩沖首地址送R0 MOV @R0, A ;段地址低8位送命令緩沖 DEC R0 MOV A, B ;段地址高位送A ORL A, #11100000B;形成地址控制碼11100(SET PLAY) MOV @R0, A ;命令碼送命令緩沖區(qū)

26、 LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 ;執(zhí)行PLAY命令 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV A, #0F0H ;11110XXX,執(zhí)行PLAY/REC命令 MOV @R0, A ;命令碼送命令緩沖區(qū) LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 ;開始放音 MOV TASK3, #02H ;b2~b0置為010態(tài)(修改作業(yè)號) CLR IE0 ;清除INT0中斷標志(采用查

27、詢方式確定段 ;播放是否已結(jié)束) SJMP EXIT NEXT3: CJNE A, #2, NEXT4 ;b2~b0置為010 ;屬于段播放期間延遲 JB IE0, NEXT41 ;INT0中斷無效,即未遇到EOF或VOF標志 SJMP EXIT ;等待 NEXT41: CLR IE0 ;清除INT0中斷標志 INC ISDBUFSP ;指針加+1 MOV A, ISDBUFSP CJNE A, #16,

28、NEXT42 NEXT42: JC NEXT43 ;指針大于或等于16,緩沖區(qū)所有段已播放結(jié)束 SJMP NEXT441 NEXT43: MOV A, #XmtDat ADD A, ISDBUFSP MOV R0, A MOV A, @R0 ;取出將要播放的段編號 CJNE A, #0FFH, NEXT44 ;盡管指針<16,但緩沖區(qū)內(nèi)已經(jīng)沒有需要播放的段號 NEXT441: MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV @R0, #10H

29、 ;0001X XXX,執(zhí)行STOP WRDN命令,停止當前操作 LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 SETB MIC_C ;關(guān)閉功率放大器電源 MOV TASK3, #0 ;將b2~b0置為000,結(jié)束播放 SJMP EXIT NEXT44: MOV TASK3, #3 ;進入段間延遲狀態(tài) MOV ISDTIME, #8 ;延遲時間為8*5ms(即40ms) SJMP EXIT NEXT4: CJNE A, #3, EXIT ;b2~b0

30、處于011態(tài),屬于段間延遲 JMP NEXT30 ;處理方式與上電延遲相同 EXIT: RET END ;把IDSN4000語音芯片內(nèi)的語音段逐一播放出來 PROC ISD_RD_A ;入口參數(shù):TASK3置為05H ;b2-b0記錄放音或錄音狀態(tài) ;000-空閑 ;001-執(zhí)行上電延遲(25ms) ;010-段播放延遲 ;011-段間延遲 ;101-未上電標志 ISD_RD_A: JNB MIC_C, RUN

31、 ;錄音狀態(tài),不執(zhí)行! JMP EXIT ;退出 RUN: MOV A, TASK3 ANL A, #07H ;保留標志位b2~b0 CJNE A, #000B, NEXT1 ;b2~b0為000,空閑 JMP EXIT ;退出 NEXT1: CJNE A, #101B, NEXT2 ;b2~b0為101,未上電,先執(zhí)行上電操作 ;執(zhí)行“POWER UP” (上電)命令 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0

32、 MOV @R0, #20H ;00100XXX,執(zhí)行上電操作 LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 MOV ISDTIME, #5 ;延遲時間為5*50ms(即25ms) MOV TASK3, #1 ;進入上電延遲狀態(tài) JMP EXIT NEXT2: CJNE A, #001B, NEXT3 ;b2~b0為001,處于上電延遲期間 NEXT30: MOV A, ISDTIME JZ NEXT31 ;不是0,上電延遲時間未到 SJMP

33、EXIT ;退出,繼續(xù)等待 NEXT31: MOV A, ISDBUFSP MOV B, #2 ;假設(shè)每一單音占兩個最小段 MUL AB ;計算段首地址 MOV R0, #ISDBUF+1;語音命令緩沖首地址送R0 MOV @R0, A ;段地址低8位送命令緩沖 DEC R0 MOV A, B ;段地址高位送A ORL A, #11100000B;形成地址控制碼11100(SET PLAY) MOV @R0, A

34、;命令碼送命令緩沖區(qū) LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 ;執(zhí)行PLAY命令 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV A, #0F0H ;11110XXX,執(zhí)行PLAY命令 MOV @R0, A ;命令碼送命令緩沖區(qū) LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 ;開始放音 MOV TASK3, #02H ;b2~b0置為010態(tài)(修改作業(yè)號) CLR IE0 ;清除INT0中斷

35、 SJMP EXIT NEXT3: CJNE A, #2, NEXT4 ;b2~b0處于010態(tài),屬于段播放期間延遲 JB IE0, NEXT41 ;INT0中斷無效,即未遇到EOF或VOF SJMP EXIT ;等待 NEXT41: CLR IE0 ;清除INT0中斷 INC ISDBUFSP ;指針加+1 MOV A, ISDBUFSP CJNE A, #0F0H, NEXT42 NEXT42: JC NEXT43 ;指針>=

36、F0H,退出 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV @R0, #10H ;0001X XXX,執(zhí)行STOP WRDN命令,停止當前操作 LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 SETB MIC_C ;關(guān)閉功率放大器電源 MOV TASK3, #0 ;將b2~b0置為000,結(jié)束播放 SJMP EXIT NEXT43: MOV TASK3, #3 ;進入段間延遲狀態(tài) MOV ISDTIME, #10 ;延遲時間為10*5

37、ms(即50ms) SJMP EXIT NEXT4: CJNE A, #3, EXIT ;b2~b0置為011 ;屬于段間延遲 JMP NEXT30 ;處理方式與上電延遲相同 EXIT: RET END ;從指定地址開始錄音(單段錄音) PROC ISD_WR ;從指定地址開始錄音(單段錄音) ;入口參數(shù):TASK3置為05H ;b2-b0記錄放音或錄音狀態(tài) ;000-空閑 ;001-執(zhí)行上電延遲(25ms) ;01

38、0-錄音過程的再上電延遲 ;011-錄音延遲 ;101-未上電標志 ISD_WR: JB MIC_C, RUN ;非錄音狀態(tài),不執(zhí)行! JMP EXIT RUN: MOV A, TASK3 ANL A, #07H ;保留標志位b2~b0 CJNE A, #00H, NEXT1 ;b2~b0為000,空閑 JMP EXIT NEXT1: CJNE A, #101B, NEXT2 ;b2~b0為101,未上電,先執(zhí)行上電操作 ;執(zhí)行

39、“POWER UP” (上電)命令 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV @R0, #20H ;00100XXX,執(zhí)行上電操作 LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 MOV ISDTIME, #5 ;延遲時間為5*5ms(即25ms) MOV TASK3, #1 ;進入上電延遲狀態(tài) JMP EXIT NEXT2: CJNE A, #001B, NEXT3 ;b2~b0為001,處于上電延遲期間 MOV A, ISDT

40、IME JZ NEXT31 ;不是0,上電延遲時間未到 SJMP EXIT ;退出,繼續(xù)等待 NEXT31: ;再執(zhí)行“POWER UP” (上電)命令 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV @R0, #20H ;00100XXX,執(zhí)行上電操作 LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 MOV ISDTIME, #10 ;延遲時間為10*5ms(即50ms) MOV TASK3, #2 ;進入再上電延遲狀態(tài)

41、(時間50ms) SJMP EXIT ;退出 NEXT3: CJNE A, #010B, NEXT4 ;b2~b0為010,處于再上電延遲期間 MOV A, ISDTIME JZ NEXT41 ;不是0,再上電延遲時間未到 SJMP EXIT ;退出,繼續(xù)等待 NEXT41: MOV R0, #XmtDat MOV A, @R0 CJNE A, #RECNO, NEXT42 NEXT42: JNC NEXT43 ;小于允許錄音段地址,關(guān)閉

42、電源退出 SJMP NEXT51 NEXT43: MOV B, #2 ;假設(shè)前面每一單音占用兩個最小段 MUL AB ;計算段首地址 MOV R0, #ISDBUF+1;語音命令緩沖首地址送R0 MOV @R0, A ;段地址低8位送命令緩沖 DEC R0 MOV A, B ;段地址高位送A ORL A, #10100000B;形成地址控制碼10100(SET REC) MOV @R0, A ;命令碼送命令緩沖區(qū) LCA

43、LL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 ;執(zhí)行REC命令 MOV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV A, #0B0H ;10110XXX,執(zhí)行REC命令 MOV @R0, A ;命令碼送命令緩沖區(qū) LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 ;從地址開始開始錄音 MOV TASK3, #03H ;b2~b0置為011態(tài)(修改作業(yè)號) MOV R0, #XmtDat+1;取錄音時間 MOV ISDTIME,

44、@R0 ;錄音時間送計時單元 CLR IE0 ;清除INT0中斷 SJMP EXIT NEXT4: CJNE A, #3, EXIT ;b2~b0為011,處于錄音等待期間 JB IE0, NEXT51 ;INT0中斷效,即遇到VOF ;檢查延遲時間是否為0? MOV A, ISDTIME JZ NEXT51 ;錄音已經(jīng)結(jié)束 SJMP EXIT ;錄音尚未結(jié)束,退出! NEXT51: CLR IE0 ;清除中斷 M

45、OV R0, #ISDBUF ;語音命令緩沖首地址送R0 MOV @R0, #10H ;0001X XXX,執(zhí)行STOP WRDN命令,停止當前操作 LCALL SPIBW ;調(diào)用SPI總線控制命令寫入子程序 SETB MIC_C ;關(guān)閉功率放大器電源 MOV TASK3, #00 ;將b7、b6置為00,結(jié)束播放 EXIT: RET END ;控制命令送ISD4000語音芯片(16位命令格式) PROC SPIBW ;SPI總線控制命令寫入子程序 ;入口參數(shù):16位命令碼(兩字節(jié))

46、存放在ISDBUF緩沖區(qū)內(nèi) ;出口參數(shù):無 ;使用資源:R0、R6、R7及Acc、PSW、DPTR(使用進位標志C) SPIBW: CLR EA CLR SCLK ;空閑時SCLK處于高電平,以減小功耗。而,ISD采用 ;正極性SCLK脈沖頭。因此,在片選信號SS為低電平前 ; 先將SCLK置為低電平 CLR ISDSS ;片選信號為低 MOV R0, #ISDBUF+1 ;取命令碼低位字節(jié) MOV R6

47、, #2 ;傳送兩字節(jié) LOOP2: MOV A, @R0 MOV R7, #08H ;移動次數(shù) LOOP1: RRC A ;帶Cy右移。 MOV MOSI, C ;CPU輸出數(shù)據(jù)。 SETB SCLK ;利用SCLK上升沿鎖存輸入的數(shù)據(jù)。 NOP ;由于SCLK信號時鐘頻率最高為1MHz,即高低 ;電平時間必須大于400uS,可根據(jù)晶振頻率插入

48、 ;0-2條NOP指令(對于晶振頻率在12MHz以內(nèi)時,不用) CLR SCLK ;時鐘信號為低電平 DJNZ R7,LOOP1 DEC R0 ;指針減1,指向下一字節(jié) DJNZ R6, LOOP2 SETB ISDSS ;執(zhí)行結(jié)束后將SS引腳置為高電平。 SETB SCLK ;空閑時SCLK處于高電平,以減小功耗。 SETB EA RET END 五、實驗內(nèi)容 1. 寫出ISD4002語音芯片的讀寫控制

49、程序,逐段播放實驗板上ISD4002語音芯片內(nèi)已錄好的語音信息。 2. 在空白處錄制5S左右的語音信息。 3. 在實驗九(1)基礎(chǔ)上,實現(xiàn)每按下一個按鍵時,通過語音芯片報出鍵名。 實驗15 無線解碼接收 一、實驗?zāi)康? (1) 理解無線收發(fā)系統(tǒng)組成、工作原理。 (2) 理解PT2262或與之兼容的固定編碼芯片信息幀格式;理解軟件解碼原理、實現(xiàn)方法以及軟件解碼程序編寫要領(lǐng)。 (3) 初步掌握自適應(yīng)軟件解碼程序設(shè)計規(guī)則。 (4) 理解MCS-51芯片內(nèi)PCA模塊的功能和使用方法。 二、實驗設(shè)備與器材 仿真器及附件、圖0-1所示實驗電路板各一套(需帶ASK無線接收模塊),PT2

50、262編碼遙控器或門磁一只、導(dǎo)線一批。 三、實驗原理與電路 1. 無線收發(fā)系統(tǒng) 典型無線收發(fā)系統(tǒng)如圖15-1所示,由ASM無線接收/解調(diào)模塊、一個或多個PT2262編碼遙控器(或無線探頭)組成。 圖15-1 典型無線收發(fā)系統(tǒng) 2. PT2262編碼芯片信息幀格式 PT2262或與之兼容的固定編碼芯片性能穩(wěn)定,價格低廉,是無線探頭、廉價遙控器的首選編碼芯片。這類芯片編碼長度為24位,一信息幀由同步頭、地址碼、數(shù)據(jù)碼三部分組成,如圖15-2所示。同步頭高電平持續(xù)時間為4α(α是編碼芯片振蕩周期,在25μs~120μs之間,由振蕩電阻決定),間歇期為124α;編碼位采用PWM調(diào)制,脈

51、寬比為1:3,“0”碼高電平持續(xù)時間為4α,低電平持續(xù)時間為12α;而“1”碼高電平持續(xù)時間為12α,低電平持續(xù)時間為4α。一信息幀總長為,即512α。發(fā)送時,先輸出編碼的最低位。 圖15-2 PT2262編碼芯片信息幀格式 3. 自適應(yīng)軟件解碼方法 為降低成本、提高靈活性,在含有MCU的無線接收系統(tǒng)中,一般不用硬件解碼芯片PT2272實現(xiàn)PT2262編碼信息的解碼,而采用軟件解碼方式。 本實驗借助MCS-51RX系列MCU芯片]內(nèi)置的可編程計數(shù)器陣列(PCA)上下沿捕獲功能測量脈沖信號高、低電平持續(xù)時間;用脈沖間隔時間比作為脈沖寬度測量依據(jù)實現(xiàn)可適應(yīng)不同脈沖頭寬度的自適應(yīng)軟件解

52、碼方式。 根據(jù)編碼芯片信息幀特點,當α取25μs~120μs時,信息幀內(nèi)高電平最長時間為12α(300μs~1.44ms之間);低電平時間最長為同步頭低電平持續(xù)時間124α(3.1ms~14.88ms)。因此,當系統(tǒng)時鐘頻率為11.092MHz時,在6時鐘/機器周期模式下,PCA計數(shù)器溢出時間為,即35.55ms,即信息幀內(nèi)相鄰兩次捕獲時間間隔小于定時器溢出時間。 (1) 資源及狀態(tài)分配 為簡化軟件解碼判別過程,縮短PCA中斷執(zhí)行時間,使用字節(jié)變量STU記錄解碼狀態(tài),各位定義如下: b2~b0記錄信息幀狀態(tài),如圖15-3所示。000為起始狀態(tài),下降沿時刻,如果相鄰兩次捕獲間隔不在100

53、us~1.44ms20%范圍內(nèi),則返回000態(tài);上升沿后,如果時間間隔不在允許范圍內(nèi),則置為001態(tài);而101、110分別表示編碼位高、低電平狀態(tài)。 圖15-3 b3位作信息幀連續(xù)有效標志。 b4位是解碼成功標志。以PT2262作編碼芯片的編碼器會連續(xù)發(fā)送4幀以上信息,為提高可靠性,采用雙循環(huán)校驗,即只有接收到兩相鄰的信息幀編碼相同時,b4位置1。 因此b4~b3描述的解碼狀態(tài)含義為:00表示尚未接收到完整信息幀;01表示已收到了一完整信息幀;11表示已連續(xù)接收了兩個相同的信息幀,解碼有效標志置1;10表示接收緩沖區(qū)數(shù)據(jù)有效,但未處理。 用字變量TIME記錄相鄰兩次捕獲時間間隔,

54、字變量TIMEB記錄基本時間(4α)。 (2) 自適應(yīng)軟件解碼過程 自適應(yīng)軟件解碼過程如圖15-4(a)~(d)所示。為保證能夠接收基本時間只有100us左右的高速編碼信息,主控程序中除了將PCA中斷優(yōu)先級置為最高外,還必須保證PCA中斷服務(wù)程序執(zhí)行時間盡可能短,即最好用匯編語言指令編寫PCA中斷服務(wù)程序。由于MCS-51指令系統(tǒng)沒有雙字節(jié)除法指令,解碼過程中涉及到的除法運算,可采用減法或多項式除法完成。 圖15-4 自適應(yīng)解碼軟件過程 四、實驗內(nèi)容、過程及要求 本實驗主要涉及實驗板上的U101、U103、U402等芯片。接通電源前,板上各跳線狀態(tài)如表15-1所示。 表

55、15-1 跳線設(shè)置 JP103 JP104 JP107 JP201 JP202 JP203 JP204 JP205 JP402 JP403 SWDIP 1-2開路 2-3開路 1-2開路 2-3開路 短路 1-2 短路 2-3 開路 1-2 短路 2-3 開路 1-2 短路 2-3 開路 1-2 短路 2-3 開路 1-2 短路 2-3 開路 1-2 開路 2-3短路 1-2 開路 2-3短路 OFF 與自適應(yīng)軟件解碼有關(guān)程序段如下,完成程序可參閱實驗十五.ASM。 ;*****定義軟件解碼變量***** WUSTU

56、 DATA 2EH ;b2-b0作無線接收狀態(tài)標志 ;000-開始;001-同步頭高電平;010-同步頭低電平 ;101-數(shù)據(jù)位高電平;110-數(shù)據(jù)位低電平 LXJIE BIT WUSTU.3 ;信息幀連續(xù)標志 JIEMA BIT WUSTU.4 ;接收數(shù)據(jù)有效標志(可以利用數(shù)據(jù)有效標志作為;數(shù)據(jù)處理標志) ;數(shù)據(jù)有效,而信息幀連續(xù)標志無效時,即認為接收無效 HDATAB BIT 0

57、1H ;高電平時間,碼長標志(4a為0,12a為1) OVERT DATA 2FH ;相鄰居兩次捕獲之間定時器溢出次數(shù) BUFF0 DATA 30H ;解碼接收緩沖區(qū)(30-3F) TIMEL DATA 5AH ;相鄰兩次捕獲間隔時間低8位 TIMEH DATA 5BH ;相鄰兩次捕獲間隔時間高8位 CNTB DATA 5CH ;信息幀長度(單位為bit) TIMEBCL DATA 7DH ;同步頭高電平時間(即4a)的低8位 TIMEBCH DATA 7EH ;同步頭高電平時間(即4a)的高

58、8位 ORG 0000H LJMP MAIN ORG 0033H LJMP PCA ;PCA中斷服務(wù)程序入口地址(用于解碼接收) ORG 0050H PROC MAIN ;主程序開始 MAIN: ;---PCA模塊初始化 ;模塊0工作在16位上下沿捕獲方式,作解碼定時器。 MOV CMOD, #00000001B ;計數(shù)脈沖為內(nèi)部時鐘信號/6,允許CH、CL溢出中斷 MOV CH, #0 ;從0開始計數(shù) MOV CL, #0 MO

59、V CCON, #40H ;啟動CH、CL計數(shù) MOV CCAPM0, #00100001B ;模塊0工作在16位上沿捕獲方式,允許模塊0中斷 ;開始時先用上沿捕獲,中斷后上下交替捕獲 SETB PPC ;PCA中斷優(yōu)先級置為高 SETB EC ;允許PCA中斷 SETB EA ;開中斷 NEXT1: JNB JIEMA, NEXT1 NOP ;虛擬等待解碼有效

60、 SJMP NEXT1 END ;PCA中斷服務(wù)程序 PROC PCA PCA: PUSH PSW PUSH ACC PUSH B ORL PSW, #18H ; SETB RS1 ; SETB RS0 ;使用工作寄存器區(qū)3 JBC CF, TNEXT1 ;不是定時器溢出引起 SJMP CANEXT TNEXT1: ;定時器T溢出引起中斷 INC OVERT MOV A, WUSTU JB ACC.0, TNEXT2 ;低電平,檢查溢出次數(shù) M

61、OV A, OVERT CJNE A, #2, TNEXT21 TNEXT21: JC TOEXIT ;小于2,退出! ;溢出次數(shù)大于2,肯定是錯誤! MOV OVERT, #2 ANL WUSTU, #0D0H ;解碼狀態(tài)清0,清除連續(xù)有效標志 SJMP TOEXIT TNEXT2: ;在高電平期間,發(fā)現(xiàn)溢出次數(shù)大于指定值 MOV A, OVERT CJNE A, #2, TNEXT22 TNEXT22: JC TOEXIT ;小于2

62、,退出! ;大于2 MOV OVERT, #2 ANL WUSTU, #0F0H ;清除連續(xù)有效標志,解碼狀態(tài)置為011(即等幅干擾狀態(tài)) ORL WUSTU, #03H ;置為011態(tài)! TOEXIT: JMP RETURN CANEXT: ;捕獲中斷引起 MOV R3, CCAP0L MOV R4, CCAP0H ;取捕獲發(fā)生的時刻 CLR C MOV A, R3 SUBB A, TIMEL MOV TIMEL, A MOV A, R4

63、 SUBB A, TIMEH MOV TIMEH, A ;計算并保存相鄰兩次捕獲時間間隔到TIMEH、TIMEL中 MOV A, CCAPM0 MOV C, ACC.5 ;上升沿觸發(fā)捕獲標志送C XRL CCAPM0, #30H ;與30異或,強迫CAPP、CAPN取反 ANL CCON, #0FEH ;清除CCF0中斷標志 MOV OVERT, #0 ;捕獲時清除溢出次數(shù) ;判別捕獲原因 JC HNEXT ;下沿觸發(fā)引起 ;

64、CLR C MOV A, TIMEL SUBB A, #140 ;PCA模塊計數(shù)脈沖為系統(tǒng)時鐘信號的6分頻(晶振頻率為11.0592MHz) MOV A, TIMEH ;140對應(yīng)的時間為(1/11.0592)*6*140,約76us SUBB A, #0 JNC LNEXT0 ;高電平時間太短, ANL WUSTU, #0F0H ;重置為000態(tài),清除連續(xù)標志 JMP RETURN ;沒有必要記錄 LNEXT0: LJMP LNEXT ;上邊沿觸發(fā) H

65、NEXT: MOV A, WUSTU ANL A, #07H CJNE A, #0, HNEXT1 ;000態(tài), 說明尚未開始 ORL WUSTU, #21H ;置為001態(tài) JMP CAEND ;記錄捕獲時間后退出 HNEXT1: CJNE A, #2, HNEXT2 ;原來處于010態(tài),計算同步頭時間,計算同步頭脈沖相對寬度 ; CLR C MOV A, TIMEL SUBB A, #51H MOV A, TIMEH ;假設(shè)a在2

66、5us~120us(允許存在25%的誤差)之間 SUBB A, #16H ;124a對應(yīng)計數(shù)器讀數(shù)為5713~34174,即1651H~857EH JNC HNEXT20 ;小于最小值,錯誤 JMP HERROR ;上升沿出錯處理 HNEXT20: ;CLR C MOV A, TIMEL SUBB A, #7EH MOV A, TIMEH SUBB A, #85H JC HNEXT201 ;大于124a的上限(即最大值),錯誤 JMP HERROR ;上升沿出錯處理 HNEXT201: ;在同步頭間歇期時間最小值與最大值之間 LCALL CAL1 ;當被除數(shù)較大時,用多項式除法可有效縮短運算時間 CJNE R6, #29, HNEXT21 HNEXT21: JNC HNEXT22 ;小于29,同步頭高、低電平時間比太??!錯!

展開閱讀全文
溫馨提示:
1: 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!