51微控制器,C51程式問題,望前輩優化或者給好的編寫建議,分數有很多哈。。謝謝

時間 2022-09-02 20:25:13

1樓:

我前幾天就做了一個差不多的,監測脈衝數,每個脈衝數對應一個資料,資料差值比較大,每次採集的脈衝數會有波動,如果直接現實會出行資料跳動的情況。要做出一個資料穩定的,但是有變化時又要及時反映出來。

比如說資料平穩後突然來一個大資料,就需要對這個干擾濾除,如果之後的資料都變為大資料了,那麼我就要在這個資料點反映資料的變化。感覺有點預知未來的感覺了,其實就是每次計算都是計算前一次的資料,前一次的和新的一次的比較就可以了。

2樓:匿名使用者

你的電壓陣列本身就不靠譜啊,最後面幾個數值都是雷同的,這樣精度如何***呢?

比如,dianya[17]=14 dianya[18]=14這樣的話,你判斷條件aadianya[i])永遠也不會滿足的**有數可以大於14又小於14?

補充剛才我也沒想完整,還是不對,如果數字等於14呢?

小於15,但是不大於14,這樣還是無法滿足條件。

換句話說,只要陣列相鄰兩個數的差值小於2,那麼判斷就會出錯請你把判斷語句的符號都改成「大於等於」和「小於等於」吧

3樓:匿名使用者

if(aa>=78)

else

else }}

}我也不知道對不對,你可以試試····

編寫一個完整的微控制器c51程式

4樓:匿名使用者

12mhz的51微控制器,經過12分頻後為1mhz,則一個指令週期為1/1mhz = 1us. 使能定時器 2 使能定時器中斷 3 編寫中斷程式我估計你是覺得1秒的時間,

一定要採納哦

5樓:徐志尚

你正在考試吧?這個簡單,就是考慮定時器中斷一次時間不夠,一次定時5ms,要中斷200次,然後p1.0取反

89c51微控制器,應該怎麼編寫modbus...求高手指教.....帶例項最好...謝謝了 15

6樓:匿名使用者

首先你應該打通串列埠吧,modbus就是一個協議,是基於串列埠通訊的。所以首先要打通串列埠。

然後按協議填充陣列,包括從機號、功能碼等,自己看協議。

然後是crc校驗,這個網上有很多,隨便搜搜找一個就行。

然後就把填充的陣列通過串列埠發出去,就ok了

7樓:讓你倒黴哦

什麼是modbus啊!

請幫忙在51系列微控制器系統中,編寫一個延時1ms的子程式。謝謝。。

8樓:顛倒的世界

1、首先,在電腦中開啟keil軟體,建立好工程,然後新增c檔案,如下圖所示。

2、然後新增版c檔案,接下來輸入**,先權輸入一個標頭檔案命令。

3、然後,進行巨集定義,**如圖所示。

4、然後宣告p1口,如下圖所示。

5、最後,將延時語句全部新增進去,**按照圖中所示的直接敲入即可。

6、最後,點選編譯,生成hex檔案就可以了,這樣51微控制器延時語句就完成了。

9樓:一言中

在彙編裡面可以用jnz語句,利用所賦初值,寫一個減一不為零跳轉指令,跟c語言的for迴圈一個意思

10樓:匿名使用者

這個得看你晶振的頻率了。。根據for迴圈可以計算下大致得迴圈多少次就能定。微控制器定延時不精確的。

11樓:匿名使用者

