我正在尝试学习如何使用 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 返回 结束
因为我对汇编语言不太熟悉,所以我的选择很有限,而且我无法尝试很多方法来解决我的问题。我将感谢您的帮助。
; 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 返回 结束