PIC16F877A實(shí)現(xiàn)音樂(lè)播放程序(《兩只老虎》片段)
發(fā)布時(shí)間:2008年1月5日 2時(shí)7分
;PIC16F877A實(shí)現(xiàn)音樂(lè)播放程序(《兩只老虎》片段) ;功能說(shuō)明: ;1.通過(guò)驅(qū)動(dòng)實(shí)驗(yàn)板上的蜂鳴器發(fā)聲,實(shí)現(xiàn)音樂(lè)的播放。 ;2.從TABLE中取出播放音樂(lè)的音調(diào)(1、2....7)通過(guò)改變?cè)摫碇械闹导纯蓪?shí)現(xiàn)播放不同的音樂(lè)。 ;3.從TABLE_YP中取出播放音樂(lè)的音頻,即該音調(diào)持續(xù)的時(shí)間。 ;4.調(diào)整DELAY延時(shí)的長(zhǎng)短即可實(shí)現(xiàn)音樂(lè)播放的快慢。 ;本實(shí)戰(zhàn)的目的是讓大家進(jìn)一步熟悉 D單片機(jī)如何驅(qū)動(dòng)蜂鳴器發(fā)聲。并通過(guò)改變持續(xù)發(fā)聲的時(shí)間長(zhǎng)短來(lái)實(shí)現(xiàn)不同頻率的聲音。 ;硬件接法: ;1、蜂鳴器接RC6口。 ;2、本程序使用實(shí)驗(yàn)板上的蜂鳴器發(fā)生發(fā)聲,撥碼開(kāi)關(guān)13的第5位必須置1,其他碼開(kāi)關(guān)都可以關(guān)閉。 ;本實(shí)例原提供者:pic16論壇會(huì)員 ppmy ,在此鳴謝ppmy同志共享本實(shí)例. ;由深圳市乾龍盛電子科技有限公司技術(shù)部鐘閨田(工程師)(論壇網(wǎng)名:zhongruntian)驗(yàn)正并加于整理、注釋. ;網(wǎng)站:PIC單片機(jī)學(xué)習(xí)網(wǎng) http://www.pic16.com 討論論壇:http://pic16.com/bbs/ ;版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處,并不能去掉或改變文件中的說(shuō)明文字。 ;程序文件名“SONG.ASM" ;程序清單如下: ;*********************************** LIST P=PIC16F877,R=DEC #i nclude P16F877.INC ;*********************************** Errorlevel -302,-305 __CONFIG _DEBUG_OFF&_CP_ALL&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC; ;***********************************寄存器定義 CBLOCK 0x20 JP YP L1 L2 TA:2 COUNT1 COUNT2 W_STACK ST_STACK ENDC ;************************************ ORG 0X0000 nop ;放置一條MCD所必須的空指令 GOTO MAIN ;主程序 ORG 0x0004 BTFSC PIR1,TMR1IF ;中斷子程序 GOTO T1 ;轉(zhuǎn)T1處理 RETFIE ORG 0x0010 ;************************************ MAIN CLRWDT ;喂狗 BCF STATUS,RP0 CLRF INTCON ;清除其他中斷標(biāo)志位 CLRF PORTC CLRF PIR1 ;清除TMR1中斷標(biāo)志位 BSF STATUS,RP0 BSF PIE1,0 ;使能TMR1中斷 MOVLW B'10111111' ;除RC6口輸出外,其他口都設(shè)為輸入 MOVWF TRISC BCF STATUS,RP0 MOVLW 0xC0 ;開(kāi)啟中斷總允許位GIE跟PEIE MOVWF INTCON REPLAY CLRF COUNT1 ;從頭開(kāi)始查表(亦即從頭開(kāi)始唱歌) SING CLRF TMR1L CLRF TMR1H ;清零TMR1定器 MOVF COUNT1,0 CALL TABLE MOVWF COUNT2 ;暫存查表結(jié)果于COUNT2中 BCF STATUS,Z SUBLW 0x00 ;判斷是否查表到最后一個(gè)數(shù)值 BTFSC STATUS,Z GOTO REPLAY ;是,說(shuō)明音樂(lè)播放完成,重頭開(kāi)始播放 MOVF COUNT2,0 ANDLW 0x0F ;去掉高4位只保留低4位 MOVWF JP ;保存到JP中 SWAPF COUNT2,0 ;高低半字節(jié)交換 ANDLW 0x0F ;去掉高4位只保留低4位 MOVWF YP ;保存到Y(jié)P中,這樣查表的結(jié)果的被分成高低半字節(jié)兩部分分別存放在YP跟JP中 DECF YP,1 MOVF YP,0 CALL TABLE_YP MOVWF TMR1H ;作為TMR1初值的高8位 MOVWF TA ;暫存TA中 INCF YP,0 CALL TABLE_YP MOVWF TMR1L ;作為TMR1初值的低8位 MOVWF TA+1 ;暫存TA+1中 BSF T1CON,TMR1ON ;開(kāi)啟TMR1定時(shí)器 CALL DELAY ;延時(shí)一段時(shí)間 INCF COUNT1 ;COUNT1加1,以便查表得到下一個(gè)播放的音調(diào) GOTO SING ;返回播放下一個(gè)音調(diào) ;**************************延時(shí)程序 DELAY MOVLW 200 MOVWF L1 DELAY_1 MOVLW 225 MOVWF L2 DELAY_2 DECFSZ L2,1 GOTO DELAY_2 DECFSZ L1,1 GOTO DELAY_1 DECFSZ JP,1 GOTO DELAY CLRWDT RETURN ;*************************中斷現(xiàn)場(chǎng)保護(hù) PUSH MOVWF W_STACK ;保存W的值 MOVF STATUS,0 MOVWF ST_STACK ;保存STATUS的值 RETURN ;************************中斷現(xiàn)場(chǎng)恢復(fù) POP MOVF ST_STACK,0 MOVWF STATUS ;恢復(fù)STATUS的值 MOVF W_STACK,0 ;恢復(fù)W的值 RETURN ;************************中斷處理子程序 T1 CALL PUSH ;調(diào)用現(xiàn)場(chǎng)保護(hù)程序 MOVLW 0x40 ;RC6口輸出取反 XORWF PORTC,1 MOVF TA,0 MOVWF TMR1H MOVF TA+1,0 MOVWF TMR1L ;給TMR1賦初值 BSF T1CON,TMR1ON ;開(kāi)啟定時(shí)器 BCF PIR1,TMR1IF ;清除標(biāo)志位 CALL POP ;調(diào)用現(xiàn)場(chǎng)恢復(fù)程序 RETFIE TABLE_YP ADDWF PCL,1 RETLW 0xFC ;1 RETLW 0x44 RETLW 0xFC ;2 RETLW 0xAC RETLW 0xFD ;3 RETLW 0x09 RETLW 0xFD ;4 RETLW 0x34 RETLW 0xFD ;5 RETLW 0x82 RETLW 0xFD ;6 RETLW 0xC8 RETLW 0xFE ;7 RETLW 0x06 TABLE ADDWF PCL,1 RETLW 0x14 RETLW 0x34 RETLW 0x54 RETLW 0x14 RETLW 0x14 RETLW 0x34 RETLW 0x54 RETLW 0x14 RETLW 0x54 RETLW 0x74 RETLW 0x98 RETLW 0x54 RETLW 0x74 RETLW 0x98 RETLW 0x93 RETLW 0xB1 RETLW 0x93 RETLW 0x71 RETLW 0x54 RETLW 0x14 RETLW 0x93 RETLW 0xB1 RETLW 0x93 RETLW 0x71 RETLW 0x54 RETLW 0x14 RETLW 0x14 RETLW 0x94 RETLW 0x18 RETLW 0x14 RETLW 0x94 RETLW 0x18 RETLW 0x00 ;******************************************** end ;源程序結(jié)束 ;******************************************** ; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下: ; 1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本” ; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過(guò)有兩點(diǎn)需要注意,一是注釋前面的 ; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下. ; 2.打開(kāi)MPLAB集成開(kāi)發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開(kāi)始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB ; 并進(jìn)入MPLAB的桌面. ; 3.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將 ; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中. ; 4.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目 ; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).
OPTION_REG EQU 81H ; TRISA EQU 85H ;定義RA口方向控制寄存器 TRISB EQU 86H ;定義RB口方向控制寄存器 TRISC EQU 87H ;定義RC口方向控制寄存器 ADCON1 EQU 9FH ;定義ADC模塊控制寄存器1的地址 ;-----------------------STATUS C EQU 0 ;定義進(jìn)位標(biāo)志位位地址 Z EQU 2 ;定義0標(biāo)志位位地址 RP0 EQU 5 ;寄存器體選 ;-------------------------INTCON T0IF EQU 2 ;定時(shí)器0溢出中斷標(biāo)志位 T0IE EQU 5 ;定時(shí)器0溢出中斷允許/禁止 GIE EQU 7 ;總中斷允許/禁止 ;------------------------- RMT EQU 1 ;遙控接收輸入腳位地址(RA。1) ;------------------------- BITIN EQU 7 ;遙控接收數(shù)據(jù)位位標(biāo)志 ;------------------------- CNT0 EQU 20H ;用戶臨時(shí)寄存器1 CNT1 EQU 21H ;用戶臨時(shí)寄存器2 CNT2 EQU 22H ;用戶臨時(shí)寄存器3 CNT3 EQU 23H ;用戶臨時(shí)寄存器4 TABADD EQU 24H ;數(shù)碼管顯示碼取碼用寄存器 FLAGS EQU 25H ;顯示位選標(biāo)志位 DISPBUF_H EQU 26H ;顯示器高位 DISPBUF_L EQU 27H ;顯示器低位 W_TEMP EQU 2BH ;W現(xiàn)場(chǎng)保護(hù)寄存器 STATUS_TEMP EQU 2CH ;STATUS現(xiàn)場(chǎng)保護(hù)寄存器 CSR0 EQU 2DH ;遙控鍵碼反碼寄存器 CSR1 EQU 2EH ;遙控器鍵碼寄存器 CSR2 EQU 2FH ;遙控器用戶碼高8位寄存器 CSR3 EQU 30H ;遙控器用戶碼低8位寄存器 FLAGS2 EQU 31H ;臨時(shí)寄存器 CSR0A EQU 32H ;遙控接收32位數(shù)據(jù)暫存寄存器 CSR1A EQU 33H ;遙控接收32位數(shù)據(jù)暫存寄存器 CSR2A EQU 34H ;遙控接收32位數(shù)據(jù)暫存寄存器 CSR3A EQU 35H ;遙控接收32位數(shù)據(jù)暫存寄存器 ;-------------------- ORG 0000H NOP ;放置一條ICD必須的空操作指令 GOTO MAIN ORG 0004H GOTO TMR0SERV ;定時(shí)器中斷,掃描數(shù)碼管 ORG 0008H ;------------------------------------------------- CONVERT MOVWF PC ;將W寄存器內(nèi)的7段顯示碼地址放入PC TABLE ;PC執(zhí)行新地址指令, 跳到相對(duì)的地址執(zhí)行? RETLW 0C0H ;0 ;RETLW指令,將七段顯示碼存入W后返回 RETLW 0F9H ;1 RETLW 0A4H ;2 RETLW 0B0H ;3 RETLW 099H ;4 RETLW 092H ;5 RETLW 082H ;6 RETLW 0F8H ;7 RETLW 080H ;8 RETLW 090H ;9 RETLW 088H ;A RETLW 083H ;b RETLW 0A7H ;c RETLW 0A1H ;d RETLW 086H ;E RETLW 08EH ;F ;----- ----------------------------------------------- TMR0SERV MOVWF W_TEMP ;現(xiàn)場(chǎng)保護(hù) SWAPF STATUS,W ;用SWAPF才不會(huì)影響標(biāo)志位 MOVWF STATUS_TEMP ;將W和STATUS存入各保護(hù)寄存器 MOVLW 0FFH MOVWF PORTC ;先熄滅所有數(shù)碼管以免閃爍 BSF PORTA,4 BSF PORTA,5 BSF PORTA,0 BSF PORTA,2 BSF PORTA,3 MOVLW TABLE MOVWF TABADD ;將轉(zhuǎn)換表的首地址存入TABADD MOVFW DISPBUF_L ;計(jì)數(shù)值(W)與轉(zhuǎn)換表的起始地址相加 BTFSS FLAGS,1 MOVFW DISPBUF_H ADDWF TABADD,W CALL CONVERT ;存入W后調(diào)用轉(zhuǎn)換表子程序 MOVWF PORTC ;送RC口顯示 BTFSS FLAGS,1 ;根據(jù)標(biāo)志位選擇是點(diǎn)亮那一個(gè)數(shù)碼管 BCF PORTA,3 BTFSC FLAGS,1 BCF PORTA,2 COMF FLAGS,1 MOVLW .155 ;送定時(shí)器初值 MOVWF RTCC ;PIC16F877A實(shí)現(xiàn)音樂(lè)播放程序(《兩只老虎》片段) ;功能說(shuō)明: ;1.通過(guò)驅(qū)動(dòng)實(shí)驗(yàn)板上的蜂鳴器發(fā)聲,實(shí)現(xiàn)音樂(lè)的播放。 ;2.從TABLE中取出播放音樂(lè)的音調(diào)(1、2....7)通過(guò)改變?cè)摫碇械闹导纯蓪?shí)現(xiàn)播放不同的音樂(lè)。 ;3.從TABLE_YP中取出播放音樂(lè)的音頻,即該音調(diào)持續(xù)的時(shí)間。 ;4.調(diào)整DELAY延時(shí)的長(zhǎng)短即可實(shí)現(xiàn)音樂(lè)播放的快慢。 ;本實(shí)戰(zhàn)的目的是讓大家進(jìn)一步熟悉 D單片機(jī)如何驅(qū)動(dòng)蜂鳴器發(fā)聲。并通過(guò)改變持續(xù)發(fā)聲的時(shí)間長(zhǎng)短來(lái)實(shí)現(xiàn)不同頻率的聲音。 ;硬件接法: ;1、蜂鳴器接RC6口。 ;2、本程序使用實(shí)驗(yàn)板上的蜂鳴器發(fā)生發(fā)聲,撥碼開(kāi)關(guān)13的第5位必須置1,其他碼開(kāi)關(guān)都可以關(guān)閉。 ;本實(shí)例原提供者:pic16論壇會(huì)員 ppmy ,在此鳴謝ppmy同志共享本實(shí)例. ;由深圳市乾龍盛電子科技有限公司技術(shù)部鐘閨田(工程師)(論壇網(wǎng)名:zhongruntian)驗(yàn)正并加于整理、注釋. ;網(wǎng)站:PIC單片機(jī)學(xué)習(xí)網(wǎng) http://www.pic16.com 討論論壇:http://pic16.com/bbs/ ;版權(quán)所有,轉(zhuǎn)載請(qǐng)注明出處,并不能去掉或改變文件中的說(shuō)明文字。 ;程序文件名“SONG.ASM" ;程序清單如下: ;*********************************** LIST P=PIC16F877,R=DEC #i nclude P16F877.INC ;*********************************** Errorlevel -302,-305 __CONFIG _DEBUG_OFF&_CP_ALL&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC; ;***********************************寄存器定義 CBLOCK 0x20 JP YP L1 L2 TA:2 COUNT1 COUNT2 W_STACK ST_STACK ENDC ;************************************ ORG 0X0000 nop ;放置一條MCD所必須的空指令 GOTO MAIN ;主程序 ORG 0x0004 BTFSC PIR1,TMR1IF ;中斷子程序 GOTO T1 ;轉(zhuǎn)T1處理 RETFIE ORG 0x0010 ;************************************ MAIN CLRWDT ;喂狗 BCF STATUS,RP0 CLRF INTCON ;清除其他中斷標(biāo)志位 CLRF PORTC CLRF PIR1 ;清除TMR1中斷標(biāo)志位 BSF STATUS,RP0 BSF PIE1,0 ;使能TMR1中斷 MOVLW B'10111111' ;除RC6口輸出外,其他口都設(shè)為輸入 MOVWF TRISC BCF STATUS,RP0 MOVLW 0xC0 ;開(kāi)啟中斷總允許位GIE跟PEIE MOVWF INTCON REPLAY CLRF COUNT1 ;從頭開(kāi)始查表(亦即從頭開(kāi)始唱歌) SING CLRF TMR1L CLRF TMR1H ;清零TMR1定器 MOVF COUNT1,0 CALL TABLE MOVWF COUNT2 ;暫存查表結(jié)果于COUNT2中 BCF STATUS,Z SUBLW 0x00 ;判斷是否查表到最后一個(gè)數(shù)值 BTFSC STATUS,Z GOTO REPLAY ;是,說(shuō)明音樂(lè)播放完成,重頭開(kāi)始播放 MOVF COUNT2,0 ANDLW 0x0F ;去掉高4位只保留低4位 MOVWF JP ;保存到JP中 SWAPF COUNT2,0 ;高低半字節(jié)交換 ANDLW 0x0F ;去掉高4位只保留低4位 MOVWF YP ;保存到Y(jié)P中,這樣查表的結(jié)果的被分成高低半字節(jié)兩部分分別存放在YP跟JP中 DECF YP,1 MOVF YP,0 CALL TABLE_YP MOVWF TMR1H ;作為TMR1初值的高8位 MOVWF TA ;暫存TA中 INCF YP,0 CALL TABLE_YP MOVWF TMR1L ;作為TMR1初值的低8位 MOVWF TA+1 ;暫存TA+1中 BSF T1CON,TMR1ON ;開(kāi)啟TMR1定時(shí)器 CALL DELAY ;延時(shí)一段時(shí)間 INCF COUNT1 ;COUNT1加1,以便查表得到下一個(gè)播放的音調(diào) GOTO SING ;返回播放下一個(gè)音調(diào) ;**************************延時(shí)程序 DELAY MOVLW 200 MOVWF L1 DELAY_1 MOVLW 225 MOVWF L2 DELAY_2 DECFSZ L2,1 GOTO DELAY_2 DECFSZ L1,1 GOTO DELAY_1 DECFSZ JP,1 GOTO DELAY CLRWDT RETURN ;*************************中斷現(xiàn)場(chǎng)保護(hù) PUSH MOVWF W_STACK ;保存W的值 MOVF STATUS,0 MOVWF ST_STACK ;保存STATUS的值 RETURN ;************************中斷現(xiàn)場(chǎng)恢復(fù) POP MOVF ST_STACK,0 MOVWF STATUS ;恢復(fù)STATUS的值 MOVF W_STACK,0 ;恢復(fù)W的值 RETURN ;************************中斷處理子程序 T1 CALL PUSH ;調(diào)用現(xiàn)場(chǎng)保護(hù)程序 MOVLW 0x40 ;RC6口輸出取反 XORWF PORTC,1 MOVF TA,0 MOVWF TMR1H MOVF TA+1,0 MOVWF TMR1L ;給TMR1賦初值 BSF T1CON,TMR1ON ;開(kāi)啟定時(shí)器 BCF PIR1,TMR1IF ;清除標(biāo)志位 CALL POP ;調(diào)用現(xiàn)場(chǎng)恢復(fù)程序 RETFIE TABLE_YP ADDWF PCL,1 RETLW 0xFC ;1 RETLW 0x44 RETLW 0xFC ;2 RETLW 0xAC RETLW 0xFD ;3 RETLW 0x09 RETLW 0xFD ;4 RETLW 0x34 RETLW 0xFD ;5 RETLW 0x82 RETLW 0xFD ;6 RETLW 0xC8 RETLW 0xFE ;7 RETLW 0x06 TABLE ADDWF PCL,1 RETLW 0x14 RETLW 0x34 RETLW 0x54 RETLW 0x14 RETLW 0x14 RETLW 0x34 RETLW 0x54 RETLW 0x14 RETLW 0x54 RETLW 0x74 RETLW 0x98 RETLW 0x54 RETLW 0x74 RETLW 0x98 RETLW 0x93 RETLW 0xB1 RETLW 0x93 RETLW 0x71 RETLW 0x54 RETLW 0x14 RETLW 0x93 RETLW 0xB1 RETLW 0x93 RETLW 0x71 RETLW 0x54 RETLW 0x14 RETLW 0x14 RETLW 0x94 RETLW 0x18 RETLW 0x14 RETLW 0x94 RETLW 0x18 RETLW 0x00 ;******************************************** end ;源程序結(jié)束 ;******************************************** ; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下: ; 1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本” ; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過(guò)有兩點(diǎn)需要注意,一是注釋前面的 ; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下. ; 2.打開(kāi)MPLAB集成開(kāi)發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開(kāi)始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB ; 并進(jìn)入MPLAB的桌面. ; 3.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將 ; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中. ; 4.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目 ; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).
MOVFW CSR0A ;將臨時(shí)寄存器中的數(shù)存回相應(yīng)寄存器 MOVWF CSR0 MOVFW CSR1A MOVWF CSR1 MOVFW CSR2A MOVWF CSR2 MOVFW CSR3A MOVWF CSR3 COMF CSR0,0 ;比較鍵碼的反碼取反后是否等于鍵碼 XORWF CSR1,0 BNZ LOOP ;不等于則接收到的是錯(cuò)誤的信息 ;將鍵碼送顯示 SWAPF CSR1,W ;顯示值高低位交換,先處理高位 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_H ;存入寄存器 MOVFW CSR1 ;顯示值低位處理 ANDLW 0FH ;屏蔽掉高位 MOVWF DISPBUF_L ;存入寄存器 GOTO LOOP ;------------------------------------------------------ END ;*********************************************************** ; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下: ; 1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本” ; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過(guò)有兩點(diǎn)需要注意,一是注釋前面的 ; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下. ; 2.打開(kāi)MPLAB集成開(kāi)發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開(kāi)始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB ; 并進(jìn)入MPLAB的桌面. ; 3.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將 ; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中. ; 4.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目 ; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex). ; 5.ICD參數(shù)設(shè)置:通過(guò)菜單命令Project>Edit Project或者Option>Development Mode,將開(kāi)發(fā)模式設(shè)置為 ; ”MPLAB ICD Debugger”,點(diǎn)擊OK按鈕,打開(kāi)ICD的工作窗口,在調(diào)試階段,可以按照說(shuō)明書(shū)圖2-10設(shè)置各項(xiàng),但需注意 ; OSCILLATOR應(yīng)設(shè)置為XT方式,尤其需要說(shuō)明的是,選中“Enable Debug Mode”(使能調(diào)試模式)選項(xiàng),在向目 ; 標(biāo)單片機(jī)燒寫(xiě)機(jī)器碼程序時(shí),會(huì)將調(diào)試臨控程序同時(shí)寫(xiě)入單片機(jī)的指定程序存儲(chǔ)器區(qū)域,然后才允許用ICD方式調(diào)試。 ; 6.電路設(shè)置:將演示板的S1全部拔到OFF,S13的第3位拔到ON其它位OFF,S4全部拔到ON,S5的第5第6位拔到ON其它位OFF,LCD不要插在演示板上, ; 將用于選擇頻率的插針跳線插到”XT OSC”位置上,板上93CXX、24CXX應(yīng)拿下。 ; 7.向目標(biāo)單片機(jī)燒寫(xiě)目標(biāo)程序:用戶在點(diǎn)擊功能按鈕”Program”向目標(biāo)單片機(jī)燒寫(xiě)機(jī)器碼程序時(shí),會(huì)等待一段時(shí)間, ; 并且在條狀的狀態(tài)信息欄中,出現(xiàn)提示信息。有一點(diǎn)需要引起注意,就是PIC16F87X單片機(jī)的FLASH程序存儲(chǔ)器的擦寫(xiě) ; 周期是有限的,大約為1000次,應(yīng)盡量節(jié)省它的使用壽命。 ; 8.運(yùn)行和調(diào)試用戶程序和用戶電路:在各項(xiàng)參數(shù)設(shè)置好后,將ICD的工作窗口最小化,利用前面講的”運(yùn)行及調(diào)試”中介 ; 紹的幾種方法進(jìn)行調(diào)試.當(dāng)用自動(dòng)單步方式調(diào)試時(shí),建議臨時(shí)禁止廷時(shí)子程序發(fā)揮作用,具體的方法是,可在CALL DELAY指 ; 令前添加一個(gè)分號(hào),并且重新匯編一次.為了學(xué)習(xí)目的,在調(diào)試過(guò)程中可以人為地加入一些軟件漏洞(BUG)或硬件故障,來(lái)模 ; 仿單片機(jī)端口引腳的片內(nèi)或片外故障. ; 9.定型燒寫(xiě)目標(biāo)單片機(jī);經(jīng)過(guò)多次重復(fù)上述步驟的反復(fù)修改和調(diào)試,使得程序和電路在聯(lián)機(jī)狀態(tài)完全正常,這時(shí)可以進(jìn)行 ; 定型燒寫(xiě),即將ICD窗口中的”Enable Debug Mode”(使能調(diào)試模式)選項(xiàng)消除,不再將調(diào)試臨控程序?qū)懭雴纹瑱C(jī)中. ; 10.獨(dú)立運(yùn)行驗(yàn)收:上一步中的燒寫(xiě)過(guò)程完成后,即可將ICD模塊和ICD仿真頭(或演示板)之間的6芯電纜斷開(kāi),讓單片機(jī)在 ; 演示板獨(dú)立運(yùn)行,觀察實(shí)際效果.
|