首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Atmega8515 avr,avr存储器,avr循环仿真日志

Atmega8515 avr,avr存储器,avr循环仿真日志
EN

Stack Overflow用户
提问于 2020-04-04 21:18:29
回答 1查看 559关注 0票数 1

我有这样的atmega8515代码

代码语言:javascript
复制
.nolist             

.include "m8515def.inc"     

.list               

.equ fCK = 8000000          
.equ BAUD = 9600            
.equ UBRR_value = (fCK/(BAUD*16))-1 
.cseg               
.org 0              


main:

rcall init_USART    

LDI R16, 0xFF       
OUT DDRC, R16       

rcall USART_recieve 

OUT PORTC, R16  

LDI R16, 0x00       
OUT DDRA, R16       

in R16, PINA        

OUT PORTC, R16  

rcall USART_send    


init_USART:

ldi   R16, high(UBRR_value) 
out   UBRRH, R16                
ldi   R16, low(UBRR_value)      
out   UBRRL, R16                 

ldi   R16, (1<<RXEN)|(1<<TXEN)|(0<<RXCIE)|(0<<TXCIE)|(0<<UDRIE) 
out   UCSRB, R16    


ldi   R16, (1<< URSEL)|(1<<UPM1)|(1<<UPM0)|(1<< UCSZ1)|(1<< UCSZ0)
out   UCSRC, R16            
ret                    

USART_send:
out   UDR, R16               
sending:                    

sbis  UCSRA, TXC       
rjmp  sending       
ret                   
USART_recieve:
sbis  UCSRA, RXC         


rjmp  USART_recieve  

in   R16, UDR       

ret                  

我在proteus中运行这段代码,并得到以下循环错误

PC=0x0030.AVR USART RX奇偶校验错误U1

PC=0x0024.当接口未启用时,AVR内存外部存储器读取(SRE=0):0x0260。U1

PC=0x0000.当接口未启用时,AVR内存外部内存读取(SRE=0):0x0261。U1

PC=0x0000.AVR CPU RET地址= 0x0000 U1

PC=0x0002.当接口未启用时,AVR内存外部内存写入(SRE=0):0x0261=01。U1

PC=0x0002。当接口未启用时,AVR内存外部内存写入(SRE=0):0x0260=00。U1**

PC=0x0024。当接口未启用时,AVR内存外部存储器读取(SRE=0):0x0260。U1**

PC=0x0002。当接口未启用时,AVR内存外部内存读取(SRE=0):0x0261。U1**

我还包括proteus模式,以更好地理解

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-05 21:24:09

看起来问题出在未初始化的堆栈指针中。

重置后,SPH:SPL被初始化为0x0000,因此对堆栈的任何写入(由pushrcall等)将写入地址0x0000 (映射为注册r0),然后堆栈指针将减少,成为0xFFFF。在ATmega8515中,0x0260及以上的内存位置映射到外部内存,而外部内存显然不在您的示意图中连接。

添加堆栈指针初始化,作为程序中的第一个操作,例如:

代码语言:javascript
复制
ldi r16, high(RAMEND)
out SPH, r16
ldi r16, low(RAMEND)
out SPL, r16

另外,您的程序中没有循环,在rcall USART_send之后,它将超越init_USART:标签。

您可能希望在这一点上添加rjmp main

你为什么要用汇编语言写程序呢?用C写不是更简单吗?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61034925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档