;********************************************************************
LIST P=16F737
#include <P16F737.inc>
L1 EQU 31H ;廷时变量
L2 EQU 32H
L3 EQU 33H
LED_TEMP EQU 30H
;-------------------------
ORG 0000H ; 程序从零地址开始
GOTO star
ORG 0005H
star:
CLRF PORTB ;初始化I/O口
CLRF PORTA
BCF STATUS,RP1
BSF STATUS,RP0 ;设置数据寄存器体1
MOVLW H'00'
MOVWF TRISB ; 设置PORTB 全部IO为输出
MOVLW H'FF'
MOVWF TRISA ;全部为输入设置PORTA
BCF STATUS,RP0 ;恢复数据寄存器体0
MOVLW 00H
MOVWF LED_TEMP ;PORTB的临时变量初始化为0
LOOP:
BTFSS PORTA,4 ;判断A4口是否有键按下
GOTO ST_1
GOTO LOOP (按键没按下时,为什么这里老是不能调到LOOP,而是往下执行,往下执行时,调试看到W寄存器的值出错了)
ST_1:
MOVLW 0FFH ;送ffH到W
XORWF LED_TEMP,1 ;取反PORTB临时变量
MOVF LED_TEMP,0 ;送临时变量到W
MOVWF PORTB ;临时变量送到PORTB
GOTO LOOP
END
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
MOVF LED_TEMP,0 ;送临时变量到W
正常了!
所以现在怀疑是因为对LED_TEMP(30H)进行操作,改到了什么东西了。我中断也没开的,怎么它就老跳到76H那去了,真是郁闷,刚学这个东西就碰到这些怪怪的问题。我现在的程序改成:LIST P=16F737
#include <P16F737.inc>
__CONFIG _CONFIG1, _CP_OFF & _CCP2_RC1 & _DEBUG_OFF & _VBOR_2_0 & _BOREN_0 & _MCLR_ON & _PWRTE_ON & _WDT_OFF & _HS_OSC
__CONFIG _CONFIG2, _BORSEN_0 & _IESO_OFF & _FCMEN_OFF
L1 EQU 31H ;廷时变量
L2 EQU 23H
L3 EQU 33H
LED_TEMP EQU 30H
;-------------------------
ORG 0000H ; 程序从零地址开始
GOTO star
; ORG 0005H
star
BCF STATUS,RP1
BSF STATUS,RP0 ;设置数据寄存器体1
MOVLW 0FH
MOVWF ADCON1
MOVLW 00H
MOVWF TRISB ; 设置PORTB 全部IO为输出
MOVLW 0FFH
MOVWF TRISA ;全部为输入设置PORTA
BCF STATUS,RP0 ;恢复数据寄存器体0
; CLRF PORTB ;初始化I/O口
; CLRF PORTA
MOVLW 00H
MOVWF LED_TEMP ;PORTB的临时变量初始化为0
loop
BTFSS PORTA,4 ;判断A4口是否有键按下
GOTO ST
GOTO loop
ST
MOVLW 0FFH ;送ffH到W
;XORWF LED_TEMP,1 ;取反PORTB临时变量(已删除)
;MOVF LED_TEMP,0 ;送临时变量到W(已删除)
MOVWF L1
MOVWF PORTB ;临时变量送到PORTB
GOTO loop(这里老跳不到loop,而是跳到76H)
END
一周热门 更多>