在 PIC16F84A 中执行 CALL 指令时堆栈溢出

问题描述 投票:0回答:1

我正在尝试学习如何使用 MPLABX 用汇编语言进行编程并在 Proteus 中进行模拟。我正在对 PIC16F84A 进行编程,使其从 0 计数到 9,延迟一秒。我从一本书上得到了代码,它编译得很好。但是,当我在Proteus中运行仿真时,出现以下错误:[PIC16 CORE] PC=0x03E3。执行CALL指令时堆栈溢出。以下是我正在使用的完整代码:

; PIC16F84A 配置位设置 ;汇编源代码行配置语句 处理器 16F84A #包括

;配置 配置 FOSC = XT ;振荡器选择位(XT 振荡器) 配置 WDTE = 关闭;看门狗定时器(WDT 启用) 配置电源 = 关闭;上电定时器使能位(上电定时器被禁用) 配置 CP = 关闭;代码保护位(代码保护禁用)

PSECT lab_2,CLASS=代码,DELTA=2

dato1 EQU 0x0C 数据2 EQU 0x0D

bsf STATUS,5
movlw   0x00
movwf   TRISA
clrf    TRISB
movlw   00000111
movwf   OPTION_REG
bcf STATUS,5

实验室2: clrf 数据2

实验室1: movf dato2,0 调用表 movwf 端口B 呼叫延迟 btfss dato2,3 转到实验室3 btfss dato2,0 转到实验室3 转到实验室2 实验室3: incf 数据2,1 转到实验室1

表: 添加 PCL,1 雷特卢01111111 雷特尔夫00001101 雷特卢10110111 雷特卢10011111 雷特卢11001101 雷特鲁夫 11011011 雷特鲁夫 11111011 雷特尔夫00001111 雷特鲁夫 11111111 雷特卢11011111

延迟: 莫夫15 movwf 数据1 标签_2: clrfTMR0 bcf INTCON,2 标签_1: btfss INTCON,2 转到标签_1 decfsz dato1,1 转到标签_2 返回 结束

因为我对汇编语言不太熟悉,所以我的选择很有限,而且我无法尝试很多方法来解决我的问题。我将感谢您的帮助。

assembly mplab proteus
1个回答
0
投票

; PIC16F84A 配置位设置 ;汇编源代码行配置语句 处理器 16F84A #包括

;配置 配置 FOSC = XT ;振荡器选择位(XT 振荡器) 配置 WDTE = 关闭;看门狗定时器(WDT 启用) 配置电源 = 关闭;上电定时器使能位(上电定时器被禁用) 配置 CP = 关闭;代码保护位(代码保护禁用)

PSECT lab_2,CLASS=代码,DELTA=2

dato1 EQU 0x0C 数据2 EQU 0x0D

bsf STATUS,5
movlw   0x00
movwf   TRISA
clrf    TRISB
movlw   00000111
movwf   OPTION_REG
bcf STATUS,5

实验室2: clrf 数据2

实验室1: movf dato2,0 调用表 movwf 端口B 呼叫延迟 btfss dato2,3 转到实验室3 btfss dato2,0 转到实验室3 转到实验室2 实验室3: incf 数据2,1 转到实验室1

表: 添加 PCL,1 雷特卢01111111 雷特尔夫00001101 雷特卢10110111 雷特卢10011111 雷特卢11001101 雷特鲁夫 11011011 雷特鲁夫 11111011 雷特尔夫00001111 雷特鲁夫 11111111 雷特卢11011111

延迟: 莫夫15 movwf 数据1 标签_2: clrfTMR0 bcf INTCON,2 标签_1: btfss INTCON,2 转到标签_1 decfsz dato1,1 转到标签_2 返回 结束

© www.soinside.com 2019 - 2024. All rights reserved.