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

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
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
lvshaohui
1楼-- · 2020-02-10 10:52
我刚用汇编的,以前都用C.
lvshaohui
2楼-- · 2020-02-10 16:47
怎么没人回答呀??刚刚学PIC就碰到这种问题了,以前用AVR的
lijun2005
3楼-- · 2020-02-10 19:54
PORTA,4是开漏结构, 需要注意.
lvshaohui
4楼-- · 2020-02-10 23:49
已经接上拉电阻的了。现在的问题是;GOTO LOOP,不能正确跳到LOOP,不知道是否还需设置什么,我用MPLAV IDE 2仿真,它老跳到下一句即:MOVLW 0FFH ,此时,W寄存器的值不是FFH,之后就一直错下去了。
lvshaohui
5楼-- · 2020-02-11 02:43
 精彩回答 2  元偷偷看……
zhq448
6楼-- · 2020-02-11 04:00
BANKSEL  TRISA          ;选择体1
   MOVLW    06H
   MOVWF    ADCON1         ;定义A口为IO口
   MOVLW    00H
   MOVWF    TRISA          ;PORTA设置为输出
   MOVWF    TRISC          ;PORTC设置为输出
   MOVLW    0C0H


A口初始化不对  看看我的A口初始化

一周热门 更多>