?? mcd-led3.asm
字號:
;實戰三、《花樣LED閃爍燈》
;該實戰的目的是讓大家進一步熟悉IO口輸入輸出的的使用
;隨著大家對程序指令的進一定熟悉,本實例減略了簡單的注釋
;通過前面的實例大家對PIC16F87X(A)的寄存器已經有了初步的認識,本實例不再
;單獨定義寄存器,引入了PIC16F877的預定義文件
;PIC單片機學習網 陳學乾 http://www.pic16.com
;程序名為"MCD-LED3.ASM"
;*************************************************
;* 本程序是一個LED燈的循環閃爍程序,用INT鍵(S3)來切換*
;* 閃爍模式 *
;*************************************************
include <p16f877.inc>
;**************************************************
__CONFIG 3F39H;設置配置位中振蕩方式為XT,其它全部禁止或關閉
;*----
MODESEL equ 20h
MODESELB equ 21h
Count equ 22h
Count1 equ 23h
Count2 equ 24h
PORTDB equ 25h
;*-----
org 0
nop
goto start
org 4
goto ISR
org 10
start
clrf PORTC ;清c口
movlw 00h
movwf MODESEL ;初始化模式選擇寄存器
movwf MODESELB
movlw b'10010000'
movwf INTCON ;初始化中斷控制
bsf STATUS,RP0
clrf TRISC ;設C口全為輸出
movlw b'10111111'
MOVWF OPTION_REG ;選擇INT下降沿有效
bcf STATUS,RP0
call FMsel
movwf PORTDB
movwf PORTC
main btfsc PORTB,0 ;\
goto $+6 ; \
call Delay ; 按鍵去抖動
btfsc PORTB,0
goto $+3 ; /
call FMsel ;/
movwf PORTDB
movf MODESELB,W ;
movwf MODESEL ;
call LongDelay
bcf STATUS,C
rlf PORTDB,1
btfsc STATUS,C
bsf PORTDB,0
movf PORTDB,W
movwf PORTC
goto main
;*----------
Delay ; call指令占用2個指令周期
clrf Count ; 清 Count占用1個指令周期
Dloop
decfsz Count,f ; 這兩行指令將延時
goto Dloop ; (256 * 3) -1 個指令周期
return ; return占用2個指令周期
;*----------------
LongDelay
clrf Count
clrf Count1
movlw 0x01
movwf Count2
LDloop
decfsz Count,f
goto LDloop
decfsz Count1,f
goto LDloop
decfsz Count2,f
goto LDloop
return
;*---------------
FMsel
movf MODESEL,w
movwf MODESELB
movf MODESEL,w
addwf PCL
retlw b'11111000'
retlw b'11110000'
retlw b'11100000'
retlw b'11000000'
retlw b'10000000'
movlw 00h
movwf MODESELB
bsf INTCON,GIE
retlw b'11111000'
return
;*-------------
ISR
btfss INTCON,INTF
goto $+3
bcf INTCON,INTF
incf MODESEL
retfie
end
;****************************************************
; 進入該實戰演練的工序流程如下:
; 1.創建源文件和編輯源文件;在此介紹一種不同于前面講的創建源文件的方法,用Windows附件中的”記事本”
; 這個為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點需要注意,一是注釋前面的
; 分號”;”必須用西文半角輸入;二是必須用”.asm”擴展名存儲到事先建立的一個專用子目錄下.
; 2.打開MPLAB集成開發環境:首先在WINDOWS環境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動MPLAB
; 并進入MPLAB的桌面.
; 3.創建項目:選用菜單File>New或Project>New Project,在事先建立的一個專用子目錄下創建一個新項目,將
; 用記事本創建的源文件加入到該項目中.
; 4.建立項目中的目標文件:選擇菜單Project >Build All(項目>建立所有文件),MPLAB將自動調用MPASM將項目
; 文件管理下的源文件(.asm)匯編成十六進制的目標文件(.hex).
; 5.ICD參數設置:通過菜單命令Project>Edit Project或者Option>Development Mode,將開發模式設置為
; ”MPLAB ICD Debugger”,點擊OK按鈕,打開ICD的工作窗口,在調試階段,可以按照說明書圖2-10設置各項,但需注意
; OSCILLATOR應設置為XT方式,尤其需要說明的是,選中“Enable Debug Mode”(使能調試模式)選項,在向目
; 標單片機燒寫機器碼程序時,會將調試臨控程序同時寫入單片機的指定程序存儲器區域,然后才允許用ICD方式調試。
; 6.電路設置:將演示板的S1全部拔到ON,S4全部拔到OFF,S13的第1拔到ON、第5、第6、第7全部拔到OFF ,LCD不要插在演示板上,
; 以使端口C只與8只發光二極管接通;將用于選擇頻率的插針跳線插到”XT OSC”位置上.
; 7.向目標單片機燒寫目標程序:用戶在點擊功能按鈕”Program”向目標單片機燒寫機器碼程序時,會等待一段時間,
; 并且在條狀的狀態信息欄中,出現提示信息。有一點需要引起注意,就是PIC16F87X單片機的FLASH程序存儲器的擦寫
; 周期是有限的,大約為1000次,應盡量節省它的使用壽命。
; 8.運行和調試用戶程序和用戶電路:在各項參數設置好后,將ICD的工作窗口最小化,利用前面講的”運行及調試”中介
; 紹的幾種方法進行調試.當用自動單步方式調試時,建議臨時禁止廷時子程序發揮作用,具體的方法是,可在CALL DELAY指
; 令前添加一個分號,并且重新匯編一次.為了學習目的,在調試過程中可以人為地加入一些軟件漏洞(BUG)或硬件故障,來模
; 仿單片機端口引腳的片內或片外故障.
; 9.定型燒寫目標單片機;經過多次重復上述步驟的反復修改和調試,使得程序和電路在聯機狀態完全正常,這時可以進行
; 定型燒寫,即將ICD窗口中的”Enable Debug Mode”(使能調試模式)選項消除,不再將調試臨控程序寫入單片機中.
; 10.獨立運行驗收:上一步中的燒寫過程完成后,即可將ICD模塊和ICD仿真頭(或演示板)之間的6芯電纜斷開,讓單片機在
; 演示板獨立運行,觀察實際效果.
;
;
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -