公告

非常抱歉,由于我们的服务器提供商硬盘出错,数据丢失,网站重建中...
I am so sorry, because of our server's hard disk error, data lost, the website reconstructioning
QQ:512000523
MSN : funchip@hotmail.com

 
首页 arrow 技术文章 arrow setp arrow AVR起步教程-1、ALU
AVR起步教程-1、ALU Recommend to my friend via E-mail(推荐给朋友)
作者: Administrator   
2007-11-14

AVR的ALU和其他CPU的ALU功能是一样的,它连接着寄存器、程序空间(FLASH),内部的SRAM和一些内部的功能模块。另外,ALU还能连接外部扩展的RAM.
     我们必须通过查看AVR的DataSheet去了解那些指令是通过ALU执行的。比如,你得通过ALU给寄存器加载立即数,或者通过ALU往I/O端口写数据。
 程序计数器是通过ALU与程序空间相连。它一般只是当指令被执行时被影响,或者在执行jmp(rjmp)、子程序被调用时被改变,当然,如果你使用了基于程序空间的指令的时候,它也将被改变,比如lpm。
     重点要说明的是AVR的寄存器,AVR总共有32个寄存器,但是在这些寄存器里还是有些不同。
比如,低位的寄存器(0..15)是无法进行立即数操作的,就是说,诸如ldi、andi等指令是不支持低位的寄存器, ldi r0, 0x55 这样的程序是不合法的,只能这样实现
                    ldi r16,0x55
                    mov r0,r16
     可以参看AVR官方的DATASHEET,以便知道那些指令可用于0..15寄存器。
     虽然如此,AVR的ALU功能还是不错的,一般的51只有8个寄存器(准确的来说是4组寄存器,每组8个)。而AVR有32个,而且AVR的26..31寄存器还可以当做指针来用,可以直接寻址、操作数组等。   另外,在AVR寄存器中,r0和r1还做为乘法指令的运算结果的存放寄存器,r0存放低位,r1存放高位。而在AVRGCC中,r1还作为0数值, 比如 tmp = 0; 编译的结果是
     mov r24,r1
     内部的功能模块,不同的AVR型号会有所不同,具体看参看相应的官方数据手册!

评论 (0)Add Comment

输入评论内容
quote
bold
italicize
underline
strike
url
image
quote
quote
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley
Smiley

security code
输入验证码


busy
最近更新 ( 2007-11-18 )
 
< 上一篇

© 2009 杭州福芯电子 浙ICP备05040812号
Joomla!是基于GNU/GPL许可发行的免费软件.