历史上的今天
返回首页

历史上的今天

今天是:2024年11月15日(星期五)

正在发生

2019年11月15日 | avr单片机的内部结构

2019-11-15 来源:51hei

学单片机那么久了,感觉想要深入,还得看汇编语言,至少得了解单片机内部结构。


下面就以ATmega16为例,介绍一下AVR单片机结构和汇编语言。


AVR单片机的CPU内核结构

如上两图,左图是虚线框内AVR CPU的内核结构,右图是AVR单片机内核结构的方框图,可以看出AVR单片机的数据总线(CPU字长)是8位的,也就说它是8位单片机。


AVR采用了Harvard结构,具有独立的数据和程序总线,CPU在执行一条指令的同时,就将PC中指定的下一条指令取出,构成了一级流水线运行方式,实现了一个时钟周期执行一条指令,数据吞吐量高达1MIPS/MHz。


AVR CPU内核由几个重要的部分组成,它们分别是:


A.算数逻辑单元ALU(Arithmetic Logic Unit)

AVR ALU与32个通用工作寄存器直接相连。寄存器与寄存器之间、寄存器与立即数之间的ALU运算只需要一个时钟周期。ALU操作分为3类:算术、逻辑和位操作,此外还提供了支持无/有符号数和分数乘法的乘法器,操作结果的状态将影响到状态寄存器SREG(Status Register)。


B.程序计数器PC、指令寄存器和指令译码器

程序计数器PC用来存放下一条需要执行指令在程序存储器(ROM)空间的地址(指向FlashROM空间),取出的指令存放在指令寄存器中,然后送入指令译码器中产生各种控制信号,控制CPU的运行(执行指令)。


AVR一条指令的长度大多数为16位,还有少部分为32位,因此AVR的程序存储器结构实际上是以字(16位)为一个存储单元的。

ATmega16单片机的程序计数器为13位,正好满足了对片内8K字(及16K字节)的Flash程序存储器空间直接寻址的需要。


C.通用寄存器General Purpose Registers

在AVR中,由命名为R0~R31的32个8位通用工作寄存器构成一个“通用快速工作寄存器组”,为ALU提供操作数。它们的在RAM的映射空间地址是$0000~$001F,其中有6个寄存器($001A-$001F)可以合并为3个16位间接寻址寄存器指针,分别被称为X寄存器,Y寄存器,和Z寄存器,用于对数据存储器(SRAM)进行间接寻址。


D.状态寄存器-SREG

状态寄存器SREG是一个8位标志寄存器,用来存放指令执行后的有关状态和结果的标志,各位状态通常是在指令执行过程中自动产生的,但也可以由用户根据需要用专用指令加以改变。

 

位7-I:全局中断使能位

当I位被置位时,表示CPU可以响应中断请求,反之,则所有中断被禁止。I位可以通过SEI和CLI指令来置位和清零,在中断发生后,I位由硬件清除,并由RETI(中断返回)指令置位。


位6-T:位拷贝存储

位拷贝指令BLD和BST利用T作为目的或源地址。BST把寄存器的某一位拷贝到T,而BLD把T拷贝到寄存器的某一位。


位5-H:半进位标志 半进位标志H表示算术操作发生了半进位,此标志对于BCD运算非常有用。


位4-S:符号位 S=N⊕V,S为负数标志N与2的补码溢出标志V的异或

位3-V:2的补码溢出标志,支持2的补码运算

位2-N:负数标志 表明算术或逻辑操作结果为负

位1-Z:零标志 表明算术或逻辑操作结果为零

位0-C:进位标志 表明算术或逻辑操作发生了进位


E.堆栈指针寄存器SP(Stack Point)

堆栈指针主要用来保存临时数据、局部变量和中断/子程序的返回地址。堆栈指针总是指向堆栈的顶部,AVR的堆栈是向下生长的,即新的数据推入堆栈时,堆栈指针的数值将减小。

处在I/O地址空间的&3E($005E)和$3D($005D)的两个8位寄存器构成了AVR单片机的16位堆栈指针寄存器SP,分别为SPH,SPL。


