導航:首頁 > 操作系統 > 大工軟院單片機實驗4

大工軟院單片機實驗4

發布時間:2023-04-14 03:19:11

單片機數字鍾畢業中期檢查表中的一個問題

詳細點???你問什麼問題??

淮安信息職業技術學院

綜合畢業實踐說明書(論文)
2009-2010 學年
系 專業

摘要:數字電子時鍾電路設計系統,以AT89C51單片機為控制核心,由鍵盤顯示、定時鬧鈴、LED共陰極數碼管和LED燈顯示等功能模塊組成。基於題目基本要求,本系統對時間顯示和定時報警進行了重點設計。本系統大部分功能由軟體來實現,吸收了硬體軟體化的思想,大部分功能通過軟體來實現,使電路簡單明了,系統穩定性大大提高。本系統不僅成功的實現了要求的基本功能,而且有一定的創新功能。
關鍵字:單片機 AT89C51 共陰極LED數碼顯示器
Abstract This digital electronic clock circuit design system ,based on chip microcomputer AT89C51,is composed by the following functional moles : keyboard displaying , timing alarmg. common cathode LED digital tube,LED lights display,and so on.
According to the basic requirements of the subject ,the system stresses on the realization of Time display and regularly report to the police.
The design achieved all the required basic technical indexes. Furthermore , adopting the idea of hardware-to-software, most of those functions are realized by softwares, which makes the electrocircuit more concise and the system more stable.

Key words: chip microcomputer AT89C51
Common cathode LED digital display

目 錄

一、 前言……………………………………………….. ….. ..1
二、 總體方案設計………………………………………..…..1
三、 系統硬體設計………………………………………..…..2
(1)輸入部分……………………………………….. …….. ...2
1 電源模塊……………………………………………………………….2
2 按鍵模塊……………………………………………………………….5
(2)輸出部分……………………………………….. .. ……...3
1 顯示模塊……………………………………………………………….3
2 鬧鈴模塊……………………………………………………………….4
3 LED燈顯示模塊……………………………………………………….4
(3)電路相關參數……………………………………....……...4
1 LED數碼顯示器………………………………………………………..4
2 集成器件CD4511……………………………………………………….5
3 集成器件74LS138……………………………………………………. .5
四、 系統軟體設計………………………………………..…..6
主程序流程圖…………………………………………………………….7
五、 系統調試……………………………………………..…..9
1 系統功能……………………………………………………………….9
2 時鍾精度分析………………………………………………………... .9
六、 系統設計總結………………………………………..…..9
七、 參考文獻………………………………………….…... .10
附錄……………………………………………………………11
1) 系統原理圖……………………………………………......................................11
2) 系統PCB圖……………………………………………................................... .12
3) 源程序…………………………………………………..................................... .13

一、前言
本文通過對一個能實現按鍵開關可調整時、分、秒,且具有加密功能、定時報警的24小時制的時間系統的設計學習,詳細介紹了51單片機應用中的定時中斷原理、數碼管顯示原理、動態掃描顯示原理等,進一步學習、應用單片機C語言系統的實現了各種功能。從而使自身明白使用單片機匯編語言和C語言之間的效率、整體性問題。系統由AT89C51、獨立式按鍵、二極體、LED數碼管、蜂鳴器等部分構成,能實現24小時制時、分、秒的時鍾顯示,能實現時鍾簡單的加密功能。同時也可進行時、分、秒的校準、定時報警和LED二極體流水燈顯示。
本系統主要是和實際生活的數字鍾結合起來,可用1功能鍵進行加密,進入時間校準等。可用3個帶有不同按鍵分別對時鍾的時、分、秒進行校準。每個按鍵伴有不同的聲響以示區別。
文章後附有本次課程設計系統電路原理圖及源程序,以供讀者參考。

