用延時實現(xiàn)PIC單片機(jī)LED流水燈
用延時實現(xiàn)PIC單片機(jī)LED流水燈
;****************************************************
__CONFIG 3F39H;設(shè)置配置位中振蕩方式為XT,其它全部禁止或關(guān)閉
;****************************************************
status equ 3h ;定義狀態(tài)寄存器地址
portc equ 7h ;定義端口C的數(shù)據(jù)寄存器地址
trisc equ 87h ;定義端口C的方向控制寄存器地址
flag equ 25h ;定義一個控制左移/右移的標(biāo)志寄存器
;***********************************************************
org 000h ;定義程序存放區(qū)域的起始地址
nop ;放置一條ICD必須的空操用指令
bsf status,5 ;設(shè)置文件寄存器的體1
MOV lw 00h ;對端口C的方向控制碼00H先送W
MOV wf trisc ;再由W轉(zhuǎn)移到方向控制寄存器
bcf status,5 ;恢復(fù)到文件寄存器體0
MOV lw 01h ;將00000001B先送W
MOV wf 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 ;測試進(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
MOV wf portc ;將結(jié)果再送回端口C的數(shù)據(jù)寄存器
goto loop3 ;跳過下面兩條指令
loop2 rrf portc,0 ;循環(huán)右移端口C數(shù)據(jù)寄存器,結(jié)果送回W
MOV wf portc ;將結(jié)果再送回端口C的數(shù)據(jù)寄存器 ;
loop3 call delay ;調(diào)用廷時子程序
call delay ;調(diào)用廷時子程序
goto loop ;返回
;-------------------------廷時子程序----------------------------
delay ;子程序名,也是子程序入口地址
MOV lw 0ffh ;將外層循環(huán)參數(shù)值FFH經(jīng)過W
MOV wf 20h ;送入用作外循環(huán)變量的20H單元
lp0 MOV lw 0ffh ;將內(nèi)層循環(huán)參數(shù)值FFH經(jīng)過W
MOV wf 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é)