堆栈指针指向数据SRAM堆栈区,必须指向高于0x60的地址空间,所以通常初始化时将SP的指针设在SRAM最高处。


使用PUSH指令将数据推入堆栈时指针减一;而子程序或中断返回地址推入堆栈时指针将减二。


使用POP指令将数据弹出堆栈时,堆栈指针加一;而用RET或RETI指令从子程序或中断返回时堆栈指针加二。

推荐阅读

史海拾趣

天钰(FITIPOWER)公司的发展小趣事

台湾富晶(FORTUNE)公司的发展故事

故事一:初创与先驱之路

富晶电子股份有限公司(Fortune Semiconductor Corp.),中文简称富晶,成立于1995年,总部位于台湾新北市淡水区。作为亚洲最早切入模拟IC设计的先驱之一,富晶自创立之初便专注于电路设计与整合技术。在那个数字科技刚刚起步的时代,富晶凭借其前瞻性的视野和深厚的技术积累,迅速在模拟IC设计领域崭露头角。公司不仅精通电路设计,还擅长将先进的SOC/SIP技术应用于实际产品中,为消费电子、电源管理、家用电器等多个领域提供了高性能的IC解决方案。

故事二:性价比优势与市场拓展

随着消费性电子产品的价格逐渐亲民,富晶的产品因其优良的电路设计和品质,在电源管理IC和电池管理IC等模拟IC领域展现出了强大的性价比竞争力。在过去十年中,富晶成功帮助众多制造商提升了消费性电子产品的价值,推动了手机、笔记本电脑、数码相机等产品的普及。制造商们选择富晶的IC产品,不仅因为其稳定的质量和卓越的性价比,还因为富晶能够持续稳定地供货,满足了市场对高效、可靠电子元件的迫切需求。

故事三:技术创新与产品升级

富晶始终将技术创新视为企业发展的核心动力。公司不断投入研发资源,致力于开发更加先进、高效的IC产品。通过不断优化电路设计、提升制造工艺,富晶成功推出了一系列具有行业领先水平的产品,如FS98O24、FS8855等电源管理IC和电池管理IC。这些产品不仅性能卓越,而且功耗更低、体积更小,满足了市场对电子产品轻薄化、绿色化的需求。

故事四:贴近市场与客户需求

自成立以来,富晶始终秉持着贴近市场、满足客户需求的服务理念。公司密切关注市场动态和客户需求变化,及时调整产品策略和服务模式。通过与客户建立紧密的合作关系,富晶能够深入了解客户的实际需求,为客户提供定制化的解决方案。这种贴近市场的服务模式不仅赢得了客户的信赖和支持,也为富晶在激烈的市场竞争中赢得了宝贵的市场份额。

故事五:全球化布局与未来发展

随着全球化进程的加速推进,富晶也加快了其全球化布局的步伐。公司不仅在国内市场取得了显著的成绩,还积极拓展海外市场,与众多国际知名企业建立了长期稳定的合作关系。同时,富晶还注重与国际先进技术的交流与合作,不断提升自身的技术水平和创新能力。展望未来,富晶将继续秉承“创新、卓越、共赢”的发展理念,致力于成为全球领先的模拟IC设计企业,为电子行业的繁荣发展贡献更多的力量。

上海国芯(Gcore)公司的发展小趣事
使用示波器或逻辑分析仪测试555定时器的输出波形和频率是否正常。
杰力(EMC)公司的发展小趣事

为了确保产品质量和客户满意度,杰力建立了一套完善的质量管理体系。公司从原材料采购、生产制造到产品检测等各个环节都实行严格的质量控制和管理。同时,杰力还引进了先进的检测设备和技术手段,对产品质量进行全面检测和评估。这些措施使得杰力的产品在质量上得到了有效保障,并赢得了客户的信赖和好评。

ELEMENT14公司的发展小趣事

