;**************************************************
__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 ;源程序结束