1. 51單片機左移的問題
建議樓主認真讀一下P2=_crol_(P2,1)中的左移函數,記得大概是整體左移,右邊最高位補到左邊最低位,區別於「<<」
2. 單片機 左移函數是怎麼用的
左循環本徵函數:
函數原型:unsigned char _crol_(unsigned char a,unsigned char n);
單片機左移函數用法:
例如,P2=0xff; P2=_crol_(P2,1);//語法是對的,但這是沒意義的,因為執行程序後P2還是原值0xff
P2=0xfe; P2=_crol_(P2,1);//執行程序後P2=0xfd
(2)單片機左移函數頭文件擴展閱讀:
單片機相當於一個微型的計算機,和計算機相比,單片機只缺少了I/O設備。概括的講:一塊晶元就成了一台計算機。它的體積小、質量輕、價格便宜、為學習、應用和開發提供了便利條件。
單片機的使用領域已十分廣泛,如智能儀表、實時工控、通訊設備、導航系統、家用電器等。單片機也被稱為單片微控器,屬於一種集成式電路晶元。
在單片機中主要包含CPU、只讀存儲器ROM和隨機存儲器RAM等,多樣化數據採集與控制系統能夠讓單片機完成各項復雜的運算,無論是對運算符號進行控制,還是對系統下達運算指令都能通過單片機完成。
3. 單片機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++;
}
4. 51單片機流水燈程序中頭文件#include<intrinsh>的解析
intrins.h 編輯本段intrins.h 在C51單片機編程中,頭文件INTRINS.H的函數使用起來,就會讓你像在用匯編時一樣簡便. 內部函數 描述 _crol_ 字元循環左移 _cror_ 字元循環右移 _irol_ 整數循環左移 _iror_ 整數循環右移 _lrol_ 長整數循環左移 _lror_ 長整數循環右移 _nop_ 空操作8051 NOP 指令 _testbit_ 測試並清零位8051 JBC 指令函數名: _crol_,_irol_,_lrol_ 原 型: unsigned char _crol_(unsigned char val,unsigned char n); unsigned int _irol_(unsigned int val,unsigned char n); unsigned int _lrol_(unsigned int val,unsigned char n); 舉例: _crol_,_cror_:將char型變數循環向左(右)移動指定位數後返回 _testbit_: 相當於JBC bitvar測試該位變數並跳轉同時清除。 _chkfloat_: 測試並返回源點數狀態。 就是匯編中的子函數。 _crol_,_cror_:如果二進制數為01010101 那麼_crol_(1) 左移1位後將高位補低位。 結果10101010。 功 能:_crol_,_irol_,_lrol_以位形式將val 左移n 位,該函數與8051「RLA」指令相關,上面幾個函數不同於參數類型。
5. 請問C51單片機的循環左移和循環右移函數中的「循環」是指什麼
C51單片機的循環左移函數是,_crol_(變數名,n),循環右移函數是,_cror_(變數名,n),函數中的「循環」是指變數的8位二進制數依次向左移一位,或向右移一位。
你比如的,取8位數,讓1111 1110循環左移一位,就是在1111 1110、1111 1101、1111 1011、1111 0111、1110 1111,等等,每移位一次,8位數向左或向右移一位。繼續移位,就會循環重復的。