二、總體方案設計
本次設計根據實驗要求設計數字時鍾。可利用如下兩種方案實現。
方案一:本方案採用美國DALLAS公司的專用時鍾晶元DS1302。該晶元主要特點是採用串列數據傳輸,可為掉電保護電源提供可編程的充電功能,並且可以關閉充電功能。其內部採用石英晶體振盪器,其晶元精度不大於10ms/年,且具有完備的時鍾鬧鍾功能,因此,可直接對其以用於顯示或設置,使得軟體編程相對簡單。為保證時鍾在電網電壓不足或突然掉電等突發情況下仍能正常工作,晶元內部包含鋰電池。當電網電壓不足或突然掉電時,系統自動轉換到內部鋰電池供電系統。而且即使系統不上電,程序不執行時,鋰電池也能保證晶元的正常運行,以備隨時提供正確的時間。
方案二:本方案完全用軟體實現數字時鍾。原理為:在單片機內部存儲器設三個位元組分別存放時鍾的時、分、秒信息,並通過程序控制掃描輸出顯示數據。利用定時器0與軟體結合實現1秒定時中斷,每產生一次中斷,存儲器內相應的秒值加1;若秒值達到60,則將其清零,並將相應的分位元組值加1;若分值達到60,則清零分位元組,並將時位元組值加1;若時值達到24,則將時位元組清零。該方案具有硬體電路簡單的特點,但當單片機不上電,程序將不執行。且由於每次執行程序時,定時器都要重新賦初值,所以該時鍾精度不高。
鑒於以上兩種方案,雖然時鍾晶元DS1302具有更多的優點,由於實驗硬體的因素,現有的硬體缺少DS1302,為不影響實驗進度,本設計採用方案二完成數字時鍾的功能。
根據題目要求設計的總體框圖,如圖1 — 1所示:

圖1 — 1單片機數字鍾硬體系統的總體設計框圖
三、系統硬體設計
(1)、輸入部分:
1.電源模塊
方案一:採用干電池作為單片機數字鍾的電源,由於調試時間較長,使用干電池需經常更換電池,不符合節約型社會的要求。並且需要有一個硬體將3節電池串聯在一起以產生足夠的電壓,若如此,將造成攜帶不方便。
方案二:採用200W/5V直流穩壓電源作為系統電源,不僅功率上可以滿足系統需要,不需要更換電源,並且比較輕便,使用更加安全可靠。但穩壓電源我們不能自備,若要調試系統,只能到實驗室才能做。
方案三:採用普通的USB線連接微型計算機作為系統電源,雖然功率上可以滿足稍大於系統需要,但同樣不需要更換電源,並且比直流穩壓電源更輕便,可隨時使用、調試系統。
基於以上分析,由於本次設計系統都是軟硬體想結合,所以要採用微機設備,有足夠的USB介面供我們使用,所以我們決定採用方案三

