历史上的今天
今天是:2025年02月09日(星期日)
2020年02月09日 | AVR的I/O存储器操作
2020-02-09 来源:eefocus
所有的I/O寄存器可以通过IN(I/O口输入)和OUT(输出到I/O口)指令访问,这些指令是在32个通用寄存器与I/O寄存器空间之间传输交换数据,指令周期为1个时钟周期。此外,I/O寄存器地址范围在$00-$1F之间的寄存器(前32个)还可通过指令实现bit位操作和bit位判断跳转。SBI(I/O寄存器中指定位置1)和CBI(I/O寄存器中指定位清零)指令可直接对I/O寄存器中的每一位进行位操作。使用SBIS(I/O寄存器中指定位为1跳行)和SBIC(I/O寄存器中指定位为0跳行)指令能够对这些I/O寄存器中的每一位的值进行检验判断,实现跳过一条指令执行下一条指令的跳转。
在I/O寄存器专用指令IN、OUT、SBI、CBI、SBIS和SBIC中使用I/O寄存器地址$OO~$3F。
当以SRAM方式寻址I/0寄存器时,必须将该其地址加上$0020,映射成在数据存储器空间的地址。本书中I/O寄存器地址均给出了两种地址表示:I/O寄存器空间地址以及在数据存储器空间中的映射地址(在圆括号中)。
补充:
ATmega128所有的I/O及外设都被放置于I/O空间。所有的I/O位置都可以通过IN 与OUT指令来访问,在32 个通用工作寄存器和I/O 之间传输数据。 地址为0x00 - 0x1F 的I/O 寄存器。还可用SBI 和CBI 指令直接进行位寻址,而SBIS 和SBIC 则用来检查某一位的值。更多内容请参见指令集。使用IN 和OUT 指令时地址必须在 0x00 - 0x3F 之间。如果要象SRAM 一样通过LD 和ST 指令访问I/O 寄存器,相应的地址要加上0x20。
史海拾趣
|
使用OpenNETCF 里面提供的方法CopyFileToDevice 进行数据传输,但是实际效率并不理想,当文件约2m 的时候需要2分半到3分钟,而直接用复制-粘贴的方式则不到1分钟。但是用CopyFileFromDevice 的效率却正常 请问如何优化CopyFileToDevice传输效率? ...… 查看全部问答> |
|
各位前辈: 我单位要改进一款打印机,他的接口是USB的,希望可以做利用这款打印机的原有驱动,并截获这个驱动发出的打印指令,修改后转发给打印机。看了一些关于驱动开发的书以后我初步的想法是做一个在虚拟串口,把打印机驱动发的打印指令转发给U ...… 查看全部问答> |
|
要编写一个摩托罗拉的16位单片机的串口发送数据的程序如何下手 要编写一个摩托罗拉的16位单片机的串口发送数据的程序如何下手 以前没接触过单片方面的活,所以不是很了解,希望高手给点思路,谢谢。… 查看全部问答> |
|
30岁的我现在才刚刚学C51,还有用吗 以前一直都在做技术支持,现在想好好学点深点的东西,也能提高点自己的收入,现在才开始看C语言,学写51程序还来有及吗,电路上的基础还有点 大师们给点建议… 查看全部问答> |
|
msp430 uart收发模块:直接用有线连接,一个430发,另外一个接收。出现了以下问题。 首先是发送模块,我对发送的缓冲区的数据都在LCD上进行了显示测试,结果好像没问题。下面是这部分代码#include char Data[11]=; //这是接收要显示的数据 void main() { WDTCTL=WDTPW+WDTHOLD; ...… 查看全部问答> |
|
使用51单片机模拟SPI接口 挂载两个flash 可已正确实现读写操作 以及芯片ID 读取等操作 [ 本帖最后由 liuxiang5119 于 2013-7-31 14:02 编辑 ]… 查看全部问答> |




