A. 單片機中整數循環左移_irol,整數循環右移_iror。這個整數怎麼移位的呢 位移位我懂。
_crol_ 字元循環左移
_cror_ 字元循環右移
_irol_ 整數循環左移
_iror_ 整數循環右移
_lrol_ 長整數循環左移
_lror_ 長整數循環右移
你的這個結果是錯的
a = 0xA5A5;
b = _irol_(a,1) ; 執行後 b=0x4b4b;
按照你的結果應給是這樣:
a = 0xA5A5;
b = _iror_(a,1) ; 執行後 b=0xd2d2;
PS: _iror_(a,1) 表示把變數a 循環右移1位
B. 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單片機的循環左移和循環右移函數中的「循環」是指什麼
C51單片機的循環左移函數是,_crol_(變數名,n),循環右移函數是,_cror_(變數名,n),函數中的「循環」是指變數的8位二進制數依次向左移一位,或向右移一位。
你比如的,取8位數,讓1111 1110循環左移一位,就是在1111 1110、1111 1101、1111 1011、1111 0111、1110 1111,等等,每移位一次,8位數向左或向右移一位。繼續移位,就會循環重復的。
D. 單片機c51流水燈一亮一閃依次左移編程
下面是採用定時器定時1S(時鍾晶振是11.0592MHz)的流水燈程序。採用左移函數_crol_(),此函數包含在intrinsic.h的頭文件內。有不懂得再問,需要匯編的話,留言,再寫給你。
#include<reg52.h>
#include<intrins.h>
unsigned
int
a,temp;
void
main()
{
TMOD=0x01;
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
EA=1;
ET0=1;
TR0=1;
temp=0xfe;
while(1)
{
if(a==20)
{
a=0;
P1=temp;
temp=_crol_
(temp,1);
}
}
}
void
T0_time0()interrupt
1
{
TH0=(65536-45872)/256;
TL0=(65536-45872)%256;
a++;
}
E. 單片機 移位操作 右移 C語言
C51系列單片機中_crol_指令是循環左移函數,_cror_是循環右移函數,這是51中特有的指令,別的類型單片機就不能使用了。易於程序的移植和通用性考慮個人比較推薦用<< 左移, 右移>>這兩個C中的移位符號。
F. 單片機循環左移
增加一個全局變數,將循環常數給變數,再對變數做左循環,將變數賦值給P0,
uchar a,b, c;
在主循環中P0=_crol_(P0,1); //P0的值向左循環移動
修改為
c=_crol_(c,1); //P0的值向左循環移動
P0=c;