pic單片機(jī)控制LED8位流水燈探討
1.最簡(jiǎn)單的點(diǎn)亮LED程序(C)
//實(shí)驗(yàn)?zāi)康模狐c(diǎn)亮RC0口的LED
//硬件設(shè)置:撥碼開關(guān)S11的第8位置ON,其他各位關(guān)閉。
#include
__CONFIG(0x1832);
//芯片配置字,看門狗關(guān),上電延時(shí)開,掉電檢測(cè)關(guān),低壓編程關(guān),加密,4M晶體HS振蕩
#include
#include
void main() //主程序
{
while(1) //死循環(huán),讓RC0一直亮
{
TRISC=0xfe; //RC0輸出,其他輸入
PORTC=0x01; //RCO輸出高電平,點(diǎn)亮LED
}
}
2.LED8位流水燈《霹靂燈》左移到第七位,再?gòu)牡谄呶挥乙频降谝晃?,再循環(huán)。(匯編)
;MCD1實(shí)戰(zhàn)一,LED8位流水燈《霹靂燈》左移到第七位,再?gòu)牡谄呶挥乙频降谝晃?,再循環(huán)。
;該實(shí)戰(zhàn)的目的作為學(xué)習(xí)和應(yīng)用MCD1在線調(diào)試工具套件,進(jìn)行項(xiàng)目的軟件和硬件
;聯(lián)合調(diào)試的范例程序,也就是當(dāng)做一個(gè)用戶程序?qū)嵗?,而演示板暫時(shí)充當(dāng)用戶電
;路的角色。這樣就構(gòu)成了一個(gè)軟件、硬件齊全的自制項(xiàng)目模擬環(huán)境。
;本程序?qū)崿F(xiàn)的功能是,把端口RC的8條引腳全部設(shè)置為輸出模式,依次從引腳RC0
;到RC7送出高電平,然后再依次從引腳RC7到RC0送出高電平,并且周而復(fù)始,從而
;使得與該端口C相連的8只發(fā)光二極管LED循環(huán)依次點(diǎn)亮,其效果類似于一個(gè)簡(jiǎn)單的霹靂燈。
;該程序可用于PIC16F87X(A)所有系列
;PIC單片機(jī)學(xué)習(xí)網(wǎng)http://www.pic16.com
;************************************************
;《霹靂燈》程序。文件名為“mcd-led1.ASM”
;**************************************************
__CONFIG 3F39H;設(shè)置配置位中振蕩方式為XT,其它全部禁止或關(guān)閉
;****************************************************
status equ 3h ;定義狀態(tài)寄存器地址
portc equ 7h ;定義端口C的數(shù)據(jù)寄存器地址
trisc equ 87h ;定義端口C的方向控制寄存器地址
flag equ 25h ;定義一個(gè)控制左移/右移的標(biāo)志寄存器
;***********************************************************
org 0000h ;定義程序存放區(qū)域的起始地址
nop ;放置一條ICD必須的空操用指令
bsf status,5 ;設(shè)置文件寄存器的體1
movlw 00h ;對(duì)端口C的方向控制碼00H先送W
movwf trisc ;再由W轉(zhuǎn)移到方向控制寄存器
bcf status,5 ;恢復(fù)到文件寄存器體0
movlw 01h ;將00000001B先送W
movwf portc ;再由W轉(zhuǎn)移到數(shù)據(jù)寄存器
bsf flag,0 ;將左右移標(biāo)志位置1,首先進(jìn)行左移LED
bcf status,0 ;將標(biāo)志位C先清0
loop btfss status,0 ;測(cè)試進(jìn)位/借位位,是1則修改標(biāo)志
goto loop1 ;是0則不修改標(biāo)志
comf flag,1 ;FLAG的BIT0作為標(biāo)志位,把它取反
loop1 btfss flag,0 ;判斷標(biāo)志位,是1則跳到循環(huán)左移
goto loop2 ;是0則跳到循環(huán)右移
rlf portc,0 ;循環(huán)左移端口C數(shù)據(jù)寄存器,結(jié)果送W
movwf portc ;將結(jié)果再送回端口C的數(shù)據(jù)寄存器
goto loop3 ;跳過下面兩條指令
loop2 rrf portc,0 ;循環(huán)右移端口C數(shù)據(jù)寄存器,結(jié)果送回W
movwf portc ;將結(jié)果再送回端口C的數(shù)據(jù)寄存器 ;
loop3 call delay ;調(diào)用廷時(shí)子程序
goto loop ;返回
;-------------------------廷時(shí)子程序----------------------------
delay ;子程序名,也是子程序入口地址
movlw 0ffh ;將外層循環(huán)參數(shù)值FFH經(jīng)過W
movwf 20h ;送入用作外循環(huán)變量的20H單元
lp0 movlw 0ffh ;將內(nèi)層循環(huán)參數(shù)值FFH經(jīng)過W
movwf 21h ;送入用作內(nèi)循環(huán)變量的21H單元
lp1 decfsz 21h,1 ;變量21H內(nèi)容遞減,若為0跳躍
goto lp1 ;跳轉(zhuǎn)到LP1處
decfsz 20h,1 ;變量20H內(nèi)容遞減,若為0跳躍
goto lp0 ;跳躍到LP0處
return ;返回主程序
end ;源程序結(jié)束
;****************************************************************
; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:
; 1.軟硬件的安裝:按照本說明書前面講的”MPLAB-ICD的安裝和使用”一節(jié)內(nèi)介紹的方法操作即可.
; 2.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點(diǎn)需要注意,一是注釋前面的
; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下.
; 3.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB
; 并進(jìn)入MPLAB的桌面.
; 4.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將
; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中.
; 5.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目
; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).
; 6.ICD參數(shù)設(shè)置:通過菜單命令Project>Edit Project或者Option>Development Mode,將開發(fā)模式設(shè)置為
; ”MPLAB ICD Debugger”,點(diǎn)擊OK按鈕,打開ICD的工作窗口,在調(diào)試階段,可以按照說明書圖2-10設(shè)置各項(xiàng),但需注意
; OSCILLATOR應(yīng)設(shè)置為XT方式,尤其需要說明的是,選中“Enable Debug Mode”(使能調(diào)試模式)選項(xiàng),在向目
; 標(biāo)單片機(jī)燒寫機(jī)器碼程序時(shí),會(huì)將調(diào)試臨控程序同時(shí)寫入單片機(jī)的指定程序存儲(chǔ)器區(qū)域,然后才允許用ICD方式調(diào)試。
; 7.電路設(shè)置:將演示板的S1全部拔到ON,S4全部拔到OFF,S13的第5、第6、第7全部拔到OFF ,LCD不要插在演示板上,
; 以使端口C只與8只發(fā)光二極管接通;將用于選擇頻率的插針跳線插到”XT OSC”位置上.
; 8.向目標(biāo)單片機(jī)燒寫目標(biāo)程序:用戶在點(diǎn)擊功能按鈕”Program”向目標(biāo)單片機(jī)燒寫機(jī)器碼程序時(shí),會(huì)等待一段時(shí)間,
; 并且在條狀的狀態(tài)信息欄中,出現(xiàn)提示信息。有一點(diǎn)需要引起注意,就是PIC16F87X單片機(jī)的FLASH程序存儲(chǔ)器的擦寫
; 周期是有限的,大約為1000次,應(yīng)盡量節(jié)省它的使用壽命。
; 9.運(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)試過程中可以人為地加入一些軟件漏洞(BUG)或硬件故障,來模
; 仿單片機(jī)端口引腳的片內(nèi)或片外故障.
; 10.定型燒寫目標(biāo)單片機(jī);經(jīng)過多次重復(fù)上述步驟的反復(fù)修改和調(diào)試,使得程序和電路在聯(lián)機(jī)狀態(tài)完全正常,這時(shí)可以進(jìn)行
; 定型燒寫,即將ICD窗口中的”Enable Debug Mode”(使能調(diào)試模式)選項(xiàng)消除,不再將調(diào)試臨控程序?qū)懭雴纹瑱C(jī)中.
; 11.獨(dú)立運(yùn)行驗(yàn)收:上一步中的燒寫過程完成后,即可將ICD模塊和ICD仿真頭(或演示板)之間的6芯電纜斷開,讓單片機(jī)在
; 演示板獨(dú)立運(yùn)行,觀察實(shí)際效果.
;
;
3.
LED8位流水燈《霹靂燈》左移到第七位,再?gòu)牡谄呶挥乙频降谝晃?,再循環(huán)。(匯編,另一種循環(huán)方法,通過改變C端口各位的輸入輸出方向來點(diǎn)亮流水燈。)
;LED流水燈的另一種實(shí)現(xiàn)方法
;使用資源
;1、PORTC口,8個(gè)流水燈LED
;功能說明
;1、該程序首先把C口輸出全0,然后通過改變輸入輸出方向來電亮流水燈。
;2、先從最低位電亮,點(diǎn)亮到最高位后,又從最高位開始點(diǎn)亮到最低位,如此循環(huán)。
;3、通過改變DELAY延時(shí)時(shí)間的長(zhǎng)短可改變流水等點(diǎn)亮的速度。
;硬件連接
;1、DEMO實(shí)驗(yàn)板作以下設(shè)置 s1拔到ON。
;2、S4,S5全部拔到OFF LCD不要插在演示板上
;本實(shí)例原提供者:pic16論壇會(huì)員:學(xué)期班 ,在此鳴謝學(xué)前班同志共享本實(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)注明出處,并不能去掉或改變文件中的說明文字。
;程序文件名“LED.ASM“
;源程序如下:
;LIST P=16F877A R=DEC
;OST 4MHZ
;DATE 2006.04.27
;***********************************
;__CONFIG _DEBUG_OFF&_CP_ALL&_WRT_HALF&_CPD_ON&_LVP_OFF&_BODEN_OFF&_PWRTE_ON&_WDT_OFF&_HS_OSC;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SPECIAL REGISTER
STATUS EQU 83H
RC EQU 07H
TRISC EQU 87H
AB0 EQU 20H
AB1 EQU 21H
AB2 EQU 22H
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;STATUS BIT
C EQU 0
DC EQU 1
Z EQU 2
RP0 EQU 5
RP1 EQU 6
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;PROGRAM ST
ORG 0000H ;復(fù)位地址
NOP ;放置一條MCD所需的空指令
ST
CLRF RC ;所有C口輸出為低,關(guān)閉所有顯示
BSF STATUS,5 ;選體1
LOOP MOVLW B'11111110' ;先點(diǎn)亮RC0
MOVWF TRISC
BCF STATUS,5 ;回到體0
MOVLW B'11111111' ;所有輸出為1,只要相應(yīng)的位被設(shè)置為輸出,即可點(diǎn)亮
MOVWF RC
CALL DELAY ;延時(shí)一段時(shí)間,保證LED的亮度
BSF STATUS,5
BSF STATUS,C
LOOP1 RLF TRISC,F ;點(diǎn)亮的位左移一位
CALL DELAY ;延時(shí)
BTFSC STATUS,C ;判斷是否點(diǎn)亮到了RC7 **********是btfsc,而非btfss*******************************
GOTO LOOP1 ;否,繼續(xù)左移0
MOVLW B'01111111' ;是,點(diǎn)亮RC7位
MOVWF TRISC
CALL DELAY
BSF STATUS,0
LOOP2 RRF TRISC ,F ;點(diǎn)亮的位右移一位
CALL DELAY
BTFSC STATUS,C ;是否點(diǎn)亮到最低位 **********是btfsc,而非btfss*******************************
GOTO LOOP2 ;否,繼續(xù)右移
GOTO LOOP ;是,重新開始新一輪循環(huán)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;DELAY 0.12S
DELAY
MOVLW 0FFH
MOVWF AB0
DELAY1 MOVLW 0DH
MOVWF AB1
DELAY2
MOVLW 0BH
MOVWF AB2
DELAY3
DECFSZ AB2,F
GOTO DELAY3
DECFSZ AB1,F
GOTO DELAY2
DECFSZ AB0,F
GOTO DELAY1
RETURN
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
END ;源程序結(jié)束
; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:
; 1.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點(diǎn)需要注意,一是注釋前面的
; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下.
; 2.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>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).
4. LED8位流水燈《霹靂燈》左移到第七位,再?gòu)牡谄呶挥乙频降谝晃唬傺h(huán)。(匯編,第三種實(shí)現(xiàn)方式,利用左移的性質(zhì))
;改為一直循環(huán)左移
;************************************************
;**************************************************
__CONFIG 3F39H;設(shè)置配置位中振蕩方式為XT,其它全部禁止或關(guān)閉
;****************************************************
status equ 3h ;定義狀態(tài)寄存器地址
portc equ 7h ;定義端口C的數(shù)據(jù)寄存器地址
trisc equ 87h ;定義端口C的方向控制寄存器地址
flag equ 25h ;定義一個(gè)控制左移/右移的標(biāo)志寄存器
;***********************************************************
org 0000h ;定義程序存放區(qū)域的起始地址
nop ;放置一條ICD必須的空操用指令
bsf status,5 ;設(shè)置文件寄存器的體1
movlw 00h ;對(duì)端口C的方向控制碼00H先送W
movwf trisc ;再由W轉(zhuǎn)移到方向控制寄存器
bcf status,5 ;恢復(fù)到文件寄存器體0
movlw 01h ;將00000001B先送W
movwf portc ;再由W轉(zhuǎn)移到數(shù)據(jù)寄存器
call delay ;
bsf flag,0 ;將左右移標(biāo)志位置1,首先進(jìn)行左移LED
bcf status,0 ;將標(biāo)志位C先清0
loop
rlf portc,0 ;循環(huán)左移端口C數(shù)據(jù)寄存器,結(jié)果送W
movwf portc ;將結(jié)果再送回端口C的數(shù)據(jù)寄存器
call delay ;
goto loop ;跳過下面兩條指令
;-------------------------廷時(shí)子程序----------------------------
delay ;子程序名,也是子程序入口地址
movlw 0ffh ;將外層循環(huán)參數(shù)值FFH經(jīng)過W
movwf 20h ;送入用作外循環(huán)變量的20H單元
lp0 movlw 0ffh ;將內(nèi)層循環(huán)參數(shù)值FFH經(jīng)過W
movwf 21h ;送入用作內(nèi)循環(huán)變量的21H單元
lp1 decfsz 21h,1 ;變量21H內(nèi)容遞減,若為0跳躍
goto lp1 ;跳轉(zhuǎn)到LP1處
decfsz 20h,1 ;變量20H內(nèi)容遞減,若為0跳躍
goto lp0 ;跳躍到LP0處
return ;返回主程序
end ;源程序結(jié)束
;****************************************************************
; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:
; 1.軟硬件的安裝:按照本說明書前面講的”MPLAB-ICD的安裝和使用”一節(jié)內(nèi)介紹的方法操作即可.
; 2.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點(diǎn)需要注意,一是注釋前面的
; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下.
; 3.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB
; 并進(jìn)入MPLAB的桌面.
; 4.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將
; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中.
; 5.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目
; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).
; 6.ICD參數(shù)設(shè)置:通過菜單命令Project>Edit Project或者Option>Development Mode,將開發(fā)模式設(shè)置為
; ”MPLAB ICD Debugger”,點(diǎn)擊OK按鈕,打開ICD的工作窗口,在調(diào)試階段,可以按照說明書圖2-10設(shè)置各項(xiàng),但需注意
; OSCILLATOR應(yīng)設(shè)置為XT方式,尤其需要說明的是,選中“Enable Debug Mode”(使能調(diào)試模式)選項(xiàng),在向目
; 標(biāo)單片機(jī)燒寫機(jī)器碼程序時(shí),會(huì)將調(diào)試臨控程序同時(shí)寫入單片機(jī)的指定程序存儲(chǔ)器區(qū)域,然后才允許用ICD方式調(diào)試。
; 7.電路設(shè)置:將演示板的S1全部拔到ON,S4全部拔到OFF,S13的第5、第6、第7全部拔到OFF ,LCD不要插在演示板上,
; 以使端口C只與8只發(fā)光二極管接通;將用于選擇頻率的插針跳線插到”XT OSC”位置上.
; 8.向目標(biāo)單片機(jī)燒寫目標(biāo)程序:用戶在點(diǎn)擊功能按鈕”Program”向目標(biāo)單片機(jī)燒寫機(jī)器碼程序時(shí),會(huì)等待一段時(shí)間,
; 并且在條狀的狀態(tài)信息欄中,出現(xiàn)提示信息。有一點(diǎn)需要引起注意,就是PIC16F87X單片機(jī)的FLASH程序存儲(chǔ)器的擦寫
; 周期是有限的,大約為1000次,應(yīng)盡量節(jié)省它的使用壽命。
; 9.運(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)試過程中可以人為地加入一些軟件漏洞(BUG)或硬件故障,來模
; 仿單片機(jī)端口引腳的片內(nèi)或片外故障.
; 10.定型燒寫目標(biāo)單片機(jī);經(jīng)過多次重復(fù)上述步驟的反復(fù)修改和調(diào)試,使得程序和電路在聯(lián)機(jī)狀態(tài)完全正常,這時(shí)可以進(jìn)行
; 定型燒寫,即將ICD窗口中的”Enable Debug Mode”(使能調(diào)試模式)選項(xiàng)消除,不再將調(diào)試臨控程序?qū)懭雴纹瑱C(jī)中.
; 11.獨(dú)立運(yùn)行驗(yàn)收:上一步中的燒寫過程完成后,即可將ICD模塊和ICD仿真頭(或演示板)之間的6芯電纜斷開,讓單片機(jī)在
; 演示板獨(dú)立運(yùn)行,觀察實(shí)際效果.
;
;
5. LED8位流水燈《霹靂燈》左移到第七位,再?gòu)牡谄呶挥乙频降谝晃?,再循環(huán)。(C,第三種實(shí)現(xiàn)方式,利用左移的性質(zhì))
//實(shí)驗(yàn)?zāi)康模罕境绦蛑饕獙?shí)現(xiàn)一個(gè)簡(jiǎn)單的流水燈程序
//即輪流點(diǎn)亮C口的8個(gè)燈(先點(diǎn)亮RC0,再熄滅RCO點(diǎn)亮RC1。。。。)
//硬件要求:撥碼開關(guān)S11全部置ON。
#include
__CONFIG(0x1832);
//芯片配置字,看門狗關(guān),上電延時(shí)開,掉電檢測(cè)關(guān),低壓編程關(guān),加密,4M晶體HS振蕩
void delay(); //delay函數(shù)申明
void main() //主函數(shù)
{
while(1) //死循環(huán),讓C口流水燈一直工作
{
char i; //定義整型變量
TRISC=0X00; //C口定義為輸出
PORTC=0X01; //點(diǎn)亮RCO口LED
for(i=8;i>0;i--) //循環(huán)左移7次
{
delay();
delay(); //調(diào)用一定的延時(shí)程序,保證閃爍的速率
PORTC=PORTC<<1; //顯示左移一位(RC0-->RC7-->RC0)
}
}
}
void delay() //延時(shí)子程序
{
int i; //定義整型變量
for(i=5000;i>0;i--)
{;} //空函數(shù),什么也不執(zhí)行,只是消耗一定的時(shí)間
}
6.LED8位流水燈《霹靂燈》從0位開始左移,移到第七位時(shí)直接跳到零位,再左移,循環(huán)(匯編)
;改為從0位開始左移,移到第七位時(shí)直接跳到零位,再左移。
;**************************************************
__CONFIG 3F39H;設(shè)置配置位中振蕩方式為XT,其它全部禁止或關(guān)閉
;****************************************************
status equ 3h ;定義狀態(tài)寄存器地址
portc equ 7h ;定義端口C的數(shù)據(jù)寄存器地址
trisc equ 87h ;定義端口C的方向控制寄存器地址
flag equ 25h ;定義一個(gè)控制左移/右移的標(biāo)志寄存器
;***********************************************************
org 0000h ;定義程序存放區(qū)域的起始地址
nop ;放置一條ICD必須的空操用指令
bsf status,5 ;設(shè)置文件寄存器的體1
movlw 00h ;對(duì)端口C的方向控制碼00H先送W
movwf trisc ;再由W轉(zhuǎn)移到方向控制寄存器
bcf status,5 ;恢復(fù)到文件寄存器體0
loop2 movlw 01h ;將00000001B先送W
movwf portc ;再由W轉(zhuǎn)移到數(shù)據(jù)寄存器
call delay ;
bsf flag,0 ;將左右移標(biāo)志位置1,首先進(jìn)行左移LED
bcf status,0 ;將標(biāo)志位C先清0
loop btfss status,0 ;測(cè)試進(jìn)位/借位位,是1則修改標(biāo)志
goto loop1 ;是0則不修改標(biāo)志
comf flag,1 ;FLAG的BIT0作為標(biāo)志位,把它取反
loop1 btfss flag,0 ;判斷標(biāo)志位,是1則跳到循環(huán)左移
goto loop2 ;是0則跳回原處
rlf portc,0 ;循環(huán)左移端口C數(shù)據(jù)寄存器,結(jié)果送W
movwf portc ;將結(jié)果再送回端口C的數(shù)據(jù)寄存器
goto loop3 ;跳過下面兩條指令
loop3 call delay ;調(diào)用廷時(shí)子程序
goto loop ;返回
;-------------------------廷時(shí)子程序----------------------------
delay ;子程序名,也是子程序入口地址
movlw 0ffh ;將外層循環(huán)參數(shù)值FFH經(jīng)過W
movwf 20h ;送入用作外循環(huán)變量的20H單元
lp0 movlw 0ffh ;將內(nèi)層循環(huán)參數(shù)值FFH經(jīng)過W
movwf 21h ;送入用作內(nèi)循環(huán)變量的21H單元
lp1 decfsz 21h,1 ;變量21H內(nèi)容遞減,若為0跳躍
goto lp1 ;跳轉(zhuǎn)到LP1處
decfsz 20h,1 ;變量20H內(nèi)容遞減,若為0跳躍
goto lp0 ;跳躍到LP0處
return ;返回主程序
end ;源程序結(jié)束
;****************************************************************
; 進(jìn)入該實(shí)戰(zhàn)演練的工序流程如下:
; 1.軟硬件的安裝:按照本說明書前面講的”MPLAB-ICD的安裝和使用”一節(jié)內(nèi)介紹的方法操作即可.
; 2.創(chuàng)建源文件和編輯源文件;在此介紹一種不同于前面講的創(chuàng)建源文件的方法,用Windows附件中的”記事本”
; 這個(gè)為大家所熟知和好用的文件編輯器,并且可以方便的加入中文注釋.不過有兩點(diǎn)需要注意,一是注釋前面的
; 分號(hào)”;”必須用西文半角輸入;二是必須用”.asm”擴(kuò)展名存儲(chǔ)到事先建立的一個(gè)專用子目錄下.
; 3.打開MPLAB集成開發(fā)環(huán)境:首先在WINDOWS環(huán)境下,選用開始>程序>Microchip MPLAB>MPLAB命令,啟動(dòng)MPLAB
; 并進(jìn)入MPLAB的桌面.
; 4.創(chuàng)建項(xiàng)目:選用菜單File>New或Project>New Project,在事先建立的一個(gè)專用子目錄下創(chuàng)建一個(gè)新項(xiàng)目,將
; 用記事本創(chuàng)建的源文件加入到該項(xiàng)目中.
; 5.建立項(xiàng)目中的目標(biāo)文件:選擇菜單Project >Build All(項(xiàng)目>建立所有文件),MPLAB將自動(dòng)調(diào)用MPASM將項(xiàng)目
; 文件管理下的源文件(.asm)匯編成十六進(jìn)制的目標(biāo)文件(.hex).
; 6.ICD參數(shù)設(shè)置:通過菜單命令Project>Edit Project或者Option>Development Mode,將開發(fā)模式設(shè)置為
; ”MPLAB ICD Debugger”,點(diǎn)擊OK按鈕,打開ICD的工作窗口,在調(diào)試階段,可以按照說明書圖2-10設(shè)置各項(xiàng),但需注意
; OSCILLATOR應(yīng)設(shè)置為XT方式,尤其需要說明的是,選中“Enable Debug Mode”(使能調(diào)試模式)選項(xiàng),在向目
; 標(biāo)單片機(jī)燒寫機(jī)器碼程序時(shí),會(huì)將調(diào)試臨控程序同時(shí)寫入單片機(jī)的指定程序存儲(chǔ)器區(qū)域,然后才允許用ICD方式調(diào)試。
; 7.電路設(shè)置:將演示板的S1全部拔到ON,S4全部拔到OFF,S13的第5、第6、第7全部拔到OFF ,LCD不要插在演示板上,
; 以使端口C只與8只發(fā)光二極管接通;將用于選擇頻率的插針跳線插到”XT OSC”位置上.
; 8.向目標(biāo)單片機(jī)燒寫目標(biāo)程序:用戶在點(diǎn)擊功能按鈕”Program”向目標(biāo)單片機(jī)燒寫機(jī)器碼程序時(shí),會(huì)等待一段時(shí)間,
; 并且在條狀的狀態(tài)信息欄中,出現(xiàn)提示信息。有一點(diǎn)需要引起注意,就是PIC16F87X單片機(jī)的FLASH程序存儲(chǔ)器的擦寫
; 周期是有限的,大約為1000次,應(yīng)盡量節(jié)省它的使用壽命。
; 9.運(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)試過程中可以人為地加入一些軟件漏洞(BUG)或硬件故障,來模
; 仿單片機(jī)端口引腳的片內(nèi)或片外故障.
; 10.定型燒寫目標(biāo)單片機(jī);經(jīng)過多次重復(fù)上述步驟的反復(fù)修改和調(diào)試,使得程序和電路在聯(lián)機(jī)狀態(tài)完全正常,這時(shí)可以進(jìn)行
; 定型燒寫,即將ICD窗口中的”Enable Debug Mode”(使能調(diào)試模式)選項(xiàng)消除,不再將調(diào)試臨控程序?qū)懭雴纹瑱C(jī)中.
; 11.獨(dú)立運(yùn)行驗(yàn)收:上一步中的燒寫過程完成后,即可將ICD模塊和ICD仿真頭(或演示板)之間的6芯電纜斷開,讓單片機(jī)在
; 演示板獨(dú)立運(yùn)行,觀察實(shí)際效果.