❶ 51单片机移位问题
MOV A,#01H
MOV P1,A
MOV R2,#08H
ACALL DELAY
LOOP:MOV R1,A
RL A
XRL A,R1
MOV P1,A
ACALL DELAY
DJNZ R2,LOOP
DELAY:
R3,#0FFH
DEL: R4,#0FFH
DJNZ R4,$
DJNZ R3,DEL
就这样可以了。只要用个R1把A的值先保存,然后等会拿出来跟左移后的A相或就可以了。
❷ 如何在51单片机都实现4位数的循环移位
static uchar i;
i=++i%4;
P1=(P1&0XF0) | (1<<i);
❸ 51单片机LED循环移位的是瞬间如何处理的
P1>>=1;右移后P1最左为0,这个和汇编不一样,是C指令自动实现的;
P1=P1|0x80;或运算后P1最左(最高
位)变为1.
这两句之间也就是微秒级的变化,不影响
LED灯
。人眼更感觉不到。
❹ 51单片机多字节移位为什么清符号位,搞不清它的工作流程
这是为了保留符号位,并防止符号位右移后串入数据位造成运算错误。
比方说有符号数 1100,右移后应为1010而不是0110(变号了)、
第一次右移完后,高字节的最低位进入了Carry位,继续参与低字节的移位。
❺ 51单片机的串行口可以以移位寄存器方式和9位异步方式工作
51单片机的串行口可以以移位寄存器方式,也可以9位异步方式工作
但异步方式工作时这个第9位不是普通的数据,而是奇偶校验位或地址/数据的指示标志
因多机通信时需要区别不同的从机,就需要一个地址,这个第9位为0,表明前8位是数据
这个第9位为1,表明前8位是地址
由于SBUF是8位寄存器,即使你能一次发9位也很麻烦,发送方要把第9位分离出来
接收方也要单独处理这一位
不象STM32发送和接收寄存器都是32位,本来第9位就有效,9位数可以一次装入或读出,所以能够一次发送和接收
❻ 用c写51单片机代码,其中“>>”来移位实现的功能是什么
a>>6表示a左移6位,也就是除以32,这样可以加快单片机的处理速度(移位运算速度远高于除法),a本身的值不变;
左移右移运算只对int,char有效,float和double则不可以~
1<<i就是1右移i位,多数情况都是为后续的位运算做准备……
比如按位与,按位或,最常用的就是判断单片机IO口的状态~
❼ 51单片机的c语言 左移右移怎么用想用来控制流水灯,请帮忙写个完整的c程序,参考下,端口随意
# include "reg51.h" // 包含头文件
#define uchar unsigned char
void delay02s(void) // 延时0.2s子程序
{
unsigned char i,j,k;
for ( i=2;i>0;i-- )
for (j=200;j>0;j-- )
for (k=250;k>0;k-- );
}
void main (void) // 主函数
{
uchar i,j;
while (1) // 死循环
{
j=0x01; // j初始化为0x01,左移初始值
for(i=0;i<8;i++) // for循环语句,完成8个循环
{
P1= ~ j; // 对变量j 中的值按位取反后,从P1口输出
delay02s( ); // 延时0.2s
j= j<<1; // 左移1位
}
j=0x80; // 设置右移初始值j为0x80
for (i=0;i<8;i++)
{
P1= ~ j;
delay02s( );
j= j>>1; // 右移1位
}
}
}
❽ 51单片机移位操作问题
这是编译器优化问题,可以降低编译器优化等级
❾ 请问C51单片机的循环左移和循环右移函数中的“循环”是指什么
C51单片机的循环左移函数是,_crol_(变量名,n),循环右移函数是,_cror_(变量名,n),函数中的“循环”是指变量的8位二进制数依次向左移一位,或向右移一位。
你比如的,取8位数,让1111 1110循环左移一位,就是在1111 1110、1111 1101、1111 1011、1111 0111、1110 1111,等等,每移位一次,8位数向左或向右移一位。继续移位,就会循环重复的。
❿ 51单片机左移的问题
建议楼主认真读一下P2=_crol_(P2,1)中的左移函数,记得大概是整体左移,右边最高位补到左边最低位,区别于“<<”