2.按鍵模塊
鍵盤是人與單片機打交道的主要設備,按鍵的讀取容易引起誤動作。可採用軟體去抖動的方法處理,軟體的觸點在閉合和斷開的時候會產生抖動,這時觸點的邏輯電平是不穩定的,如不採取妥善處理的話,將引起按鍵命令錯誤或重復執行,在這里採用軟體延時的方法來避開抖動,延時時間為20ms ( ).
方案一:採用獨立式鍵盤。獨立式按鍵是直接用I/O口線構成的單個按鍵電路,其特點是每個按鍵單獨佔用一根I/O口線,每個按鍵的工作不會影響其它I/O口線的狀態。但當所需按鍵數量多,會佔用過多的I/O口線。
方案二:採用矩陣鍵盤。因為單片機的I/O口有限, 顯然,在按鍵數量較多時,矩陣式鍵盤較之獨立式按鍵鍵盤要節省很多I/O口線。但必須將行線、列線信號配合起來作適當處理,才能確定閉合鍵的位置。
基於以上分析,我們選用方案一,因為本次設計中僅用到4個按鍵。獨立式按鍵鍵盤有利於PCB的作圖。
(2)、輸出部分:
1、 顯示模塊
顯示模塊是本次單片機課程設計最核心的部分。
方案一:採用LCD1602。LCD1602為工業字元型液晶,能夠同時顯示16x02即32個字元。其採用標準的16腳介面,該液晶模塊內部的字元發生存儲器(CGROM)已經存儲了160個不同的點陣字元圖形,所以可分容易的實現數字鍾數碼顯示。
方案二:採用LED共陰極數碼管。共陰數碼管在應用時將公共極COM接到地線GND上,當某一欄位發光二極體的陽極為高電平時,相應欄位就點亮。當某一欄位的陽極為低電平時,相應欄位就不亮。
基於以上分析,我們考慮到現實經濟因素,所以選擇了方案二。
對於6路共陰極數碼管數碼管要正常顯示,就要用驅動電路來驅動數碼管的各個段碼,從而顯示出我們要的數字,因此根據數碼管的驅動方式的不同,可以分為靜態式和動態式兩類:
方案一:靜態顯示驅動。就是每一個數碼管顯示器都要佔用單獨的具有鎖存功能的I/O介面用於筆劃段字形代碼。這樣單片機只要把要顯示的字形代碼發送到介面電路,直到要顯示新的數據時,再發送新的字形碼,因此,使用這種辦法單片機中CPU的佔用較小。但對於靜態顯示方式,所需的數據鎖存裝置很多,引線多而復雜,且可靠性也較低。
方案二:動態顯示驅動。通過單片機對數碼管位選通COM端電路的控制,只要將需要顯示的數碼管的選通控制打開,該位就顯示出字形,沒有選通的數碼管就不會亮。通過分時輪流控制各個數碼管的的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。動態顯示可以大幅度地降低硬體成本和電源的功耗,因為某一時刻只有一個數碼管工作,也就是所謂的分時顯示,故顯示所需要的硬體電路可分時復用。動態顯示方式,可以避免靜態顯示的問題。但設計上如果處理不當,易造成亮度低,閃爍問題。因此合理的設計既應保證驅動電路易實現,又要保證顯示後的數據穩定,無閃爍。動態顯示採用多路復用技術的動態掃描顯示方式, 復用的程度不是無限增加的, 因為利用動態掃描顯示使我們看到一幅穩定畫面的實質是利用了人眼的暫留效應和發光二極體發光時間的長短, 發光的亮度等因素. 我們通過實驗發現, 當掃描刷新頻率(發光二極體的停閃頻率) 為50Hz, 發光二極體導通時間≥1m s 時, 顯示亮度較好, 無閃爍感.。
鑒於上述的方案分析, 我們採用方案二
2、鬧鈴模塊
方案一:採用語音晶元ISD1110鬧鈴。ISD1110 具有多種采樣率對應,多種錄放時間,可以利用振盪電阻自已決定采樣率。操作簡單,靈活。音質好,適應電壓范圍廣。可先對錄放音設備錄入一段音樂或其他報時方式,當到設定時間時,單片機控制錄放音設備放音。
方案二:採用蜂鳴器鬧鈴,當到設定時間時,單片機向蜂鳴器送出低電平,蜂鳴器響鈴。採用蜂鳴器鬧鈴結構簡單,只需要單路信號控制,發出的鬧鈴聲音可以根據響和不響的不同的軟體延時時間來控制,當然也能發出音樂聲音。
基於兩種方案分析,雖然語音晶元ISD1110具備更多優點,但鑒於經濟因素,我們本次設計還是決定採用方案二。當然如果在大型比賽的話,還是偏向於採用方案一的。
3、LED燈顯示模塊
採用LED燈可以方便的用不同的流水方式或單個LED燈來判斷系統的工作狀態,實現不同的顯示功能,是一種經濟又實用的方式。
(3)電路相關參數
1、LED數碼顯示器
通常用的七段數碼顯示器的內部有8個發光二極體,其中7個發光二極體組成了數字「8」,剩下一個發光二極體就是這位數字所帶的小數點。數碼管結構圖如圖1 - 2所示。各段碼位與顯示段的對應關系如表1。

圖1 – 2 LED數碼管結構引腳圖
表1 各段碼位的對應關系
段碼位 D7 D6 D5 D4 D3 D2 D1 D0
顯示段 dp g f e d c b a
2、集成器件CD4511
CD4511是一個用於驅動共陰極 LED (數碼管)顯示器的 BCD 碼—七段碼解碼器,特點如下:
具有BCD轉換、消隱和鎖存控制、七段解碼及驅動功能的CMOS電路能提供較大的拉電流。可直接驅動LED顯示器。其引腳圖如圖1 — 3所示。

