1. 單片機原理與實驗
定時器的時鍾頻率為12MHz/12=1MHz,則定時器計數器計1個數為1us,所以2ms為2000,因為計數器是向上計數模式,所以65536-2000=63536=0xF830
void Timer0_Init(void)
{
TMOD|=0x01; //16位定時器模式
ET0=1; //定時器0中斷允許
TH0=0xF8; //定時2ms 2000-2ms
TL0=0x30;
TR0=1; //開始計時
}
void Timer0_Interrupt(void) interrupt 0
{
TH0=0xF8; //重裝載
TL0=0x30;
if(P1^0 == 1) P1^0 = 0;
else P1^0 = 1;
}
2. 單片機計數器實驗
做計數器實驗,不需要開中斷,T1設為計數模式,脈沖由P3.5口進入。
TR1 = 1;是單片機自己在運行
3. 單片機流水燈實驗原理
上一節我們介紹了什麼是匯流排的方法,以及如何通過十六進制來控制IO口。並把我們的之前單點操作的流水燈進行了改進,成為了一個新的更加簡潔的程序。這回,就再用匯流排方法,來實現流水燈的更加多樣化的操作。
這次,我們要實現正向流水結束後再反過來流水,如此循環。然後再間隔閃爍。然後再累積流水,最後結束。
正向流水結束,再反過來。這個如何實現呢,我們需要使用到一些運算方法。
第一個是移位指令<<。
由於數字對比不強,看的不是很清晰,所以把數字給換成紅色了。
<<這個標志符的意思是,向左移動一位,就像下邊這樣:
1111 1111》1111 111_
移動完成後,會發現,最低位空出來了,此時程序會自動去填補一個0。於是就成了:
1111 1111》1111 111_》1111 1110
第一次移位1111 1110,第二次在第一次基礎上移位1111 1100,第三次在第二次基礎上移位1111 1000,如此循環,就可以一直把所有位都變成0。
我們在看下一句"|",這個符號是或的意思,我們知道,邏輯中的或,是說只要有其一為一,結果就是一。所以,我們把1100|0001,結果就是頭兩個一和最後一個一留下來,第三位因為都是0,所以就是0.結果就是1101了。當再次移位後,數據就變成1010了,我們再次跟0001取或,最後一位就再次置1,結果就是1011,從結果上看,1110》1101》1011……就是0在不斷的左移。
通過這個方法,可以讓每一位都會單獨置零。然後再給以一定時間的延時,就會看到流水燈了。
如果我們不賦初值0xfe會出現什麼情況?
就會出現,移位產生一個0,在或運算時就會被重新置1,如此循環,就進入不到第二個LED,也就不會出現流水燈了。可以自己嘗試下。
向右流水,效果是一樣的,需要注意的是初值更改為左側為0,就是0x7f,0111 1111,然後移位符號>>,還有取或的語句需要用0x80,1000 0000.
基本上是在左移位的基礎上稍作修改即可。
接下來是閃爍的。
閃爍,我們用的是間隔LED的方法,就是隔一個亮一個,埠輸出是1010 1010。翻譯成十六進制就是0xaa。這次用到的是一個取反的運算,就是把每一位的0變成1,1變成0,然後延時一段時間,再次取反,循環幾個周期,就看起來像是不斷閃爍。取反的操作相對好理解一些,就是這一位,現在是1,那麼取反後就是0,就是0和1的變換。
最後是一個累積點亮LED。
這個程序就是把第一個我們向左移位的函數,進行了更改,取消了賦初值,不用取或了,這樣就可以對比著理解,各個語句的作用,如果不使用,會產生什麼結果。如果我們的第一個函數不用取或這一步,那最終輸出結果就和這個現象一樣了。
所以,我們在寫程序時,需要認真,仔細分析自己需要的結果,然後對照程序進行簡單的演算。保證每一段都是可以輸出想要的結果,不然累積到最終,幾百行的代碼,看起來就會頭疼的,尤其是在沒有標注釋的情況下,有時就會忘記自己為什麼要寫這一句。
好的,這篇先說到這里,有問題或建議可以留言或私信給我。
想了解更多精彩內容,快來關注小亮談電氣
更多多內容,歡迎關注百家號:小亮談電氣。微信公眾號:電氣學苑。
4. 單片機秒錶顯示實驗中,提高計時精度的方法有哪些
單片機秒錶顯示實驗中,提高計時精度的方法只有一個(因晶振頻率誤差也影響計時精度,但是不能調,所以,這不能算一個方法),就是調整定時器的計數的初始值。
都認為,計數的初始值就是按定時的時間計算出來,應該是最精確的,這一點,的確對。但是,定時器中斷後,影響中斷,需要用時間的,到再計重寫時間初始值就是多餘的,就這一點點時間,就是影響計時精度的原因。
不過,這點計時誤差,必須是計時的時間很長,比如,經過一天以上,或經過十天以上的積累才能測出來。
所以,先把計算出來的計數
初始值增加8,經過測量,然後在這個基礎上再一點一點調整。或增或減小。
有一點,必須強調,就是定時器的中斷程序的第一行就必須是重寫時間常數,否則,誤差會更大。
5. 單片機實驗 編寫程序
單片機實驗,其實這就是典型的流水燈電路,P1口接8個流水燈,每個燈點亮1秒。用定時器T1定時50ms,中斷20次就為1秒,可用_crol_()移位函數實現。模擬效果如下圖所示。
6. 單片機實驗數據排序
原發布者:瀚海湛藍
實驗一、數據排序實驗一、實驗目的熟悉8031指令系統,掌握程序設計方法。二、實驗內容編寫並調試一個排序子程序,其功能為用冒泡法將內部RAM中幾個單元位元組無符號的正整數,按從小到大的次序重新排列。三、實驗程序框圖NNN四、實驗步驟1把8032片內RAM區50H—5AH中放入不等的數據(用寄存器讀寫方法)。2用連續運行方式從起始地址0100H開始運行程序(輸入0100後按EXEC鍵)。3排序結束,顯示「P.」。4用寄存器讀寫方法檢查50—5AH中內容應從小到大排列。五、參考程序DORDE:MOVSP,#60H;設置棧指針MOVR3,#50HDORDE1:MOVA,R3MOVR0,A;數據指針傳送到R0MOVR7,#0AH;長度送到R7CLR00H;清零標志位MOVA,@R0DORDE2:INCR0MOVR2,ACLRC;清零進位標志MOV22H,@R0CJNEA,22H,DORDE3;是否相等SETBCDORDE3:MOVA,R2JCDORDE4;小於或等於不交換SETB00HXCHA,@R0DECR0XCHA,@R0;大於交換位置INCR0DORDE4:MOVA,@R0DJNZR7,DORDE2JB00H,DORDE1;未完繼續MOVR0,#7EH;完,關顯示器前三位MOVA,#0FFHMOVR4,#06HDORDE5:MOV@RO,ADECR0DJNZR4,DORDE5MOV7EH,#0CH
7. 單片機匯編矩陣鍵盤實驗(掃描法)
關於掃描按鍵的原理,可以看下面這篇文章。
本文以循序漸進的思路,引導大家思考如何用最少的IO驅動更多的按鍵,並依次給出5種方案原理圖提供參考。在實際項目中我們經常會遇到有按鍵輸入的需求,但有的時候為了節省資源成本,我們都會選擇在不增加硬體的情況下使用最少的控制器IO驅動更多的按鍵,那麼具體是怎麼做的呢,下面我們就以用5個IO引腳為例,講下怎麼設計可以實現更多的按鍵?共有5種設計思路,下面依次介紹。
首先通常想到的可能是下面這樣的設計:
這樣我們可以先識別K01、K02、K03、K04、K05,若沒有按鍵按下然後再和思路四的設計一樣去識別其他按鍵。但這樣存在一個問題,如果IO1配置為0,IO5讀到0,那麼怎麼知道是K51按下還是K05按下呢,這里只需要在程序里做下判斷,先判斷下是不是K05按下,若不是就是K51,因為按鍵K01、K02、K03、K04、K05在5個IO口都為讀取的情況下,就可以識別,不需要掃描識別處理,相當於這5個按鍵優先順序高與其他按鍵。
總結
綜合上述,5個IO口最多可以識別25個按鍵,思路五程序上處理比較麻煩,若實際中只按思路四設計,也可識別20個按鍵,那麼如果有N個IO口可識別多少按鍵呢?這里給出如下公式:
假設有N個IO口按照思路三可以識別N*(N-1)/2個;
按照思路四可識別N*(N-1)個;
按照思路5可以識別N*(N-1)+N個。
最後再說下,如果實際設計時,還是按思路四設計好,軟體也沒那麼麻煩。如果是你的話你會選擇哪種方法呢?你還有沒有其他的設計方法呢?
8. 單片機中斷實驗交通燈的實驗原理
根據圖3.2電路,用單片機的IO口控制4組紅綠黃共12個發光二極體,使發光二極體按照一定規則與次序發光與閃亮以實現模擬交通燈的功能。假設初始狀態為:(南北通行狀態)南北綠燈、東西紅燈(25s);後轉為過度狀態:南北黃燈、東西紅燈(5s);再轉為東西通行狀態:東西綠燈、南北紅燈25(s)。再轉為過渡狀態:東西黃燈、南北紅燈(5s),然後循環往復。
要求採用定時器實現所需要的定時時間。
2、鍵控交通燈。
按一下K1鍵
,保持南北通行狀態;按一下K2鍵
,保持東西通行狀態;按一下K3鍵
,保持正常交通燈。
要求在中斷中進行按鍵處理。
3、具有閃爍的交通燈。
在2的基礎上增加,綠燈最後5s閃爍,即亮0.5S滅0.5S閃爍。
四、實驗原理圖
圖3.2交通燈實驗電路原理圖
圖3.2共有4個按鍵K1、K2、K3、K4,分別連接到單片機P2.0、P2.1、P2.2、P2.3引腳,按鍵後對應引腳為低電平,通過4個二極體D17、D18、D19、D20連接到P3.2(外部中斷0),這是二極體構成的相與電路,即任意按一個鍵能在P3.2上產生一個低電平或下降,作為中斷觸發信號。
五、軟體設計思想
1、定時思想。
採用定時器T0或T1的方式1定時500ms,每500ms中斷進行計數,計數10次即0.5s,計數20次即1s,對秒計數實現所需要的定時時間。
2、亮燈控制思想。
單片機控制燈引腳與燈對應如下,0點亮。
一共有四種狀態S0、S1、S2、S3,
a、南北通行S0狀態:
南北綠燈、東西紅燈,P0=11110111=0xf7,P1=10011110=0x9e;
南北通行S0
b、過渡狀態S1:
南北黃燈、東西紅燈,P0=11111011=0xfb,P1=10101110=0xae;
過渡狀態S1
c、東西通行狀態S2:
東西綠燈、南北紅燈,P0=11111100=0xfc,P1=11110011=0xf3;
東西通行狀態S2
d、過渡狀態S3:
東西黃燈、南北紅燈,P0=11111101=0xfd,P1=01110101=0x75;
過渡狀態S3
設置一個秒計數單元SEC每秒+1,設置兩個控制值變數a,b。