『壹』 單片機C語言右移指令怎麼用
用這種移位語句,就是這種結果。
你試試:_crol_()和_cror_()移位函數。
需要先加上頭文件:
#include<intrins.h>
『貳』 單片機16位原碼右移一位的程序
單片機16位原碼右移以為,這是匯編語言中的指令,是對累加器A中的8位數依此向左移一位,還分帶Cy的移位和不帶Cy的移位。
指令分別為:RLCA;帶Cy的右移位;RLA;不帶Cy的移位。以RLA為例說明:假如A=10110010,則左移位一次後,這8位數向左移一位,最高位回到最低位,就像是8個人轉了一圈似。移位後,A=01100101
『叄』 單片機 移位操作 右移 C語言
aa=_crol_(aa,1); //左移一位
aa=_cror_(aa,1); //右移一位
可以打開:intrins.h,查看。
『肆』 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位
}
}
}
『伍』 單片機 移位操作 右移 C語言
C51系列單片機中_crol_指令是循環左移函數,_cror_是循環右移函數,這是51中特有的指令,別的類型單片機就不能使用了。易於程序的移植和通用性考慮個人比較推薦用<< 左移, 右移>>這兩個C中的移位符號。
『陸』 循環右移指令的目標操作數有哪些其指令功能是什麼在此輸入你
循環右移指令的目標操作數有RRA和RRCA,其指令功能是RRA執行結果是A中的數據循環右移1位,RRCA是帶進位CY的循環右移。51單片機有兩條右移指令,都以累加器A為操作目標,具體指令是RRA和RRCA。RRA執行結果是A中的數據循環右移1位,例如執行前A=10001100,執行後A=01000110,A的最低位被移到了最高位,這就是循環移位的意思。RRCA是帶進位CY的循環右移,例如執前CY=0,A=11110001,執行後CY=1,A=01111000,A的最低位被移到了CY,而CY被移到了A的最高位。
『柒』 單片機 移位操作 右移 C語言
先說第一個問題:
比如用查表法將結果保存到變數i中,查表變數為x,則i=table[x],記住c語言裡面數組是從0開始的,比如說上面的0x01就是table[0],0x02是table[1],以此類推。
再說第二個問題:
比如說從p1.0口發送出去,則可以寫為
sbitout=p1^0;//定義out為p1.0口,這樣今後好寫程序
chari;
for(i=0;i<8;i++)
{
out=data&0x80;//因為高位在前,將它寫成二進制就明白了
data<<=1;
}
上面的程序就能搞定了;
應該是所有的單片機都有cy位(不知道浮點dsp有沒有);
c語言中左移和右移之後低位或高位自動補零,cy位也保持為零(視編譯器而定,這個得看編譯器手冊),有些編譯器提供了循環移位的函數;
還有什麼不明白的補充問題就是
『捌』 匯編 的 RR 指令是怎麼向右移位的
這是單片機的一條指令RR:不帶進位的循環右移
RR00000001結果為10000000
RR10011100結果為01001110
RR的圖示為上面的那個圖。
下面的那個圖為RRC(帶進位的循環右移)
『玖』 C51的單片機中右移指令>>為什麼有時候最高位會補1
單片機右移分為算術右移和邏輯右移。(左移沒有這個問題,0x01<<i就正確)
算術右移最高位是符號位,右移後符號位保持不變(如果一直右移會導致所有位都變成和最高位一樣的值)。
邏輯右移才是最高位補0。
led因為是char,編譯器會把">>"解釋成算術右移,即最高位是符號位(0x80最高位正好是1),保持不變。最後導致結果不對。
led要定義為unsigned char就應該也對了。
『拾』 51單片機執行循環右移指令的問題
用帶進位的rrc即可
MOV A,33H
JB ACC.0,TO2
SETC
JMP TO1
TO2:CLRC
TO1:MOV A,30H
RRC A
MOV 30H,A
MOV A,31H
RRC A
MOV 31H,A
MOV A,32H
RRC A
MOV 32H,A
MOV A,33H
RRC A
MOV 33H,A
隨便寫寫的,但思路如此,可能有紕漏自己改改