圖 1 — 3 CD4511 引 腳 圖
其功能介紹如下:
BI:4腳是消隱輸入控制端,當BI=0 時,不管其它輸入端狀態如何,七段數碼管均處於熄滅(消隱)狀態,不顯示數字。
LT:3腳是測試輸入端,當BI=1,LT=0 時,解碼輸出全為1,不管輸入 DCBA 狀態如何,七段均發亮,顯示「8」。它主要用來檢測數碼管是否損壞。
LE:鎖定控制端,當LE=0時,允許解碼輸出。 LE=1時解碼器是鎖定保持狀態,解碼器輸出被保持在LE=0時的數值。
A1、A2、A3、A4、為8421BCD碼輸入端。
a、b、c、d、e、f、g:為解碼輸出端,輸出為高電平1有效。
3、集成器件74LS138
74LS138 為3 線-8 線解碼器,本設計中74LS138做為對數碼管位選通COM端電路的控制,將需要顯示的數碼管的選通控制打開。

圖1 — 3 74LS138引腳圖
74LS138工作原理如下:當一個選通端(G1)為高電平,另兩個選通端( 和 )為低電平時,可將地址端(A、B、C)的二進制編碼在一個對應的輸出端以低電平譯出。
四、系統軟體設計
1、主程序流程圖如圖1 — 4所示:

圖1 — 4 主程序流程圖
2、定時器0子程序流程圖如圖1 — 5所示:

圖1 — 5 定時器0子程序流程圖

五、系統調試
1、系統功能
本系統已符合設計課程基本要求,即可以實現24小時方式;可用六位LED數碼管顯示時、分、秒;可使用按鍵開關可實現時、分調整。
除了滿足這些基本要求外,本系統還做了一些創新:
(1) 通過1功能按鍵KEY1開關可使系統具有加密功能。加密前後可通過觀察LED二極體的顯示方式來判斷。當LED做流水燈顯示方式時,為加密前的狀態;當只有LED燈中的LED2(由P0.1口控制亮滅)時,代表已對系統進行加密。
(2) 通過功能按鍵開關KEY1進入可進入時間校準系統。KEY2控制秒的校準,KEY3控制分的校準,KEY4控制時的校準。每次一有校準按鍵按下時,系統會發出不同的聲響,以提示用戶目前正在校準的是時、分、秒的哪一種。校準完成後仍然是通過功能按鍵KEY1返回時鍾顯示。
(3) 通過更改主程序中定時器的定時初值,可實現不同樣式的數字鍾顯示方式。通過實驗測得以下參數如表2所示(程序中定時參數CYCLE在以下簡稱C):
C (ms)

