AVR中写数据到PINx寄存器是什么作用?
在AVR中要使引脚的电平翻转,应该是往PORTx寄存器写数据。PINx寄存器是用来检测引脚的电平值是高电平还是低电平的。然而AVR的参数手册中提及PINx寄存器是可读写的,那么如果往PINx寄存器写数据会有什么效果呢?
下面是国外的一个人写的SPI接口初始化代码,使用的是ATtiny85。
;---------------------------------------------------------------------------;
; Receive a byte接收一个字节
;
; BYTE rcv_spi (void);
.global rcv_spi
.func rcv_spi
rcv_spi:
ldi r24, 0b000100 ;PB2(SCK)取得立即数到r24寄存器
.rept 16 ;Toggle SCK 16 times 翻转SCK16次
out _SFR_IO_ADDR(PINB), r24 ;
.endr ;/
nop ;读取移位寄存器中的内容到r24寄存器——由于接收的数据只有8位,所以直接通过r24寄存器返回给C程序。
in r24, _SFR_IO_ADDR(USIDR) ;/
ret
.endfunc
;---------------------------------------------------------------------------;
问题来了,out _SFR_IO_ADDR(PINB),r24 这句话的作用是翻转SCK。往PINx寄存器写数据就是这种效果吗? 我只知道,这个寄存器可以当作额外的通用寄存器用....官方有这个技巧的介绍..... 写这个寄存器 没有多大用的这个主要是用来读的! 就是弄不懂去写操作PIN有啥现实意义 输出有取反的作用 回复【4楼】linyu0395 林
-----------------------------------------------------------------------
感谢您的回答,刚刚谷歌了一下,找到一篇文章http://www.avrtool.com/avr/Print.asp?ArticleID=686
确实是这样,写1到PINx寄存器的某位,对该位有取反的作用。 注意!这个不是通用的性能,需要查看具体使用芯片的型号。
M16就没有这个功能,在M16的手册中,PIN就是只读寄存器,I/O结构图中没有写PIN的信号。
而TINY85的手册中,PIN是可读写的寄存器,手册中明确说明写PIN将把PIN取反,I/O的结构图也同M16的不同,有写PIN的信号。
还是应该沉下心来,养成先仔细看手册的习惯,然后认真理解,这是最根本的。网上别人的东西,只是参考。
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_534577.jpg
M16的I/O结构图
http://cache.amobbs.com/bbs_upload782111/files_26/ourdev_534578.jpg
TINY85的I/O结构图 回复【6楼】machao
-----------------------------------------------------------------------
感谢马老师细心答复,学生心粗了……
页:
[1]