单片机 移位 *** 作 右移 C语言

单片机 移位 *** 作 右移 C语言,第1张

C51系列单片机中_crol_指令是循环左移函数,_cror_是循环右移函数,这是51中特有的指令,别的类型单片机就不能使用了。易于程序的移植和通用性考虑个人比较推荐用<< 左移, 右移>>这两个C中的移位符号。

C语言

#include<reg51h>

void delay(unsigned int a)

{

unsigned i,j;

for(i=0;i<a;i++)

for(j=0;j<1000;j++);

}

main()

{

unsigned LED,i;

LED = 0xfe;

EA = 0;

while(1)

{

for(i=0;i<7;i++){delay(100);LED = (LED<<1)|0x01;P3 = LED;}

for(i=0;i<7;i++){delay(100);LED = (LED>>1)|0x80;P3 = LED;}

}

}

汇编语言

LED EQU 30H

ORG 0000H

LJMP MAIN

ORG 0030H

MAIN:

CLR EA

MOV SP,#5FH

MOV LED,#0FEH

MOV R0,#7

LOOP:

MOV R7,#50

LCALL DELAY

MOV A,LED

RL A

MOV LED,A

MOV P3,A

DJNZ R0,LOOP

MOV R0,#7

LOOP1:

MOV R7,#50

LCALL DELAY

MOV A,LED

RR A

MOV LED,A

MOV P3,A

DJNZ R0,LOOP1

MOV R0,#7

SJMP LOOP

;----------------------------

DELAY:

MOV R2,#8

DLY1:

MOV R3,#250

DJNZ R3,$

DJNZ R2,DLY1

DJNZ R7,DELAY

RET

;-----------------------------

END

data

=

nBitmapDot[i]

>>

1;

//

nBitmap[i]右移一个二进制位,与

data

=

nBitmapDot[i]

/

2;

同效。

data

=

nBitmapDot[i]

<<

1;

//

nBitmap[i]左移一个二进制位,与

data

=

nBitmapDot[i]

2;

同效。

要说明的是移位 *** 作(<<

>>)效率更高。

说一下思路吧。主程序做一个标志位A(初始赋值0),一个判断语句(if之类的)判断此标志位A,A为0时,流水灯右移,否则,流水灯左移。中断程序里,让A自加1,然后判断,等于2时,将A赋值为0,其他情况不变。

希望能帮到你。

以上就是关于单片机 移位 *** 作 右移 C语言全部的内容,包括:单片机 移位 *** 作 右移 C语言、c语言和汇编的程序八个LED依次左移逐个点亮,点亮后在依次右移逐个点亮不断循环、单片机程序中数组中的值怎么实现位左(右)移(C语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/9335706.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-27
下一篇 2023-04-27

发表评论

登录后才能评论

评论列表(0条)

保存