數碼管顯示方式 靜態 閃爍 拉幕式
(1) 可實現整點鬧鳴功能。整點到時,可短蜂鳴一次。
2、時鍾精度分析
為進一步使本次的系統做得更完美,我使用了標準的秒錶對自己設計的時間進行了精度測量。本次設計系統使用的晶振為12MHZ.數碼管顯示
00:10:00時,用秒錶測得相應的數據如表3所示:
表3:
序號 1 2 3 4 5
T(min) 10.00.5781 10.00.4787 10.00.5040 10.00.3096 9.59.2587
序號 6 7 8 9 10
T(min) 10.01.4335 10.00.2003 9.59.4556 10.01.2026 10.00.2597
序號 11 12 13 14 15
T(min) 9.58.9750 10.00.1181 10.00.9604 10.02.5060 9.59.8985
序號 16 17 18 19 20
T(min) 10.00.1081 10.01.0545 10.00.9560 10.00.7854 10.00.4355
通過計算可得數碼管顯示:00:10:00時,
秒錶測得的數值平均值為:00:10:2343 。
以上數據表明了本次系統的精度基本符合實驗課程精度要求。因為以上共有20組,測量時已去除了粗大誤差。當然,如果將測量時間加長,所測得的精度將更精確。
六、系統設計總結
本次課程從基本方案的制定,再到硬體電路的選擇,到製作電路完成,最後進行程序調試。在此期間我遇到很多困難,尤其是在做模擬時結果經常出不來。
經過仔細檢查,模擬線路是沒有錯的,可結果就是不行。但當我將實物做出來後,進行了調試,實物上卻可以出來成果。這說明了可能是模擬軟體的。經過一次又一次品嘗到了解決問題的喜悅,最終提前完成了要求的全部功能,並在空閑的時間里加入了一些創新的部分。在此次課程設計中我發現了自己知識的不足,通過一周的學習、實踐,我學到了很多東西。
通過此次課程設計的教學實踐,進一步學習、掌握單片機應用系統的有關知識,加深了解單片機的工作原理。初步掌握簡單單片機應用系統的設計、製作、調試的方法。提高動手實踐能力。通過這次對數字時鍾的設計,讓我系統的了解和學會應用單片機C語言來對所需實現的功能進行編程。
在調試時遇到了一些問題,比如,剛開始進行按鍵輸入檢測時,我們直接用萬用表測量按鍵兩端的電平,剛測時,萬用表顯示高電平,當有按鍵按下時,則萬用表顯示低電平,這說明了按鍵是正常的,但當直接用按鍵時,系統板則不能正常使用按鍵。後面重新焊接了按鍵,系統板則才能正常使用按鍵。還有,LED燈顯示模塊的上拉電阻,也是出現了同樣的情況。原先焊接時發現了電阻的管腳比之前看到的同阻值電阻管腳細。後面經過萬用表調試後,重新焊接了電阻,部里就解決了。
上述電子鍾,無論在外觀上還是功能上都實現了較為完善的設計。特別值得一提的是本系統的加密效果,可與現實生活中的數字鍾相媲美,因為有了加密效果,可以使用戶在購買時知道其產品是否是新的,還是二手貨。但本系統在定時鬧鳴時,聲音不過響應,因為我為了讓蜂鳴器鬧鳴時系統時間不受到影響,而是繼續走動,所以把鬧鳴時間控制在定時器0 1s定時裡面,所以定時時間到了時,響的時間不到1s,通過的電流過小,要解決此問題,可在蜂鳴器的放大電路中多加一級放大電路,使定時時間到了時,通過的電流足夠大以驅動蜂鳴器。亦或通過軟體設置蜂鳴,則可以正常實現蜂鳴器的功能。
七、參考文獻:
[1]崔鳳波.《數字電子技術》.大連理工大學出版社,2007.7.
[2]戴仙金.《51單片機及其C語言程序開發實例》.清華大學出版社,2008.12
[3]譚浩強.《C語言程序設計》.清華大學出版社.2007.11
[4]趙建領.《51系列單片機開發寶典》. 電子工業出版社,2007
[5]田立,馬鳴鶴.《51系列單片機開發實例》.中國電力出版社,2009.8
[6]王昊天,李海濤,王志強等.《PIC單片機原理與應用》.機械工業出版社,2010.1

附錄:
1、 系統原理圖;

2、系統PCB圖

3、源程序
/****************************Copyright (c)*************************
** File name: ShuZiZhong.c
** Last modified Date: 2009-05-22
**-----------------------------------------------------------------** Created by: 翁連益
** NO: 2006040235
** Descriptions: 單片機數字鍾
******************************************************************/
#include<reg51.h>
#define uchar unsigned char
#define uint unsigned int
#define CYCLE 1000 /*定時1ms時間 */
unsigned char i,j,k,ID; /*ID 為case 的次數 K為LED燈控制。*/
unsigned char temp;
unsigned char b,c;
uchar hour=0,min=0,sec=0; /*定義秒時分初始值*/
uchar a[6]; /*定數碼管顯示緩沖*/
uint t=0;
uint flag=0;
bit fla;
unsigned char count;
sbit KEY1=P3^0;
sbit KEY2=P3^1;
sbit KEY3=P3^2;
sbit KEY4=P3^3;
sbit LED2=P1^0;
sbit BEEP=P0^7;
void Modifytime(); /*時間調整模塊*/
void Adjust();
void scan(); /*掃描數碼模塊*/
void Time_BEEP();
void delay10ms(void) /*軟體10ms定時*/
{ unsigned char i,j;
for(i=20;i>0;i--)
for(j=248;j>0;j--); /* 軟體延時*/
}
void dely250(void)
{ unsigned char i,j;
for(i=2;i>0;i--) /* 軟體延時*/
for(j=248;j>0;j--);
}