ELEMENT14公司最初是一家电子元器件分销商,但随着市场的变化和客户需求的升级,公司决定转型为提供一站式服务的平台。这一转变意味着公司不仅要提供电子元器件,还要提供软件、技术支持、在线社区等全方位的服务。通过不断的投入和努力,ELEMENT14成功转型为一个综合性的电子元器件服务平台,满足了客户多样化的需求。

Hexawave公司的发展小趣事

ELEMENT14始终将提升服务质量和客户满意度作为首要任务。公司建立了完善的客户服务体系,提供快速响应、专业解答的客户服务。同时,ELEMENT14还定期开展客户满意度调查,针对客户的反馈和建议进行改进。这些努力不仅提升了客户满意度,也增强了公司的品牌形象和市场竞争力。

GWP Group公司的发展小趣事

ELEMENT14的在线社区是其成功的关键因素之一。公司投入大量资源建设和发展在线社区,吸引了大批电子设计工程师和采购专员的参与。在这个平台上,工程师们可以分享经验、交流技术、解决问题。ELEMENT14还通过社区收集客户反馈和需求,不断优化产品和服务。这个活跃的在线社区不仅增强了客户黏性,也为公司提供了宝贵的市场信息。

问答坊 | AI 解惑

STM32的USART发送数据时如何使用TXE和TC标志

在USART的发送端有2个寄存器,一个是程序可以看到的USART_DR寄存器(下图中阴影部分的TDR),另一个是程序看不到的移位寄存器(下图中阴影部分Transmit Shift Register)。 对应USART数据发送有两个标志,一个是TXE=发送数据寄存器空,另一个是TC=发送 ...…

查看全部问答>

摩托罗拉电子设计大赛优秀作品(六)

本帖最后由 paulhyde 于 2014-9-15 08:55 编辑  …

查看全部问答>

求助,懂硬件配置的请进!

大虾们,这样的配置怎么样? AMAX供应商给我的配置, CPU:intel Xeon 5504 硬盘:250G SATA 内存:12G 显卡:Tesla C1060  &  Quadro FX380 最近在选型,大家帮忙参谋参谋,我导师让我买台做教学实验用。他们给的价格 ...…

查看全部问答>

鼠年最后一张帖

在eeworld又度过了一年,学到了不少的东西,谢谢帮助过我的朋友,也谢谢顶帖的朋友!…

查看全部问答>

求Wince下OV2640驱动的源码

哪个达人有啊,帮帮忙。。 邮箱:lhl8502@tom.com…

查看全部问答>

关于编译mame的问题

我在编译mamece3的时候出现如下错误 LINK : fatal error LNK1104: cannot open file \'subsystem:windowsce,4.00\' 请问高手如何解决这个问题,谢谢…

查看全部问答>

大家帮看看413控制串口的程序

这是在TI网站找到的例程: // // MSP430F413 // ----------------- // /|\\| XIN|- // | | | 32kHz // --|RST XOUT|- // | ...…

查看全部问答>

盐雾对材料腐蚀研究

盐雾对材料腐蚀研究腐蚀是材料或其性能在环境的作用下引起的破坏或变质。大多数的腐蚀发生在大气环境中,大气中含有氧气、湿度、温度变化和污染物等腐蚀成分和腐蚀因素。盐雾腐蚀就是一种常见和最有破坏性的大气腐蚀。这里讲的盐雾是指氯化物的 ...…

查看全部问答>

模拟芯片设计的四重境界(转载)

从复旦攻读微电子专业模拟芯片设计方向研究生开始到现在五年工作经验,已经整整八年了,其间聆听过很多国内外专家的指点。最近,应朋友之邀,写一点心得体会和大家共享。 我记得本科刚毕业时,由于本人打算研究传感器的,后来阴差阳错进了复旦 ...…

查看全部问答>

MSP430f4152无法烧写程序的问题

用IAR给MSP430f4152烧写程序,总提示找不到单片机。仿真器用的UIF。 出错信息是: IarIdePm The debugging session could not be started。 Either the debugger initialization failed,or else the file \"F:\\Examination\\E-Meter\\Debug\\ ...…

查看全部问答>