機(jī)電之家資源網(wǎng)
單片機(jī)首頁(yè)|單片機(jī)基礎(chǔ)|單片機(jī)應(yīng)用|單片機(jī)開(kāi)發(fā)|單片機(jī)文案|軟件資料下載|音響制作|電路圖下載 |嵌入式開(kāi)發(fā)
培訓(xùn)信息
贊助商
PIC16F877A實(shí)現(xiàn)音樂(lè)播放程序(《兩只老虎》片段)
PIC16F877A實(shí)現(xiàn)音樂(lè)播放程序(《兩只老虎》片段)
 更新時(shí)間:2008-7-26 16:27:58  點(diǎn)擊數(shù):3
【字體: 字體顏色

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í)際效果.

  • 上一篇: 用普通IO口測(cè)量溫度(NTC)的程序
  • 下一篇: PIC子程序庫(kù)-HT1621(LCD)
  • 發(fā)表評(píng)論   告訴好友   打印此文  收藏此頁(yè)  關(guān)閉窗口  返回頂部
    熱點(diǎn)文章
     
    推薦文章
     
    相關(guān)文章
    網(wǎng)友評(píng)論:(只顯示最新5條。)
    關(guān)于我們 | 聯(lián)系我們 | 廣告合作 | 付款方式 | 使用幫助 | 機(jī)電之家 | 會(huì)員助手 | 免費(fèi)鏈接

    點(diǎn)擊這里給我發(fā)消息66821730(技術(shù)支持)點(diǎn)擊這里給我發(fā)消息66821730(廣告投放) 點(diǎn)擊這里給我發(fā)消息41031197(編輯) 點(diǎn)擊這里給我發(fā)消息58733127(審核)
    本站提供的機(jī)電設(shè)備,機(jī)電供求等信息由機(jī)電企業(yè)自行提供,該企業(yè)負(fù)責(zé)信息內(nèi)容的真實(shí)性、準(zhǔn)確性和合法性。
    機(jī)電之家對(duì)此不承擔(dān)任何保證責(zé)任,有侵犯您利益的地方請(qǐng)聯(lián)系機(jī)電之家,機(jī)電之家將及時(shí)作出處理。
    Copyright 2007 機(jī)電之家 Inc All Rights Reserved.機(jī)電之家-由機(jī)電一體化網(wǎng)更名-聲明
    電話:0571-87774297 傳真:0571-87774298
    杭州濱興科技有限公司提供技術(shù)支持

    主辦:杭州市高新區(qū)(濱江)機(jī)電一體化學(xué)會(huì)
    中國(guó)行業(yè)電子商務(wù)100強(qiáng)網(wǎng)站

    網(wǎng)站經(jīng)營(yíng)許可證:浙B2-20080178-1