|
在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寄存器写数据就是这种效果吗? |
|