You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Dragon12-Plus2电梯系统代码分支越界错误修复求助

Dragon12-Plus2电梯系统分支越界错误排查求助

我基于Dragon12-Plus2开发板开发电梯控制系统,系统通过按键接收输入,输出显示依赖LCD屏和七段数码管。目前系统大部分功能正常,但特定分支越界错误持续出现,报错行号为第86、88、90、143、145、147、200、202、204行。我已经多次重构代码,问题仍未解决,附上完整代码,恳请协助排查。

完整代码

#include "C:\miniide\hcs12.inc"
org $2000
lcd_dat equ PORTK ; LCD data pins (PK5~PK2)
lcd_dir equ DDRK ; LCD data direction port
lcd_E equ $02 ; E signal pin
lcd_RS equ $01 ; RS signal pin
movb #$0, DDRH
movb #$FF, DDRB
movb #$FF, DDRP
lds #$2000 ; initialize stack pointer
F2T1 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
ldx #downward ; display a message (downward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$06, PTB ; display 1
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
floor1 ldab PTH
cmpb #%11111101
lbeq F1T2
cmpb #%11111011
lbeq F1T3
cmpb #%11110111
lbeq F1T4
bra floor1
F3T1 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
ldx #downward ; display a message (downward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$5B, PTB ; display 2
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$06, PTB ; display 1
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
bra floor1
F4T1 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
ldx #downward ; display a message (downward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$4F, PTB ; display 3

movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$5B, PTB ; display 2
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$06, PTB ; display 1
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
jsr floor1
F1T2 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #upward ; display a message (upward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$5B, PTB ; display 2
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
floor2 ldab PTH
cmpb #%11111110
beq F2T1
cmpb #%11111011
beq F2T3
cmpb #%11110111
beq F2T4
bra floor2
F3T2 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #downward ; display a message (downward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$5B, PTB ; display 2
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
bra floor2
F4T2 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #downward ; display a message (downward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$4F, PTB ; display 3

movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$5B, PTB ; display 2
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
bra floor2
F1T3 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #upward ; display a message (upward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$5B, PTB ; display 2
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$4F, PTB ; display 3
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
floor3 ldab PTH
cmpb #%11111110
beq F3T1
cmpb #%11111101
beq F3T2
cmpb #%11110111
beq F3T4
bra floor3
F2T3 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #upward ; display a message (upward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$4F, PTB ; display 3
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
bra floor3
F4T3 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #downward ; display a message (downward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$4F, PTB ; display 3
movb #$FE, PTP ; using 7seg #1

ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
bra floor3
F1T4 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #upward ; display a message (upward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$5B, PTB ; display 2
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$4F, PTB ; display 3
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$66, PTB ; display 4
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
floor4 ldab PTH
cmpb #%11111110
beq F4T1
cmpb #%11111101
beq F4T2
cmpb #%11111011
beq F4T3
bra floor4
F2T4 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #upward ; display a message (upward)
jsr putsLCD
ldy #100
jsr delayby10ms
movb #$4F, PTB ; display 3
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
movb #$66, PTB ; display 4
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
bra floor4
F3T4 ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCDjsr cmd2lcd ; "
ldx #upward ; display a message (upward)

jsr putsLCD
ldy #100
jsr delayby10ms
movb #$66, PTB ; display 4
movb #$FE, PTP ; using 7seg #1
ldy #100
jsr delayby10ms
jsr openLCD ; initialize the LCD
lbra floor4
upward dc.b "upward",0
downward dc.b "downward",0
#include "c:\miniide\delay.asm" ; delay routines
#include "c:\miniide\lcd.asm" ; LCD routines
end

内容的提问来源于stack exchange,提问作者Foks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 13:44:57