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
相关产品推荐
相关产品推荐

