|
楼主 |
发表于 2008-5-26 11:17:48
|
显示全部楼层
6楼你的做法我也做了,现在出现新问题了:最后的GOTO loop有问题,它不会跳到LOOP那里的,调试器看出它老跑到0076H那里。现在把这两条指令去掉:XORWF LED_TEMP,1 ;取反PORTB临时变量
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 |
|