;************************************************** __CONFIG 3F39H;設置配置位中振蕩方式為XT,其它全部禁止或關閉 ;************************************************* status equ 3h ;定義狀態寄存器地址 portb equ 6h ;定義端口B的數據寄存器地址 trisb equ 86h ;定義端口B的方向控制寄存器地址 portc equ 7h ;定義端口C的數據寄存器地址 trisc equ 87h ;定義端口C的方向控制寄存器地址 data1 equ 20h ;定義一個廷時變量寄存器 data2 equ 21h ;定義另一個廷時變量寄存器 n1 equ d13 ;定義一個外層循環廷時常數 n2 equ 0ffh ;定義一個內層廷時常數 rp0 equ 5h ;定義狀態寄存器的頁選位RP0 ;************************************************* org 000h ;定義程序存放區域的起始地址 nop ;放置一條ICD必須的空操作指令 bsf status,rp0 ;設置文件寄存器體1 MOVlw 00h ;將端口C的方向控制碼00H先送W MOVwf trisc ;再轉到方向寄存器,將其設置為輸出 MOVlw 0ffh ;同理,將端口B設置為輸入 MOVwf trisb ; bcf status,rp0 ;恢復到文件寄存器體0 MOVlw 00h ;送計器初值00H到RC口顯示 MOVwf portc ; check btfsc portb,0 ;測試S3按下否?是!跳過下條指令 goto check ;否!則循環檢測 call delay ;調用廷時子程序,消除按鈕抖動的影響 btfsc portb,0 ;再次測試S3按下否?是!跳過下條指令 goto check ;否!則循不檢測 incf portc,1 ;端口C的數據寄存器加1,并送LED顯示 check1 btfss portb,0 ;測試S3斷開否?是!跳過下條指令 goto check1 ;否!則循不檢測 call delay ;調用廷時子程序,消除按鈕抖動的影響 btfss portb,0 ;再次測試S3斷開否?是!跳過下條指令 goto check1 ;否!則循不檢測 goto check ;返回 ;*************10MS廷時子程序************************ delay ;子程序名,也是子程序入口地址 MOVlw n1 ;將外層循環參數值送到DATA1 MOVwf data1 ; lp0 MOVlw n2 ;將內層循環參數值送到DATA2 MOVwf data2 ; lp1 decfsz data2,1 ;變量DATA2內容遞減,若為0則跳躍 goto lp1 ;跳轉到LP1 decfsz data1,1 ;變量DATA1內容遞減,若為0則跳躍 goto lp0 ;跳轉到LP0 return ;返回主程序 end ;源程序結束
|
|