;************************************************** __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 000h ;定義程序存放區(qū)域的起始地址 nop ;放置一條ICD必須的空操用指令 bsf status,5 ; 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é)束
|
|