在嵌入式系统开发中,用C语言进行位操作,设置管脚的值等是非常多的,在操作的同时我们又希望不要影响其他位的值,通常我们是要首先保存其他管脚的值,然后再设置,如我们清零PA01管脚(不采用C51的位操作):
PA->OUT&=~(1<<1);
置位操作:
PA->OUT|=1<<1;
语句结构是非常复杂的,而且要翻译成6条汇编指令。
引入置位与清零寄存器后,置位:
PA->OUTSET=1<<1;
清零:
PA->OUTCLR=1<<1;
指令结构非常简单,且一般大约翻译成2条汇编汇编指令。
这样操作会影响其他管脚的值吗?答案是不会,以置位为例,只看2个管脚,看下表分析:
SET寄存器前值 | SET寄存器后值 | 管脚前值 | 管脚后值 | 备注 |
00,01,10,11 | 01 | 00 | 01 | |
01 | 01 | |||
10 | 11 | |||
11 | 11 |
代码易于理解,速度快(3倍)!