我有一个8位参数,我需要从这个参数发送4个第一位数字到我的PORTC。如何在不更改PORTC的最后4位的情况下执行此操作?我的第一个主要想法是做参数= PORTC,但是然后我改变了所有的8位而不仅仅是4位。如何使用参数更改4位?
回答
如果由“前四”你的意思是低四位,然后
PORTC = (parameter & 0x0F)
我们正在做的上面与二进制值0000 1111
这意味着执行bitwise AND操作的高4位会被清除,低4位将被保留(如果1 => 1,如果0 => 0)。所以,如果你的8位参数为xxxx yyyy
那么以后,这将是0000 yyyy
如果你指的是高四位,而PORTC需要他们在低4
PORTC = (paramter >> 4)
这意味着我们left shifting二进制字符串xxxx yyyy
下降4个地方,所以你会得到0000 xxxx
移交后的操作。
但是,有时您需要维护输出端口上的其他位,因此您需要执行bitwise OR操作以保留现有值。
PORTC |= (parameter & 0x0F)
或
PORTC |= (paramter >> 4)
因此,如果我们正在设置的低4位,则这确保我们不会改变任何的高位比特的,当我们在该端口上输出。
您需要先仔细查看您的微处理器文档,看看是否有任何方法可以读取IO端口的输出状态。如果没有,并且读取PORTC只是读取引脚的输入状态,那么通常需要维护一个“输出镜像” - 只是输出数据的一个副本。
然后,你必须做这样的事情:
static unsigned char outputMirrorC;/
...
...
// Set the bottom four bits of the port
outputMirrorC &= 0xf0; // Just keep the top four bits of the mirror
outputMirrorC |= newData & 0x0f; // Take the bottom four bits from your new data
PORTC = outputMirrorC; // Write the data to the port
你没有给什么PORTC是,这是非常关键的任何信息。但是对于大多数硬件,您必须首先读取整个端口以获取其值,更改低4位并将更改后的字节写回。假设端口是8位宽,并且“first fuor digits”意思是低4位,那么C是:
char val = read_port_c();
write_port_c((val & ~0xf) | my_4_bit_value);
您需要val & 0xf0; – nos
@nos正如我所说的,他没有说出“前四位数字”是什么。如果他的意思是位0-3,那么我的代码是正确的。如果他的意思是比特4-7,那么你就是。 OP将不得不弄清楚。 – Gene
@Gene否,nos是正确的,你的描述与你的代码冲突。如果你想保留高位,那么mask必须是'0xF0'。 – user694733
- 1. 如何使用JavaScript更改CSS参数?
- 2. 如何更改unsigned char中的4位?
- 3. 如何使用4位数字
- 4. 位置参数计数4
- 5. 如何用systemd更改dockerd参数?
- 6. 允许更改位置perl模块使用配置参数
- 7. 参数ValueFromPipeline和更改位置
- 8. 如何更改的onClick使用JavaScript,包括函数参数(S)
- 9. 如何使用参数更改函数中的全局变量
- 10. 如何更改笨寻呼机参数位置
- 11. SSRS如何更改Web部件中的参数位置?
- 12. 如何更改报告中的SSRS输入参数位置
- 13. 如何更改外部函数参数
- 14. 使用位参数
- 15. 如何使用基于参数的参数化版本更改配置?
- 16. 如何使Ruby方法传递输出参数(更改引用参数的值)?
- 17. 使用VB.net更改存储参数
- 18. 水晶报表:更改使用参数
- 19. Laravel - 使用GET更改URL参数
- 20. 我无法使用Gulp更改参数
- 21. 如何更改ASP.NET MVC使用的“ReturnUrl”参数的名称?
- 22. MVC路由如何避免使用参数更改网址
- 23. 如何使用URL参数更改页面上的链接href?
- 24. 如何使用提交表单更改jquery参数?
- 25. 如何使用C#更改SQL Server启动参数
- 26. 如何使用Perl更改XML中的参数值?
- 27. 如何使用Ruby通过循环更改URL参数?
- 28. 如何使用JavaScript更改样式参数?
- 29. 如何使用python更改多个文件中参数的值
- 30. 如何使用bash或perl更改XML中的参数值?
你会通过编辑原始文章(OP)发布一些代码吗? – octopusgrabbus