org 000h ;
nop ;设置一条ICD必须的空操作指令
goto main ;
org 0004h ;
goto serv ;跳转到中断服务子
程序
;*******************主
程序************************************
main
bsf status,rp0 ;
movlw 0 ;
movwf trisc ;设置RC口全部为输出
movlw 0ffh ;
movwf trisb ;设置RB口全部为输入
movlw 02h ;设置选项寄存器:上拉电阻启用;INT下降沿触发
movwf option_reg ;分频器给TMR0;分频比1:8
bcf status,rp0 ;
movlw 90h ;
movwf intcon ;开发INT中断
clrf portc ;RC口灯全灭
loop
movf portb,w ;读取RB口数据
iorlw b'11100001' ;送RB口的数到备份寄存器并将除S9、S10、S11、S12以外的位全部送1
movwf portb_b ;
xorlw 0ffh ;没有键按下转LOOP继续检测
btfsc status,z ;
goto loop ;
call delay10ms ;防抖动廷时
movf portb,w ;
iorlw b'11100001' ;
xorwf portb_b,0 ;再次读取RB口的数据,与前一次读的数相同则键值有效
btfsc status,z ;
goto loop ;
comf portb_b,w ;取反以便使被按下按键的位为1,其它位为0
movwf portc ;送RC口显示
&nb