[單片機(jī)課程設(shè)計(jì)]MCS51與SPI串行接口語(yǔ)音芯片連接
《[單片機(jī)課程設(shè)計(jì)]MCS51與SPI串行接口語(yǔ)音芯片連接》由會(huì)員分享,可在線閱讀,更多相關(guān)《[單片機(jī)課程設(shè)計(jì)]MCS51與SPI串行接口語(yǔ)音芯片連接(29頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、MCS-51與SPI串行接口語(yǔ)音芯片連接 一、實(shí)驗(yàn)?zāi)康? (1) 進(jìn)一步理解SPI串行總線傳輸協(xié)議。 (2) 理解ISD4000系列語(yǔ)音芯片工作原理,放音、錄音控制過(guò)程。 (3) 理解MCS-51與SPI總線外設(shè)(如ISD4000系列語(yǔ)音芯片)的硬件連接、讀寫(xiě)方式。 二、實(shí)驗(yàn)設(shè)備與器材 仿真器及附件、圖0-1所示實(shí)驗(yàn)電路板各一套。 三、實(shí)驗(yàn)電路 本實(shí)驗(yàn)涉僅僅涉及實(shí)驗(yàn)板上的U101、U103、U104、U401(ISD4002語(yǔ)音芯片)、U404(集成功率放大器),而與其他元器件無(wú)關(guān)。接通電源前,將JP103的1-2引腳短路,使ISD4002語(yǔ)音芯片的中斷輸出端引腳與MCS-51外
2、中斷(P3.2)引腳相連。 由于多數(shù)MCS-51芯片沒(méi)有內(nèi)置SPI串行總線接口部件,因此只能用軟件模擬SPI總線時(shí)序方式讀寫(xiě)SPI總線接口器件。 四、實(shí)驗(yàn)原理(ISD4000系列語(yǔ)音芯片簡(jiǎn)介) ISD4000系列語(yǔ)音芯片包括ISD4002、ISD4003、ISD4004三個(gè)子系列芯片,電源電壓為3V,單片錄音時(shí)間在2~16分鐘之間,音質(zhì)中上,廣泛用于公共汽車語(yǔ)音報(bào)站系統(tǒng)、移動(dòng)及自動(dòng)應(yīng)答電話設(shè)備、語(yǔ)音復(fù)讀機(jī)等電子產(chǎn)品中。 該系列語(yǔ)音芯片采用CMOS工藝,內(nèi)含振蕩器、防混淆濾波器、平滑濾波器、音頻放大器、自動(dòng)靜噪及高密度多電平Flash ROM存貯器陣列。通過(guò)串行通信接口(SPI或Micr
3、owire總線協(xié)議)與微控制器(如MCS-51芯片)相連,所有操作均由微控制器控制。內(nèi)部采用多電平直接模擬量存儲(chǔ)技術(shù), 每個(gè)采樣值直接存貯在片內(nèi)Flash ROM存貯器中,因此能逼真、自然地再現(xiàn)語(yǔ)音、音樂(lè)、音調(diào)等聲響效果,避免了一般固體錄音電路因量化和壓縮造成的量化噪聲和"金屬聲"。可選4.0,5.3,6.4,8.0kHz等多個(gè)采樣頻率,采樣頻率越低,錄放時(shí)間就越長(zhǎng)(但音質(zhì)會(huì)略有下降),片內(nèi)信息存放在Flash ROM存貯器中,在斷電狀態(tài)下可保存100年(典型值),能反復(fù)錄音10萬(wàn)次以上。 (一) 主要參數(shù) ISD4000系列語(yǔ)音芯片主要參數(shù)如表13-1所示。 表13-1 主要參數(shù)
4、 型號(hào) 存儲(chǔ)時(shí)間 (秒) 最大 段數(shù) 信息分辯 率(毫秒) 采樣頻 率(HZ) 濾波器 帶寬(HZ) 控制碼+地址位 長(zhǎng)度 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系列語(yǔ)音芯片采用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ù)字電路具有各自的電源、地線總線,以方便在印制板上實(shí)現(xiàn)數(shù)字、模擬電路電源和地線分開(kāi)走線,形成單點(diǎn)接地的布線規(guī)則。 ANA IN+、ANA IN-——分別是錄音輸入放大器的同相輸入端和反相輸入端。輸入放大器可用單端或差分方式之一驅(qū)動(dòng)。采用單端驅(qū)動(dòng)時(shí),信號(hào)由耦合電容輸入,最大為32mV(峰峰值)。耦合電容與本端內(nèi)部的3KΩ串聯(lián)電阻構(gòu)成的輸入阻抗決定了芯片頻帶的低端截止頻率。采用差分驅(qū)動(dòng)時(shí),最大為16mV(峰峰值)。 XCLK——外部采樣時(shí)鐘輸入端,可選的采樣頻率如表10所示。一般使用芯
7、片內(nèi)部采樣頻率(在出廠前已調(diào)校,誤差在+1%以內(nèi)),除非對(duì)采樣精度要求很高。當(dāng)不用外部采樣時(shí)鐘信號(hào)時(shí), XCLK引腳必須接地。 AM CAP——自動(dòng)靜噪輸入端。當(dāng)錄音信號(hào)電平下降到內(nèi)部設(shè)定的某一閾值以下時(shí),自動(dòng)靜噪功能使信號(hào)衰弱,這樣有助于養(yǎng)活無(wú)信號(hào)(靜音)時(shí)的噪聲。一般情況系情況下,改引腳對(duì)地接1μF電容,構(gòu)成內(nèi)部信號(hào)電平峰值檢測(cè)電路的一部分。檢出的峰值電平與內(nèi)部設(shè)定的閾值作比較,決定自動(dòng)靜噪功能的翻轉(zhuǎn)點(diǎn)。大信號(hào)時(shí),自動(dòng)靜噪電路不衰減,靜音時(shí)衰減6dB。1μF電容也影響自動(dòng)靜噪電路對(duì)信號(hào)幅度的響應(yīng)速度。當(dāng)AM CAP引腳接VCCA時(shí),則禁止自動(dòng)靜噪。 AUD OUT——音頻輸出,可驅(qū)動(dòng)5
8、KΩ的負(fù)載。 MOSI——命令及數(shù)據(jù)信息的串行輸入端。 MIS0——狀態(tài)信息的串行輸出端。 SCLK——串行時(shí)鐘輸入端,由SPI總線主設(shè)備(一般為MCU)提供。 ——片選信號(hào)輸入端,輸入,低電平有效。當(dāng)片選信號(hào)無(wú)效時(shí),芯片處于待用狀態(tài),靜態(tài)電流典型值為1uA。 ——中斷輸出端,漏極開(kāi)路(OD)輸出,低電平有效。在放音(包括快進(jìn))、錄音操作過(guò)程中,遇到到段結(jié)束(EOM)、存儲(chǔ)器末尾(OVF)時(shí),引腳輸出低電平并保持,直到SPI總線主設(shè)備向ISD芯片寫(xiě)入新的命令。 RAC——行地址時(shí)鐘輸出端,漏極開(kāi)路(OD)。每個(gè)RAC周期表示ISD存儲(chǔ)器的操作進(jìn)行了一行(ISD4003系列中的存貯器
9、有1200行)。該信號(hào)高電平時(shí)間為200ms,低電平為25ms??爝M(jìn)模式下,RAC的218.75μs是高電平,31.25μs為低電平。該端可用于存儲(chǔ)管理技術(shù)。
(三) 控制命令及SPI端口控制寄存器位
ISD4000系列語(yǔ)音芯片控制命令如表13-2所示,SPI端口控制寄存器位含義如圖13-2所示。
表13-2 控制命令
指令
5位控制碼<11位地址>
操作摘要
POWERUP
00100
10、10 11、XXXXX>
停止當(dāng)前操作并掉電(C3、C0沒(méi)有定義)
RINT
0X110 12、,長(zhǎng)度為400mS(即每個(gè)單音占用兩段),則第n個(gè)單音對(duì)應(yīng)的段地址為(n2)。
(4) 執(zhí)行“PLAY”命令,從當(dāng)前地址開(kāi)始放音,遇到段結(jié)束標(biāo)志EOM或存儲(chǔ)器末尾標(biāo)志OVF時(shí)停止放音,同時(shí)引腳輸出低電平,指示當(dāng)前段播放結(jié)束。
當(dāng)需要播放兩段或兩段以上時(shí),如果段與段之間間隔很小時(shí),可在上一段播放結(jié)束后,延遲一段時(shí)間(需通過(guò)試聽(tīng)確定延遲時(shí)間的長(zhǎng)短,一般為數(shù)十mS)后再播放下一段。放音過(guò)程如圖13-3(a)所示。
在放音操作過(guò)程中,執(zhí)行“STOP”或“STOP WRDN”命令時(shí),將終止當(dāng)前放音操作。
2. 錄音過(guò)程
(1) 執(zhí)行上電命令(POWER UP)。
(2) 延遲等待上電結(jié)束 13、(當(dāng)采樣頻率為8KHz時(shí),上電延遲時(shí)間TPUD約為25mS)。
(3) 再執(zhí)行上電命令(POWER UP)。
(4) 延遲兩倍上電等待時(shí)間(即延遲2TPUD時(shí)間)。
(5) 執(zhí)行“SET REC”命令,設(shè)置錄音段的起始地址。
(6) 執(zhí)行“REC”命令,從當(dāng)前地址開(kāi)始錄音,直到出現(xiàn)存儲(chǔ)器末尾標(biāo)志OVF信號(hào)。
在錄音過(guò)程中,未錄到存儲(chǔ)器末尾時(shí),就執(zhí)行“STOP”或“STOP WRDN”命令,將終止當(dāng)前錄音操作,并產(chǎn)生EOM標(biāo)志。因此,可利用這一特性在芯片上錄制多段語(yǔ)音信息。
可見(jiàn),錄音過(guò)程與放音過(guò)程相似,只是每次錄音操作操作只能錄一段,如圖13-3(b)所示。
圖13-3 放音 14、、錄音流程
(四) SPI總線接口時(shí)序及命令格式
芯片支持8位、16位命令格式,傳輸時(shí)序如圖13-4所示,ISD4000系列語(yǔ)音芯片SPI總線參數(shù)如表13-3所示。
從ISD4000系列語(yǔ)音芯片SPI總線時(shí)序可以看出:其SPI總線時(shí)序與SPI總線接口存儲(chǔ)器EEPROM 25C01/02/04兼容。在接收控制命令時(shí),先接收LSB(這要求SPI總線控制器先輸出LSB);空閑時(shí),SCLK為低電平,在SCLK上升沿鎖存器MOSI引腳上的信息。
表13-3 ISD4000系列語(yǔ)音芯片SPI總線參數(shù)
符號(hào)
參數(shù)
最小
典型
最大
單位
TSSS
片選信號(hào)建立時(shí)間
500
15、
nsec
TSSH
片選信號(hào)保持時(shí)間
500
nsec
TDIS
串行輸入數(shù)據(jù)DI建立時(shí)間
200
nsec
TDIH
串行輸入數(shù)據(jù)DI保持時(shí)間
200
nsec
TPD
輸出延遲
500
nsec
TDF
輸出延遲到高阻態(tài)
500
nsec
TSSmin
片選信號(hào)高電平時(shí)間
1
μsec
TSCKhi
SCLK 高電平時(shí)間
400
nsec
TSCKlow
SCLK低電平時(shí)間
400
nsec
F0
SCLK頻率
1000
kHz
16、(a) 傳輸時(shí)序
(b) 8位命令格式
(c) 16位命令格式
圖13-4 命令格式
(五) 典型應(yīng)用電路及與MCS-51的連接
MCS-51芯片一般沒(méi)有內(nèi)置SPI總線部件,可通過(guò)軟件方式模擬SPI總線操作時(shí)序控制ISD4000系列語(yǔ)音芯片的操作,典型連接線路如圖13-5所示。
圖13-5 與MCS-51芯片的典型連接
(六) 參考驅(qū)動(dòng)程序
根據(jù)圖13-5連接方式,下面給出了與SPI模擬總線驅(qū)動(dòng)程序、組合播放、從指定段連續(xù)播放、單段錄音有關(guān)的參考程序段,完整程序參閱磁盤(pán)文件實(shí)驗(yàn)十三(ISDN4000系列語(yǔ)音驅(qū)動(dòng)程序).ASM。
MOSI BIT P1. 17、5
MISO BIT P1.6
SCLK BIT P1.7
ISDSS BIT P1.4 ;片選信號(hào)
MIC_C BIT P1.3 ;功放電源控制,同時(shí)也作放音/錄音標(biāo)志(0-放音、1-錄音)
ISDBUF DATA 50H ;ISD語(yǔ)音芯片命令緩沖區(qū)
;50H單元存放命令碼(C4-C0)及段高3位地址(A10-A8)
;51H單元存放段低8位地址(A7-A0)
ISDBUFSP DATA 52H ;播放指針
TASK3 DATA 53H ;語(yǔ) 18、音播放狀態(tài),b2-b0記錄放音或錄音狀態(tài)
ISDTIME DATA 54H ;語(yǔ)音播放延遲時(shí)間
XmtDat DATA 60H ;段緩沖區(qū)
RECNO EQU 0F0H ;可錄音的最小段號(hào)
;初始化外中斷INT0
SETB IT0 ;下降沿觸發(fā)(采用查詢方式檢測(cè))
;------從指定段連續(xù)播放初始化
CLR MIC_C ;設(shè)置放音標(biāo)志
MOV ISDBUFSP, #0 ;設(shè)置播放的起始段號(hào)
MOV TASK3, #05H ;啟動(dòng)標(biāo)志(未上電標(biāo)志)
HE 19、RE1:
LCALL ISD_RD_A ;調(diào)用逐段播放過(guò)程
MOV A, TASK3
CJNE A, #0, HERE1
SJMP $ ;虛擬等待
;--------段組合播放初始化
;把待播放的段編號(hào)(一次最多可播放16段)裝入播放緩沖區(qū)內(nèi)
;當(dāng)待播放的段號(hào)不足16時(shí),在播放段后放0FFH,作為結(jié)束標(biāo)志
MOV R0, #XmtDat
MOV @R0, #02h ;初始化語(yǔ)音段緩沖區(qū)
INC R0
MOV @R0, #01H
INC R0
MO 20、V @R0, #22h
INC R0
CLR MIC_C ;設(shè)置放音標(biāo)志
MOV ISDBUFSP, #0 ;初始化播放指針
;-------段組合播放啟動(dòng)
MOV TASK3, #05H ;啟動(dòng)標(biāo)志(未上電標(biāo)志)
HERE2:
LCALL ISD_RD ;調(diào)用段組合播放過(guò)程
MOV A, TASK3
CJNE A, #0, HERE2
SJMP $ ;虛擬等待
;------單段錄音初始化
MOV R0, #XmtDa 21、t
MOV @R0, #xxh ;段地址送緩沖區(qū)首字節(jié)
INC R0
MOV @R0, #xx ;錄音時(shí)間送緩沖區(qū)第二字節(jié)
SETB MIC_C ;設(shè)置錄音標(biāo)志
;------單段錄音過(guò)程啟動(dòng)
MOV TASK3, #05H ;啟動(dòng)標(biāo)志(未上電標(biāo)志)
HERE3:
LCALL ISD_WR ;調(diào)用單段錄音過(guò)程
MOV A, TASK3
CJNE A, #0, HERE3
SJMP $ ;虛擬 22、等待
;把語(yǔ)音緩沖區(qū)語(yǔ)音段送IDS4000芯片播放子程序
PROC ISD_RD
;入口參數(shù):TASK3置為05H
;b2-b0記錄放音或錄音狀態(tài)
;000-空閑
;001-執(zhí)行上電延遲(25ms)
;010-段播放延遲
;011-段間延遲
;101-未上電標(biāo)志
ISD_RD:
JNB MIC_C, RUN
;錄音狀態(tài),不執(zhí)行!
JMP EXIT ;退出
RUN:
MOV A, TASK3
A 23、NL A, #07H ;保留標(biāo)志位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 ;語(yǔ)音命令緩沖首地址送R0
MOV @R0, #20H ;00100XXX,執(zhí)行上電操作
LCALL SPIBW ;調(diào)用SPI總線控制 24、命令寫(xiě)入子程序
MOV ISDTIME, #5 ;延遲時(shí)間為5*5ms(即25ms)
MOV TASK3, #1 ;進(jìn)入上電延遲狀態(tài)
JMP EXIT
NEXT2:
CJNE A, #001B, NEXT3
;b2~b0為001,處于上電延遲期間,檢查延遲時(shí)間
NEXT30:
MOV A, ISDTIME
JZ NEXT31
;不是0,上電延遲時(shí)間未到,等待
SJMP EXIT
NEXT31:
MOV A, #XmtDat
ADD A, ISDBUFSP
M 25、OV R0, A
MOV A, @R0 ;取出待放音段編號(hào)
MOV B, #2 ;假設(shè)每一單音占用兩個(gè)最小段
MUL AB ;計(jì)算段首地址
MOV R0, #ISDBUF+1;語(yǔ)音命令緩沖首地址送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總線控制命令寫(xiě)入子程序
;執(zhí)行PLAY命令
MOV R0, #ISDBUF ;語(yǔ)音命令緩沖首地址送R0
MOV A, #0F0H ;11110XXX,執(zhí)行PLAY/REC命令
MOV @R0, A ;命令碼送命令緩沖區(qū)
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
;開(kāi)始放音
MOV TASK3, #02H ;b2~b0置為010態(tài)(修改作業(yè)號(hào))
CLR IE0 ;清除INT0中斷標(biāo)志(采用查 27、詢方式確定段
;播放是否已結(jié)束)
SJMP EXIT
NEXT3:
CJNE A, #2, NEXT4
;b2~b0置為010 ;屬于段播放期間延遲
JB IE0, NEXT41
;INT0中斷無(wú)效,即未遇到EOF或VOF標(biāo)志
SJMP EXIT ;等待
NEXT41:
CLR IE0 ;清除INT0中斷標(biāo)志
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 ;取出將要播放的段編號(hào)
CJNE A, #0FFH, NEXT44
;盡管指針<16,但緩沖區(qū)內(nèi)已經(jīng)沒(méi)有需要播放的段號(hào)
NEXT441:
MOV R0, #ISDBUF ;語(yǔ)音命令緩沖首地址送R0
MOV @R0, #10H 29、 ;0001X XXX,執(zhí)行STOP WRDN命令,停止當(dāng)前操作
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
SETB MIC_C ;關(guān)閉功率放大器電源
MOV TASK3, #0 ;將b2~b0置為000,結(jié)束播放
SJMP EXIT
NEXT44:
MOV TASK3, #3 ;進(jìn)入段間延遲狀態(tài)
MOV ISDTIME, #8 ;延遲時(shí)間為8*5ms(即40ms)
SJMP EXIT
NEXT4:
CJNE A, #3, EXIT
;b2~b0 30、處于011態(tài),屬于段間延遲
JMP NEXT30 ;處理方式與上電延遲相同
EXIT:
RET
END
;把IDSN4000語(yǔ)音芯片內(nèi)的語(yǔ)音段逐一播放出來(lái)
PROC ISD_RD_A
;入口參數(shù):TASK3置為05H
;b2-b0記錄放音或錄音狀態(tài)
;000-空閑
;001-執(zhí)行上電延遲(25ms)
;010-段播放延遲
;011-段間延遲
;101-未上電標(biāo)志
ISD_RD_A:
JNB MIC_C, RUN
31、 ;錄音狀態(tài),不執(zhí)行!
JMP EXIT ;退出
RUN:
MOV A, TASK3
ANL A, #07H ;保留標(biāo)志位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 ;語(yǔ)音命令緩沖首地址送R0
32、 MOV @R0, #20H ;00100XXX,執(zhí)行上電操作
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
MOV ISDTIME, #5 ;延遲時(shí)間為5*50ms(即25ms)
MOV TASK3, #1 ;進(jìn)入上電延遲狀態(tài)
JMP EXIT
NEXT2:
CJNE A, #001B, NEXT3
;b2~b0為001,處于上電延遲期間
NEXT30:
MOV A, ISDTIME
JZ NEXT31
;不是0,上電延遲時(shí)間未到
SJMP 33、EXIT ;退出,繼續(xù)等待
NEXT31:
MOV A, ISDBUFSP
MOV B, #2 ;假設(shè)每一單音占兩個(gè)最小段
MUL AB ;計(jì)算段首地址
MOV R0, #ISDBUF+1;語(yǔ)音命令緩沖首地址送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總線控制命令寫(xiě)入子程序
;執(zhí)行PLAY命令
MOV R0, #ISDBUF ;語(yǔ)音命令緩沖首地址送R0
MOV A, #0F0H ;11110XXX,執(zhí)行PLAY命令
MOV @R0, A ;命令碼送命令緩沖區(qū)
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
;開(kāi)始放音
MOV TASK3, #02H ;b2~b0置為010態(tài)(修改作業(yè)號(hào))
CLR IE0 ;清除INT0中斷 35、
SJMP EXIT
NEXT3:
CJNE A, #2, NEXT4
;b2~b0處于010態(tài),屬于段播放期間延遲
JB IE0, NEXT41
;INT0中斷無(wú)效,即未遇到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 ;語(yǔ)音命令緩沖首地址送R0
MOV @R0, #10H ;0001X XXX,執(zhí)行STOP WRDN命令,停止當(dāng)前操作
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
SETB MIC_C ;關(guān)閉功率放大器電源
MOV TASK3, #0 ;將b2~b0置為000,結(jié)束播放
SJMP EXIT
NEXT43:
MOV TASK3, #3 ;進(jìn)入段間延遲狀態(tài)
MOV ISDTIME, #10 ;延遲時(shí)間為10*5 37、ms(即50ms)
SJMP EXIT
NEXT4:
CJNE A, #3, EXIT
;b2~b0置為011 ;屬于段間延遲
JMP NEXT30 ;處理方式與上電延遲相同
EXIT:
RET
END
;從指定地址開(kāi)始錄音(單段錄音)
PROC ISD_WR ;從指定地址開(kāi)始錄音(單段錄音)
;入口參數(shù):TASK3置為05H
;b2-b0記錄放音或錄音狀態(tài)
;000-空閑
;001-執(zhí)行上電延遲(25ms)
;01 38、0-錄音過(guò)程的再上電延遲
;011-錄音延遲
;101-未上電標(biāo)志
ISD_WR:
JB MIC_C, RUN
;非錄音狀態(tài),不執(zhí)行!
JMP EXIT
RUN:
MOV A, TASK3
ANL A, #07H ;保留標(biāo)志位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 ;語(yǔ)音命令緩沖首地址送R0
MOV @R0, #20H ;00100XXX,執(zhí)行上電操作
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
MOV ISDTIME, #5 ;延遲時(shí)間為5*5ms(即25ms)
MOV TASK3, #1 ;進(jìn)入上電延遲狀態(tài)
JMP EXIT
NEXT2:
CJNE A, #001B, NEXT3
;b2~b0為001,處于上電延遲期間
MOV A, ISDT 40、IME
JZ NEXT31
;不是0,上電延遲時(shí)間未到
SJMP EXIT ;退出,繼續(xù)等待
NEXT31:
;再執(zhí)行“POWER UP” (上電)命令
MOV R0, #ISDBUF ;語(yǔ)音命令緩沖首地址送R0
MOV @R0, #20H ;00100XXX,執(zhí)行上電操作
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
MOV ISDTIME, #10 ;延遲時(shí)間為10*5ms(即50ms)
MOV TASK3, #2 ;進(jìn)入再上電延遲狀態(tài) 41、(時(shí)間50ms)
SJMP EXIT ;退出
NEXT3:
CJNE A, #010B, NEXT4
;b2~b0為010,處于再上電延遲期間
MOV A, ISDTIME
JZ NEXT41
;不是0,再上電延遲時(shí)間未到
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è)前面每一單音占用兩個(gè)最小段
MUL AB ;計(jì)算段首地址
MOV R0, #ISDBUF+1;語(yǔ)音命令緩沖首地址送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總線控制命令寫(xiě)入子程序
;執(zhí)行REC命令
MOV R0, #ISDBUF ;語(yǔ)音命令緩沖首地址送R0
MOV A, #0B0H ;10110XXX,執(zhí)行REC命令
MOV @R0, A ;命令碼送命令緩沖區(qū)
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
;從地址開(kāi)始開(kāi)始錄音
MOV TASK3, #03H ;b2~b0置為011態(tài)(修改作業(yè)號(hào))
MOV R0, #XmtDat+1;取錄音時(shí)間
MOV ISDTIME, 44、@R0 ;錄音時(shí)間送計(jì)時(shí)單元
CLR IE0 ;清除INT0中斷
SJMP EXIT
NEXT4:
CJNE A, #3, EXIT
;b2~b0為011,處于錄音等待期間
JB IE0, NEXT51 ;INT0中斷效,即遇到VOF
;檢查延遲時(shí)間是否為0?
MOV A, ISDTIME
JZ NEXT51 ;錄音已經(jīng)結(jié)束
SJMP EXIT ;錄音尚未結(jié)束,退出!
NEXT51:
CLR IE0 ;清除中斷
M 45、OV R0, #ISDBUF ;語(yǔ)音命令緩沖首地址送R0
MOV @R0, #10H ;0001X XXX,執(zhí)行STOP WRDN命令,停止當(dāng)前操作
LCALL SPIBW ;調(diào)用SPI總線控制命令寫(xiě)入子程序
SETB MIC_C ;關(guān)閉功率放大器電源
MOV TASK3, #00 ;將b7、b6置為00,結(jié)束播放
EXIT:
RET
END
;控制命令送ISD4000語(yǔ)音芯片(16位命令格式)
PROC SPIBW ;SPI總線控制命令寫(xiě)入子程序
;入口參數(shù):16位命令碼(兩字節(jié)) 46、存放在ISDBUF緩沖區(qū)內(nèi)
;出口參數(shù):無(wú)
;使用資源:R0、R6、R7及Acc、PSW、DPTR(使用進(jìn)位標(biāo)志C)
SPIBW:
CLR EA
CLR SCLK ;空閑時(shí)SCLK處于高電平,以減小功耗。而,ISD采用
;正極性SCLK脈沖頭。因此,在片選信號(hào)SS為低電平前
; 先將SCLK置為低電平
CLR ISDSS ;片選信號(hào)為低
MOV R0, #ISDBUF+1 ;取命令碼低位字節(jié)
MOV R6 47、, #2 ;傳送兩字節(jié)
LOOP2:
MOV A, @R0
MOV R7, #08H ;移動(dòng)次數(shù)
LOOP1:
RRC A ;帶Cy右移。
MOV MOSI, C ;CPU輸出數(shù)據(jù)。
SETB SCLK ;利用SCLK上升沿鎖存輸入的數(shù)據(jù)。
NOP ;由于SCLK信號(hào)時(shí)鐘頻率最高為1MHz,即高低
;電平時(shí)間必須大于400uS,可根據(jù)晶振頻率插入
48、 ;0-2條NOP指令(對(duì)于晶振頻率在12MHz以內(nèi)時(shí),不用)
CLR SCLK ;時(shí)鐘信號(hào)為低電平
DJNZ R7,LOOP1
DEC R0 ;指針減1,指向下一字節(jié)
DJNZ R6, LOOP2
SETB ISDSS ;執(zhí)行結(jié)束后將SS引腳置為高電平。
SETB SCLK ;空閑時(shí)SCLK處于高電平,以減小功耗。
SETB EA
RET
END
五、實(shí)驗(yàn)內(nèi)容
1. 寫(xiě)出ISD4002語(yǔ)音芯片的讀寫(xiě)控制 49、程序,逐段播放實(shí)驗(yàn)板上ISD4002語(yǔ)音芯片內(nèi)已錄好的語(yǔ)音信息。
2. 在空白處錄制5S左右的語(yǔ)音信息。
3. 在實(shí)驗(yàn)九(1)基礎(chǔ)上,實(shí)現(xiàn)每按下一個(gè)按鍵時(shí),通過(guò)語(yǔ)音芯片報(bào)出鍵名。
實(shí)驗(yàn)15 無(wú)線解碼接收
一、實(shí)驗(yàn)?zāi)康?
(1) 理解無(wú)線收發(fā)系統(tǒng)組成、工作原理。
(2) 理解PT2262或與之兼容的固定編碼芯片信息幀格式;理解軟件解碼原理、實(shí)現(xiàn)方法以及軟件解碼程序編寫(xiě)要領(lǐng)。
(3) 初步掌握自適應(yīng)軟件解碼程序設(shè)計(jì)規(guī)則。
(4) 理解MCS-51芯片內(nèi)PCA模塊的功能和使用方法。
二、實(shí)驗(yàn)設(shè)備與器材
仿真器及附件、圖0-1所示實(shí)驗(yàn)電路板各一套(需帶ASK無(wú)線接收模塊),PT2 50、262編碼遙控器或門(mén)磁一只、導(dǎo)線一批。
三、實(shí)驗(yàn)原理與電路
1. 無(wú)線收發(fā)系統(tǒng)
典型無(wú)線收發(fā)系統(tǒng)如圖15-1所示,由ASM無(wú)線接收/解調(diào)模塊、一個(gè)或多個(gè)PT2262編碼遙控器(或無(wú)線探頭)組成。
圖15-1 典型無(wú)線收發(fā)系統(tǒng)
2. PT2262編碼芯片信息幀格式
PT2262或與之兼容的固定編碼芯片性能穩(wěn)定,價(jià)格低廉,是無(wú)線探頭、廉價(jià)遙控器的首選編碼芯片。這類芯片編碼長(zhǎng)度為24位,一信息幀由同步頭、地址碼、數(shù)據(jù)碼三部分組成,如圖15-2所示。同步頭高電平持續(xù)時(shí)間為4α(α是編碼芯片振蕩周期,在25μs~120μs之間,由振蕩電阻決定),間歇期為124α;編碼位采用PWM調(diào)制,脈 51、寬比為1:3,“0”碼高電平持續(xù)時(shí)間為4α,低電平持續(xù)時(shí)間為12α;而“1”碼高電平持續(xù)時(shí)間為12α,低電平持續(xù)時(shí)間為4α。一信息幀總長(zhǎng)為,即512α。發(fā)送時(shí),先輸出編碼的最低位。
圖15-2 PT2262編碼芯片信息幀格式
3. 自適應(yīng)軟件解碼方法
為降低成本、提高靈活性,在含有MCU的無(wú)線接收系統(tǒng)中,一般不用硬件解碼芯片PT2272實(shí)現(xiàn)PT2262編碼信息的解碼,而采用軟件解碼方式。
本實(shí)驗(yàn)借助MCS-51RX系列MCU芯片]內(nèi)置的可編程計(jì)數(shù)器陣列(PCA)上下沿捕獲功能測(cè)量脈沖信號(hào)高、低電平持續(xù)時(shí)間;用脈沖間隔時(shí)間比作為脈沖寬度測(cè)量依據(jù)實(shí)現(xiàn)可適應(yīng)不同脈沖頭寬度的自適應(yīng)軟件解 52、碼方式。
根據(jù)編碼芯片信息幀特點(diǎn),當(dāng)α取25μs~120μs時(shí),信息幀內(nèi)高電平最長(zhǎng)時(shí)間為12α(300μs~1.44ms之間);低電平時(shí)間最長(zhǎng)為同步頭低電平持續(xù)時(shí)間124α(3.1ms~14.88ms)。因此,當(dāng)系統(tǒng)時(shí)鐘頻率為11.092MHz時(shí),在6時(shí)鐘/機(jī)器周期模式下,PCA計(jì)數(shù)器溢出時(shí)間為,即35.55ms,即信息幀內(nèi)相鄰兩次捕獲時(shí)間間隔小于定時(shí)器溢出時(shí)間。
(1) 資源及狀態(tài)分配
為簡(jiǎn)化軟件解碼判別過(guò)程,縮短PCA中斷執(zhí)行時(shí)間,使用字節(jié)變量STU記錄解碼狀態(tài),各位定義如下:
b2~b0記錄信息幀狀態(tài),如圖15-3所示。000為起始狀態(tài),下降沿時(shí)刻,如果相鄰兩次捕獲間隔不在100 53、us~1.44ms20%范圍內(nèi),則返回000態(tài);上升沿后,如果時(shí)間間隔不在允許范圍內(nèi),則置為001態(tài);而101、110分別表示編碼位高、低電平狀態(tài)。
圖15-3
b3位作信息幀連續(xù)有效標(biāo)志。
b4位是解碼成功標(biāo)志。以PT2262作編碼芯片的編碼器會(huì)連續(xù)發(fā)送4幀以上信息,為提高可靠性,采用雙循環(huán)校驗(yàn),即只有接收到兩相鄰的信息幀編碼相同時(shí),b4位置1。
因此b4~b3描述的解碼狀態(tài)含義為:00表示尚未接收到完整信息幀;01表示已收到了一完整信息幀;11表示已連續(xù)接收了兩個(gè)相同的信息幀,解碼有效標(biāo)志置1;10表示接收緩沖區(qū)數(shù)據(jù)有效,但未處理。
用字變量TIME記錄相鄰兩次捕獲時(shí)間間隔, 54、字變量TIMEB記錄基本時(shí)間(4α)。
(2) 自適應(yīng)軟件解碼過(guò)程
自適應(yīng)軟件解碼過(guò)程如圖15-4(a)~(d)所示。為保證能夠接收基本時(shí)間只有100us左右的高速編碼信息,主控程序中除了將PCA中斷優(yōu)先級(jí)置為最高外,還必須保證PCA中斷服務(wù)程序執(zhí)行時(shí)間盡可能短,即最好用匯編語(yǔ)言指令編寫(xiě)PCA中斷服務(wù)程序。由于MCS-51指令系統(tǒng)沒(méi)有雙字節(jié)除法指令,解碼過(guò)程中涉及到的除法運(yùn)算,可采用減法或多項(xiàng)式除法完成。
圖15-4 自適應(yīng)解碼軟件過(guò)程
四、實(shí)驗(yàn)內(nèi)容、過(guò)程及要求
本實(shí)驗(yàn)主要涉及實(shí)驗(yàn)板上的U101、U103、U402等芯片。接通電源前,板上各跳線狀態(tài)如表15-1所示。
表 55、15-1 跳線設(shè)置
JP103
JP104
JP107
JP201
JP202
JP203
JP204
JP205
JP402
JP403
SWDIP
1-2開(kāi)路
2-3開(kāi)路
1-2開(kāi)路
2-3開(kāi)路
短路
1-2 短路
2-3 開(kāi)路
1-2 短路
2-3 開(kāi)路
1-2 短路
2-3 開(kāi)路
1-2 短路
2-3 開(kāi)路
1-2 短路
2-3 開(kāi)路
1-2 開(kāi)路
2-3短路
1-2 開(kāi)路
2-3短路
OFF
與自適應(yīng)軟件解碼有關(guān)程序段如下,完成程序可參閱實(shí)驗(yàn)十五.ASM。
;*****定義軟件解碼變量*****
WUSTU 56、 DATA 2EH ;b2-b0作無(wú)線接收狀態(tài)標(biāo)志
;000-開(kāi)始;001-同步頭高電平;010-同步頭低電平
;101-數(shù)據(jù)位高電平;110-數(shù)據(jù)位低電平
LXJIE BIT WUSTU.3 ;信息幀連續(xù)標(biāo)志
JIEMA BIT WUSTU.4 ;接收數(shù)據(jù)有效標(biāo)志(可以利用數(shù)據(jù)有效標(biāo)志作為;數(shù)據(jù)處理標(biāo)志)
;數(shù)據(jù)有效,而信息幀連續(xù)標(biāo)志無(wú)效時(shí),即認(rèn)為接收無(wú)效
HDATAB BIT 0 57、1H ;高電平時(shí)間,碼長(zhǎng)標(biāo)志(4a為0,12a為1)
OVERT DATA 2FH ;相鄰居兩次捕獲之間定時(shí)器溢出次數(shù)
BUFF0 DATA 30H ;解碼接收緩沖區(qū)(30-3F)
TIMEL DATA 5AH ;相鄰兩次捕獲間隔時(shí)間低8位
TIMEH DATA 5BH ;相鄰兩次捕獲間隔時(shí)間高8位
CNTB DATA 5CH ;信息幀長(zhǎng)度(單位為bit)
TIMEBCL DATA 7DH ;同步頭高電平時(shí)間(即4a)的低8位
TIMEBCH DATA 7EH ;同步頭高電平時(shí)間(即4a)的高 58、8位
ORG 0000H
LJMP MAIN
ORG 0033H
LJMP PCA ;PCA中斷服務(wù)程序入口地址(用于解碼接收)
ORG 0050H
PROC MAIN ;主程序開(kāi)始
MAIN:
;---PCA模塊初始化
;模塊0工作在16位上下沿捕獲方式,作解碼定時(shí)器。
MOV CMOD, #00000001B ;計(jì)數(shù)脈沖為內(nèi)部時(shí)鐘信號(hào)/6,允許CH、CL溢出中斷
MOV CH, #0 ;從0開(kāi)始計(jì)數(shù)
MOV CL, #0
MO 59、V CCON, #40H ;啟動(dòng)CH、CL計(jì)數(shù)
MOV CCAPM0, #00100001B ;模塊0工作在16位上沿捕獲方式,允許模塊0中斷
;開(kāi)始時(shí)先用上沿捕獲,中斷后上下交替捕獲
SETB PPC ;PCA中斷優(yōu)先級(jí)置為高
SETB EC ;允許PCA中斷
SETB EA ;開(kāi)中斷
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
;不是定時(shí)器溢出引起
SJMP CANEXT
TNEXT1:
;定時(shí)器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,肯定是錯(cuò)誤!
MOV OVERT, #2
ANL WUSTU, #0D0H ;解碼狀態(tài)清0,清除連續(xù)有效標(biāo)志
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ù)有效標(biāo)志,解碼狀態(tài)置為011(即等幅干擾狀態(tài))
ORL WUSTU, #03H ;置為011態(tài)!
TOEXIT:
JMP RETURN
CANEXT:
;捕獲中斷引起
MOV R3, CCAP0L
MOV R4, CCAP0H ;取捕獲發(fā)生的時(shí)刻
CLR C
MOV A, R3
SUBB A, TIMEL
MOV TIMEL, A
MOV A, R4
63、 SUBB A, TIMEH
MOV TIMEH, A ;計(jì)算并保存相鄰兩次捕獲時(shí)間間隔到TIMEH、TIMEL中
MOV A, CCAPM0
MOV C, ACC.5 ;上升沿觸發(fā)捕獲標(biāo)志送C
XRL CCAPM0, #30H ;與30異或,強(qiáng)迫CAPP、CAPN取反
ANL CCON, #0FEH ;清除CCF0中斷標(biāo)志
MOV OVERT, #0 ;捕獲時(shí)清除溢出次數(shù)
;判別捕獲原因
JC HNEXT
;下沿觸發(fā)引起
; 64、CLR C
MOV A, TIMEL
SUBB A, #140 ;PCA模塊計(jì)數(shù)脈沖為系統(tǒng)時(shí)鐘信號(hào)的6分頻(晶振頻率為11.0592MHz)
MOV A, TIMEH ;140對(duì)應(yīng)的時(shí)間為(1/11.0592)*6*140,約76us
SUBB A, #0
JNC LNEXT0
;高電平時(shí)間太短,
ANL WUSTU, #0F0H ;重置為000態(tài),清除連續(xù)標(biāo)志
JMP RETURN ;沒(méi)有必要記錄
LNEXT0:
LJMP LNEXT
;上邊沿觸發(fā)
H 65、NEXT:
MOV A, WUSTU
ANL A, #07H
CJNE A, #0, HNEXT1
;000態(tài), 說(shuō)明尚未開(kāi)始
ORL WUSTU, #21H ;置為001態(tài)
JMP CAEND ;記錄捕獲時(shí)間后退出
HNEXT1:
CJNE A, #2, HNEXT2
;原來(lái)處于010態(tài),計(jì)算同步頭時(shí)間,計(jì)算同步頭脈沖相對(duì)寬度
; CLR C
MOV A, TIMEL
SUBB A, #51H
MOV A, TIMEH ;假設(shè)a在2 66、5us~120us(允許存在25%的誤差)之間
SUBB A, #16H ;124a對(duì)應(yīng)計(jì)數(shù)器讀數(shù)為5713~34174,即1651H~857EH
JNC HNEXT20
;小于最小值,錯(cuò)誤
JMP HERROR ;上升沿出錯(cuò)處理
HNEXT20:
;CLR C
MOV A, TIMEL
SUBB A, #7EH
MOV A, TIMEH
SUBB A, #85H
JC HNEXT201
;大于124a的上限(即最大值),錯(cuò)誤
JMP HERROR ;上升沿出錯(cuò)處理
HNEXT201:
;在同步頭間歇期時(shí)間最小值與最大值之間
LCALL CAL1 ;當(dāng)被除數(shù)較大時(shí),用多項(xiàng)式除法可有效縮短運(yùn)算時(shí)間
CJNE R6, #29, HNEXT21
HNEXT21:
JNC HNEXT22
;小于29,同步頭高、低電平時(shí)間比太??!錯(cuò)!
- 溫馨提示:
1: 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
2: 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
3.本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
5. 裝配圖網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024《增值稅法》全文學(xué)習(xí)解讀(規(guī)范增值稅的征收和繳納保護(hù)納稅人的合法權(quán)益)
- 2024《文物保護(hù)法》全文解讀學(xué)習(xí)(加強(qiáng)對(duì)文物的保護(hù)促進(jìn)科學(xué)研究工作)
- 銷售技巧培訓(xùn)課件:接近客戶的套路總結(jié)
- 20種成交的銷售話術(shù)和技巧
- 銷售技巧:接近客戶的8種套路
- 銷售套路總結(jié)
- 房產(chǎn)銷售中的常見(jiàn)問(wèn)題及解決方法
- 銷售技巧:值得默念的成交話術(shù)
- 銷售資料:讓人舒服的35種說(shuō)話方式
- 汽車銷售績(jī)效管理規(guī)范
- 銷售技巧培訓(xùn)課件:絕對(duì)成交的銷售話術(shù)
- 頂尖銷售技巧總結(jié)
- 銷售技巧:電話營(yíng)銷十大定律
- 銷售逼單最好的二十三種技巧
- 銷售最常遇到的10大麻煩