;********************************************************************
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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
问题出在ICD 2的编程范围设置,默认的设置是19个单位,所以ST下面多于3句就超出范围了。把它改大点,一切正常!大意了
一周热门 更多>