这是任务:程序将2位数写入 EEPROM写入完成后点亮LED 6,7和8。按下开关时,LED 1应亮起。
我的问题:当我按下开关时,LED 1不亮。写入EEPROM和点亮LED的部分运行良好。当我在MPLAB IDE v8.88中运行代码时,只有LED 6,7和8被点亮。
我曾尝试将“goto $”更改为“睡眠并循环回入睡眠状态”,但它仍无法正常工作。我的代码有问题吗?我只是汇编语言和PIC的新手。感谢。
这是我的代码:
#include <p16F887.inc>
__CONFIG _CONFIG1, _LVP_OFF & _FCMEN_OFF & _IESO_OFF & _BOR_OFF & _CPD_OFF & _CP_OFF & _MCLRE_OFF & _PWRTE_ON & _WDT_OFF & _INTRC_OSC_NOCLKOUT
__CONFIG _CONFIG2, _WRT_OFF & _BOR21V
org 0000h
goto Start
org 0004h
goto Interrupt
Start:
;write ID code into EEPROM
bsf STATUS,RP0 ;goes to bank 1
movlw 78h ;moves address to working register
movwf EEADR ;moves address to EEADR
movlw d'24' ;moves number to working register
movwf EEDATA ;moves number from working register to EEDATA
bsf STATUS,RP1 ;goes to bank 3
bsf EECON1,2 ;enables a write operation
bcf INTCON,7 ;disables global interrupt
;safe combination
movlw 55h ;'safe combination'
movwf EECON2
movlw 0AAh
movwf EECON2
bsf EECON1,1 ;starts the write operation
;write verify
btfsc EECON1,1 ;wait for WR bit to clear (wait for writing to complete)
goto $-1
;light up LED 6,7,8
bsf STATUS,RP0
bcf STATUS,RP1 ;select register bank 1
bsf TRISB,0 ;make RB0 input
bcf TRISD,5 ;make RD5 output
bcf TRISD,6 ;make RD6 output
bcf TRISD,7 ;make RD7 output
bcf STATUS,RP0 ;select register bank 0
bsf PORTD,5 ;turn on LED RD5
bsf PORTD,6 ;turn on LED RD6
bsf PORTD,7 ;turn on LED RD7
bsf STATUS,RP0 ;select register bank 1
bcf INTCON,INTF ;clear external INT flag
bsf OPTION_REG,INTEDG ;interrupt on positive edge
bsf INTCON,INTE ;enables interrupts on RBO/INT
bsf INTCON,GIE ;enable global interrupts
goto $ ;wait here
Interrupt:
;interrupt service routine:
;light up LED 1
bsf STATUS,RP0 ;select register bank 1
bcf TRISD,0 ;make RD0 output
bcf STATUS,RP0 ;select register bank 0
bsf PORTD,0 ;turn on LED RD0
;at the end of interrupt service routine
bcf INTCON,INTF ;clear external INT flag
retfie ;end of interrupt routine
end