void delay_ms(unsigned int n){unsigned int i=0,j=0;

for(i=0;i這是12mhz用的ms延時程式 我用示波器測了回,很準答

12樓:匿名使用者

void delay(unsigned int x) //延時 x ms

延時1ms 即為來

源使x=1;

這程式延時約1ms(x=1時用keil測出來約 0.96831272ms,近似1ms),用c語言很難做到準確的1ms。注意晶振為11.0592mhz的時候用~

13樓:手機使用者

假設bai12mhz.誤差自

du己調,

zhi用daonop微調。

版main: mov r5,#10

del1:mov r6,權#200

del2:mov r7,#246

nopdel3:djnz r7,del3

djnz r6,del2

djnz r5,del1

sjmp $

要做一個89c51微控制器的應用作業。具體請看補充,如果有高手能幫忙的麻煩發到[email protected]~感激不盡啊~

14樓:匿名使用者

溫度感測器用鉑熱電阻,它的電阻值跟溫度成一定的比例關係,可以根據阻值的變化得到溫度的變化,算出值來送led顯示,且同時判斷這個值有沒有達到高定值,到了就斷開插座(插座斷開接通可以用一個繼電器進行控制)

15樓:匿名使用者

這個設計最麻煩的是那個感測器的訊號調理電路.

只要你能把感測器的訊號轉換成電壓,再用一個adc0804之類的ad轉換晶片,連線上微控制器,就很簡單了.

16樓:匿名使用者

感溫器用ds18b20方便

還是關於80c51微控制器的問題!程式如下:我想知道執行出來的結果以及我的那些疑問!在這裡先說句謝謝了……

17樓:阿嚦噶禱

建議你先去看幾本書,首先是《微機原理》,裡面有將微控制器部分的,偏硬體一些,然後是《微控制器c51程式設計》馬忠梅版的,偏軟體設計一些。就是先讓你對微控制器的片內結構有個認識,然後再說程式的事情。

org 0000h

ljmp main (跳轉到 main 這個程式段)

org 0023h (確定了序列口的工作方式) 怎麼才能確定?//這裡不是確定了序列口的工作方式,是確定了串列埠中斷的地址對映入口

//從這開始到main前面是中斷子程式

clr ri (對 ri 進行清零 但作用是什麼呢?//作用是手動清除接收中斷標誌位)

mov a, subf (傳送資料給累加器a)

mov p2,a (再將a中的資料給 p2 口 ) 這是一個什麼樣的過程呢? //這個過程是微控制器自己完成的,程式設計師不用關心,是通過資料匯流排走的

reti

org 0040h (0040h 是怎麼確定的?)//這裡的40h是程式人工的定位到rom裡40h開始的地址單元處,你也可以定義在其他有效範圍內

main: mov sp,#5fh (為什麼要設定堆疊指標呢 作用又是什麼呢?//微控制器一般都有一個堆疊,作用是儲存環境變數的,設定堆疊指標的作用是避免資料對衝了)

mov tmod,#20h (這是什麼意思?//tmod是暫存器)

mov th1,#0fdh (同上 //同上)

mov tl1,#0fdh (同上 //同上)

mov pcon,#00h (電源控制暫存器 復位?原因是什麼//這裡不能理解為復位,是設定串列埠波特率是否翻倍的,也是暫存器操作)

setb tr1 (對tr1 置1設定 原因是? //去看暫存器的使用方法)

mov scon,#50h (不知道這是在幹什麼 //暫存器)

setb ea (中斷總開關置1)

setb es (對中斷開關置1 )

sjmp $end

18樓:匿名使用者

0023h 序列口中斷入口地址,序列口中斷時從此地址開始執行程式clr ri 清除接收中斷

mov p2,a 接收的資料送到a,再從a輸出到p2口顯示subf-a-p2

org 0040h主程式應該在中斷入口程式以後,一般0030h以後就可以具體看你的中斷程式用了多少空間

mov sp,#5fh 堆疊指標這個程式好像沒用到,設定誰防止用堆疊的時候把原來的資料覆蓋掉,所以堆疊應該放到一個用不到的地方

mov tmod,#20h 計時器工作模式mov th1,#0fdh 計時器初始值setb tr1開始計時

mov scon,#50h 序列口工作方式其實所有內容書上都有,希望你會喜歡上微控制器

19樓:做而論道

程式雖然簡短,涉及面較廣,在書裡面,涵蓋三~四章的內容。

開始覺得難,慢慢學,不用急。

下面的簡單說明一下,樓主還是應該看書.

org 0000h ;0000h是開機復位後起始地址,這是固定的.

ljmp main ;跳轉到 main 程式段.

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

org 0023h ;0023h是序列口中斷的入口地址,這也是固定的.

;下面寫的就是序列口中斷程式.

clr ri ;ri=1才發生的串列埠中斷,必須清零,否則中斷就沒有個完了.

mov a, subf ;取出串列埠收到的資料.

mov p2,a ;送到p2口,外接led就能顯示.

reti ;中斷程式結束,返回主程式.

;-------------------------------以上幾行是串列埠中斷程式.

org 0040h ;0040h 是怎麼確定的?,離開0023h幾十位元組即可.

main:mov sp,#5fh ;設定堆疊指標,為中斷過程準備儲存地址的空間.

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

mov tmod,#20h ;這是什麼意思?這三條,是設定定時器的工作方式.

mov th1,#0fdh ;(同上) 用來控制波特率.

mov tl1,#0fdh ;(同上).

setb tr1 ;對tr1置1,即為啟動定時器.

;-------------------------------以上四行,是針對定時器的.

mov scon,#50h ;設定序列口的工作方式.

;在這裡指定了用定時器1,控制波特率.

mov pcon,#00h ;這也是用來控制波特率的.

;-------------------------------以上二行,是針對序列口的.

setb ea ;中斷總開關置1,即開放總中斷.

setb es ;串列埠中斷開關置1,即開放串列埠中斷.

;-------------------------------以上二行,是針對中斷系統的.

sjmp $ ;等待中斷的發生.

;如果串列埠收到資料,立即轉到0023h.

;在0023h執行時,遇到reti,就返回到這裡.end

用51微控制器組合語言編寫一電腦鍾程式,急!!!!!!!

20樓:匿名使用者

唉,可惜了,我只會c51……

21樓:

靠,連年月日都要,這不就是個萬年曆了,單程式設計可不好搞,要加ds1302.。。。。。

C51微控制器程式設計

include define uchar unsigned char define uint unsigned intsbit high key p1 0 sbit low key p1 1 sbit led p2 0 sbit speak p2 1 uint count void delay ui...

c51微控制器中斷程式中的interrupt1,2,3是由什麼決定的

衛戍邊疆 中斷是由於某種事件的發生 硬體或者軟體的 計算機暫停執行當前的程式,轉而執行另一程式,以處理髮生的事件,處理完畢後又返回原程式繼續作業的過程。中斷是處理器一種工作狀態的描述。1 int0 外部中斷0,由p3.2埠引入,低電平或下降沿引起。預設優先順序最高。2 int1 外部中斷1,由p3....

簡單的C51微控制器組合語言程式分析

羅門大佬 樓上說的有理,但是即使刪去ljmp main也不行,因為在中斷時它把ea關了,也就不會中斷了。其實不用關ea,你把clr ea也刪去就可以執行。只要你的手沒有中斷服務程式快就會有中斷。每次按都有。你試一下在開發板上執行,應該可以的。原因是當你外中斷置低電平時,就會進入中斷程式。執行完就會自...