51微控制器程式求解,如何給51微控制器程式設計

2025-02-11 20:40:09 字數 1874 閱讀 3355

1樓:夢g心痛

估計lz剛剛開始學微控制器,我來解釋下這個程式:前面不說了 定義標頭檔案 乙個延時子程式從這句開始。

unsigned char outdata=0xfe;

宣告outdata為有符號字元型變數 0xfe是什麼意思呢?你只需要看fe是十六進位 你用計算機轉換成二進位就是11111110 結合下面的那句。

p1=0xfe 就知道了 點亮p1口的第乙個燈,注意這是一種匯流排型的方法。

類似於outdata=p1^0;//定義p1口第一位。

接下來p3|=0x3c;你得知道|=這個符號是進行賦值運算 把p3口的值和0x3c(也就是00111100)進行邏輯或賦值。

接下來p1口第乙個燈亮 迴圈左移 做流水燈。

延時1000ms 這不多說。

下面 (p3|0xfb)!=0xff p1=0xff;

p3口的輸入值與0xfb(11111011) 按位相或的結果不等於0xff(11111111)那麼怎麼才能讓它不等於(11111111) 呢?看這個位邏輯運算(0|0=0 ,0|1=1 ,1|0=1 ,1|1=1)那麼就只有當p3口的第三位為0的時候0|0=0才會成立,p3口的第三口那麼就是為0時表示式成立。 如果你說0xfc 那麼就是11111100,那麼就只有當p3口的,同時為0才會成立這個結果。

注意單獨的|表示按位相或按二進位運算 如果你不知道位這基本概念的話,那你先把基礎的東西學好吧。

那麼p1=0xff(11111111) 就是燈全部熄滅 同上面 匯流排型的方法 你把十六進位轉換成二進位就很好理解了。

2樓:網友

處應該是個按鍵,當有按鍵時,就是為0時,會跳出迴圈。

3樓:秋牧

我補充下一樓的,你也許會想可以直接判斷的值,其實是可以的,但程式的編寫者直接用了p3口操作,這樣的話,就要避免影響其他位的值,例如,之類,所以就要把其他的隔離掉,所以運用或語句,在不影響其它位的情況下,取出的值。

p3|=0x3c是指p3=p3|0x3c,至於你說為什麼要用0xfb是因為你要取的是的值,換成二進位數0xfb是11111011,對應的正好是,如果用0xfc那麼他對應的值是11111100,對應的就不是了。

如何給51微控制器程式設計

4樓:生活幫扛把子

1.定義的變數不要太多。低128位為使用者定義變數的存放區域(預設時),也可以把變數放在高128位,但容易出錯,儘量少放,最好不放。

通過m51可以檢視記憶體變數的存放,最好不要超過110個位元組,否則程式無法執行或出錯。

2.如乙個變數多處使用可定義為全域性變數。例如迴圈變數i、j,儘量減少引數傳遞。

3.靜態變數最好放在程式儲存區,用code定義。

4.變數應定義為無符號數,像標誌位等僅佔一位的變數應定義為bit。

5.子程式在main()主程式之後的應事先宣告,放在前面的不用宣告。

6.變數、子程式定義但沒使用,系統給出警告。

7.雖然區域性變數和全域性變數不同名,但執行時可能被全域性變數改變。

8.程式在編譯後,有可能產生非常大的檔案。比如原來5k,編譯後變成10k,這是c彙編時程式空間分配太隨意造成的。

可首先遮蔽一部分程式編譯,然後再去遮蔽再編譯,可恢復,或一部分一部分複製到另乙個檔案中編譯。

9.如產生脈衝訊號用到定時器,要去掉脈衝訊號時,應先關定時器,再按要求把電平置為高電平或低電平。

10.可使用軟體實現「看門狗」功能。比如:

乙個程式執行乙個迴圈需要50ms,則定時器可定位100ms,當超過100ms時,程式將復位,在程式迴圈最下面都重灌定時器或重置定時器引數。

5樓:沙裡波特

先確定目的要求,選用乙個價效比高的微控制器。

再設計硬體電路。

最後,才是程式設計的事。

求61微控制器定時程式,51微控制器定時器的工作方式

不管用什麼微控制器,這是乙個很簡單的程式。就是個定時功能,什麼都沒有。微控制器定時器的工作方式 您好,親親微控制器定時器的工作方式如下,tmod 控制定時器的工作方式。個bit,高四位 bit 控制 t,低四位 bit 控制 t。因為定時器有種工作方式 tmod x 工作方式 tmod x 工作方式 tm...

51微控制器的程式是什麼意思,51微控制器的51是什麼意思?

clr c 清零進位標誌 mov a,66h 立即數66h送入ajc loop1 判斷c是否為0,c 1跳轉到loop1cpl c 取反c setb 01h 非法的指令setb只能對位操作loop1 orl c,acc.0 將a的最低位送入c中jb acc.2loop2 a中的第三位為1則跳到loo...

51微控制器ad採集,51微控制器AD採集

為了得到較高精度,你將除數乘以100,再除被除數。所以最好定義為int型。記憶體中肯定以十六進位制形式 二進位制 儲存的。程式可以直接相除,但只保留整數部分,所以如果你要得到小數兩位,就先乘以100再除,顯示的時候知道最低兩位實際是小數點後兩位就行了。stc12c5a60s2的話,是精度最大來可達1...