BeHappy 发表于 2024-6-14 21:43:54

用仿真器读取BGV值,只能读出半个字

本帖最后由 BeHappy 于 2024-6-14 21:46 编辑

硬件环境:

MCU:STC8G1K08A-8PIN
仿真器:STC-USB LINK1D

实验目的:
从RAM中读取mcu中1.9v参考电压

问题描述:
从RAM读取BGV的值,然后由UART1打印出来,打印结果为04A4H(十进制的1188),这与下载程序的时候下载器打印的值一致。
但是,当我用仿真器(注释掉与UART1相关的代码)调试的时候,(累加器)读数为00A4H,很显然,BGV的高8位始终是00H。
使用的代码来自于STC-ISP下载器的例程,我只对UART1的波特率做了修改。以下是读取BGV时,高8位始终为00H的问题代码:
AUXR      DATA    8EH
BGV         DATA    0EFH

BUSY      BIT   20H.0

P0M1      DATA    093H
P0M0      DATA    094H
P1M1      DATA    091H
P1M0      DATA    092H
P2M1      DATA    095H
P2M0      DATA    096H
P3M1      DATA    0B1H
P3M0      DATA    0B2H
P4M1      DATA    0B3H
P4M0      DATA    0B4H
P5M1      DATA    0C9H
P5M0      DATA    0CAH

ORG   0000H
      LJMP    MAIN
ORG   0023H
      LJMP    UART_ISR
ORG   0100H

TIMER1CONF:
      ANL                TMOD, #0FH
      MOV                TL1, #8FH
      MOV                TH1, #0FDH
      ; disable timer1 interrupt
      CLR                ET1
      ; start timer1
      SETB      TR1
      RET

UART1INIT:
      ; 8-bit data width, enable REN
      MOV                SCON, #50H
      ANL                PCON, #NOT 0C0H
      ORL                AUXR, #40H
      ; select timer1 as baud-rate generater
      ANL                AUXR, #0FEH
      CALL      TIMER1CONF
      CLR                BUSY
      RET

UART_ISR:
      PUSH      ACC
      JNB                TI, CHECKRI
      CLR                TI
      CLR                BUSY
      CHECKRI:
                JNB                RI, UART1ISEND
                CLR                RI
      UART1ISEND:
                POP                ACC
                RETI

DELAY500MS:                        ;@12.000MHz
      NOP
      PUSH      30H
      PUSH      31H
      PUSH      32H
      MOV                30H,#31
      MOV                31H,#113
      MOV                32H,#27
NEXT:
      DJNZ      32H,NEXT
      DJNZ      31H,NEXT
      DJNZ      30H,NEXT
      POP                32H
      POP                31H
      POP                30H
      RET

UART_SEND:
            JB      BUSY,$
            SETB    BUSY
            MOV   SBUF,A
            RET

MAIN:
            MOV   SP, #9FH
            MOV   P0M0, #00H
            MOV   P0M1, #00H
            MOV   P1M0, #00H
            MOV   P1M1, #00H
            MOV   P2M0, #00H
            MOV   P2M1, #00H
            MOV   P3M0, #00H
            MOV   P3M1, #0FCH
            MOV   P4M0, #00H
            MOV   P4M1, #00H
            MOV   P5M0, #00H
            MOV   P5M1, #0FFH

            ;LCALL   UART1INIT
            SETB    ES
            SETB    EA

MAINLOOP:
                        MOV                R0, #BGV
                        MOV                A, @R0
                        ;LCALL   UART_SEND
                        
                        INC                R0
                        MOV                A, @R0
                        ;LCALL   UART_SEND
                        
                        CALL      DELAY500MS
                        CALL      DELAY500MS
                        CALL      DELAY500MS
                        CALL      DELAY500MS

            JMP   MAINLOOP

END
有空的话,大家也可以复现一下

下载器打印的BGV值:


STC-USB Link1D版本号:


梁工 发表于 2024-6-17 10:21:39

读出先放在一个变量中试试。
页: [1]
查看完整版本: 用仿真器读取BGV值,只能读出半个字