用仿真器读取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版本号:
读出先放在一个变量中试试。
页:
[1]