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