大家来看看这个简单的汇编程序,分析下原因

2020-02-10 08:51发布

;********************************************************************               
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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
14条回答
lvshaohui
2020-02-10 23:49
已经接上拉电阻的了。现在的问题是;GOTO LOOP,不能正确跳到LOOP,不知道是否还需设置什么,我用MPLAV IDE 2仿真,它老跳到下一句即:MOVLW 0FFH ,此时,W寄存器的值不是FFH,之后就一直错下去了。

一周热门 更多>