void main()
{ TCON=0x01; /*TIMER0工作在方式1*/
TMOD=0x01;
TH0=(65536-CYCLE)/256; /*設定T0每隔1000us(1ms)中斷一次*/ TL0=(65536-CYCLE)%256;
TR0=1;
IE=0x82;
Modifytime();
while(1)
{ if (flag==100)
{
{ temp=0xfe;
P1=temp;
delay10ms()
for(k=0;k<8;k++)
{ b=temp<<k;
c=temp>>(8-k);
P1=b|c;
delay10ms();
}
for(k=0;k<8;k++)
{ b=temp>>k;
c=temp<<(8-k);
P1=b|c;
delay10ms();
}}
}
if(flag==1000) /*判斷1秒鍾到否*/
{ sec++; /*秒加一*/
Modifytime();
flag=0;
while ((min==0)&(sec==0)) { if (flag==100)
{ { BEEP=0;
BEEP=1;
} }
if (flag==600) break;
}
}
while(KEY1== 0)
{ while(1)
{
if(KEY1==0)
{
delay10ms();
if(KEY1==0)
{ ID++;
if(ID==2)
{
ID=0;
}
while(KEY1==0);
}
}
switch(ID)
{ case 0: Adjust();
break;
case 1:
LED2=0;
if(flag==1000) /*判斷1秒鍾到否*/
{ sec++; /*秒加一*/
Modifytime();
flag=0; while ((min==0)&(sec==0))
{ if (flag==100)
{ { BEEP=0;
BEEP=1;
}
}
if (flag==600) break;
}} break;
}
}
}}
}

void Modifytime() /*調整時間子程序*/
{ uchar temp;
temp=sec; /*uchar temp=sec;*/
sec%=60;
min+=temp/60; /*求余*/
temp=min;
min%=60;
hour=(hour+temp/60)%24;
a[0]=(sec%10); /*調整過的時間送到顯示緩沖中*/
a[1]=(sec/10); /*對於秒計數單元中的數據要把它十位數和個數分開,方法仍採用對10整除和對10求余。 */
a[2]=(min%10); /*對於分計數單元中的數據要把它十位數和個數分開,方法仍採用對10整除和對10求余。 */
a[3]=(min/10);
a[4]=(hour%10); /*對於時計數單元中的數據要把它十位數和個數分開,方法仍採用對10整除和對10求余。 */
a[5]=(hour/10);
}
void scan( ) /*掃描6個數碼管子程序*/
{ static uchar x;
x++;
if(x>5) x=0; /*6個數碼管都掃描過了則重新開始*/
P0=x|(a[x]<<3); /*選中需要掃描的數碼管並送數據*/
}

void Timer0Int() interrupt 1 using 2 /*中斷定時 */
{ t++;
if(t==100) { flag=100;
}
else if(t==200)
{ flag=200;
}
else if(t==600)
{ flag=600;
}
else if (t==1000)
{ flag=1000;
t=0;
}
else
flag=0;
scan();
TH0=(65536-CYCLE)/256;
TL0=(65536-CYCLE)%256;
}

void Adjust()
{ while(1)
{ if(KEY2==0)
{ for(i=40;i>0;i--) /*248*2us*5=2480=2.5ms 軟體延時*/
for(j=248;j>0;j--);
if(KEY2==0)
{
sec++;
for(count=200;count>0;count--)
{
BEEP=~BEEP;
dely250();
}
if(sec==60)
{ sec=0;
}
a[0]=(sec%10);
a[1]=(sec/10);
while(KEY2==0);
}
}
if(KEY3==0)
{ for(i=16;i>0;i--) /* 軟體延時*/
for(j=248;j>0;j--);
if(KEY3==0)
{
min++;
for(count=200;count>0;count--)
{
BEEP=~ BEEP;
dely250();
}
for(count=200;count>0;count--)
{
BEEP =~ BEEP;
dely250();
dely250();
}

if(min==60)
{
min=0;
}
a[2]=(min%10);
a[3]=(min/10);
while(KEY3==0);
}
}

if(KEY4==0)
{ for(i=40;i>0;i--) /* 軟體延時*/ for(j=248;j>0;j--);
if(KEY4==0)
{
hour++;
for(count=200;count>0;count--)
{
BEEP =~BEEP;
dely250();
dely250();
}
if(hour==24)
{
hour=0;
}
a[4]=(hour%10);
a[5]=(hour/10);
while(KEY4==0);
}
}
}
}

