为什么GPIO置位与清零要分开?

在嵌入式系统开发中,用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,11010001 
0101 
1011 
1111 

代码易于理解,速度快(3倍)! 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值