此推文是学习笔记,理解和内容如有出错请大佬帮忙指点修正。
基础知识
1)首先认识一个寄存器(例如P1)占一个字节,而一个字节多数是8位,例如P1 = 11111111,即P1^0 到P1^7都是1。
我们可以看成一个字节的二进制数代表我们的8个IO口如下表所示
IO口 | IO1 | IO2 | IO3 | IO4 | IO5 | IO6 | IO7 | IO8 |
寄存器 | P1.0 | P1.1 | P1.2 | P1.3 | P1.4 | P1.5 | P1.6 | P1.7 |
二进制数 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
2)其次要知道LED灯为1时(LED = 1)即高电平,灯熄灭。相反(LED = 0)低电平,则灯亮。
3)移位运算符效果:
/*默认P1 = b11111111*/
P1 = P1 << 1 ; /*执行一次结果为 11111110 ,即整体左移一位 最右边用低电平0来替代 */
4)头文件intrins的函数使用
_crol_(xx,m) xx寄存器字符循环左移m位
_cror_(xx,m) xx寄存器字符循环右移m位
_nop_ 空操作8051 NOP 指令(延时作用)
例子:
unsigned temp;
void main()
{
temp = 0xfe; //temp = 11111110
P1 = temp;
while(1)
{
for(int i=0; i<8; i++)
{
temp = _crol_(temp,1); //循环左移一位,最前面的数循环到最后面,例11111101
P1 = temp;
}
}
}
应用
1)for循环+移位运算符
2)循环移位函数_crol_,_cror_