㈡ 單片機實驗

1、
MOV R0,#20H
MOVX A,@R0
MOV 20H,A
2、
MOV DPTR,#2000H
MOVX A,@DPTR
MOV 20H,A
3、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV 20H,A
4、
MOV DPTR,#2000H
CLR A
MOVC A,@A+DPTR
MOV B,A
MUL AB
MOV R7,A
MOV R6,B;(溢出部分送R6)
5、高八位?低八位?什麼意思?
地址高八位DPH,地址第八位DPL
MOV DPH,#20H
MOV DPL,#00H

㈢ 單片機實驗「定時/計數器及中斷」的一些問題

1.1)主程序各行作用如下:
第一行:設置定時器模式
第二行:設置定時器高位寄存器初值
第三行:設置定時器低位寄存器初值

第四行:T0定時器中斷使能
第五行:總中斷使能

第六行:打開T0定時器

第七行:死循環(主程序停留在此行)
主程序整體實現的功能:初始化定時器T0
1.2)void Timer0_Int(void)是定時器0中斷函數,每行作用如下:
第一行:重新設定定時器高位寄存器初值
第二行:重新設置定時器低位寄存器初值
第三行:如果P1_0 IO口是高電平則改為低電平,如是低電平改為高電平

整體實現的功能:P1_0 IO口高低電平1秒切換一次

媽呀,這么多問題,網上找找,應該有的

㈣ 單片機實驗

沒有電路,看程序,有些虛無縹緲的感覺。

㈤ 急求:單片機實驗

:
ORG 0030H
MOV 30H, #34H
MOV 31H, #56H
MOV 32H, #23H
MOV 33H, #90H
MOV 34H, #32H
MOV 35H, #68H
MOV 36H, #09H
MOV 37H, #75H
CALL SORT
SJMP $
;-----------------------------------------------------
SORT: ;最簡短、高效的排序程序.
MOV B, #7 ;第一輪排序時,比較7次.
S1: MOV R0, #30H ;數據區的起始地址.
MOV R7, B
CLR PSW.5 ;清除"交換"標志位.
S2: MOV A, @R0 ;取前一個數.
INC R0
CLR C
SUBB A, @R0 ;減後一個數,前<後時,Cy=1
S3: JC S4 ;有借位時,不用交換,轉移.
MOV A, @R0 ;取後一個數,准備交換.
DEC R0
XCH A, @R0 ;交換到前一個.
INC R0
XCH A, @R0 ;交換到後一個.
SETB PSW.5 ;設定"交換"標志位.
S4: DJNZ R7, S2 ;繼續本輪比較.
JNB PSW.5, ENDS ;如本輪沒有進行過交換,可提前結束.
DJNZ B, S1 ;下一輪,比較次數少一次.
ENDS:
RET
;-----------------------------------------------------
END

閱讀全文

與大工軟院單片機實驗4相關的資料

熱點內容
android手機系統源碼 瀏覽:885
易語言遞歸演算法 瀏覽:284
中國有出什麼加密幣嗎 瀏覽:530
加密程序不小心刪除 瀏覽:415
清除空文件夾的代碼 瀏覽:608
相冊視頻水印怎麼去掉的app 瀏覽:616
雞啄米c編程入門 瀏覽:826
iphone手機視頻如何加密或隱藏 瀏覽:289
車床一個軸的編程 瀏覽:6
任何APP都借不了款怎麼辦 瀏覽:362
linux刷新命令 瀏覽:518
解壓配音的小視頻 瀏覽:652
phptable頁 瀏覽:813
人工智慧怎麼擺脫演算法 瀏覽:72
思科顯示配置命令 瀏覽:411
網上為什麼對程序員這么多評論 瀏覽:84
app續費怎麼算 瀏覽:775
安卓手機怎麼把相冊傳到蘋果 瀏覽:261
高中信息技術演算法教案 瀏覽:245
百戰程序員職業 瀏覽:606