51單片機最小系統_第1頁
51單片機最小系統_第2頁
51單片機最小系統_第3頁
51單片機最小系統_第4頁
51單片機最小系統_第5頁
已閱讀5頁,還剩24頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、51系列單片機最小系統設計與調試實驗實驗指導書 目錄一:實驗目的2二:原理2三:實訓任務.3四:最小系統的構成3五:程序7六:心得體會7一:實驗目的1. 了解單片機的基本工作原理2. 學習并掌握相關軟件的使用方法(Protel、keil)2. 掌握單片機片內程序存儲器下載方法3. 掌握單片機程序設計(匯編及C51)二:原理1、什么是單片機單片微型計算機簡稱單片機,是典型的嵌入式微控制器(Microcontroller Unit),常用英文字母的縮寫MCU表示單片機,它最早是被用在工業控制領域。單片機由芯片內僅有CPU的專用處理器發展而來。最早的設計理念是通過將大量外圍設備和CPU集成在一個芯片

2、中,使計算機系統更小,更容易集成進復雜的而對體積要求嚴格的控制設備當中。用專業語言講,單片機就是在一塊硅片上集成了微處理器、存儲器及各種輸入/輸出接口的芯片。2、最小系統的概念單片機最小系統,或者稱為最小應用系統,是指用最少的元件組成的單片機可以工作的系統. 對51系列單片機來說,單片機+晶振電路+復位電路,便組成了一個最小系統.但是一般我們在設計中總是喜歡把按鍵輸入、顯示輸出AT89C51高性能8位單片機功能AT89C51提供以下標準功能:8K字節Falsh閃速存儲器,256字節內部RAM,32個I/O口線,3個16位定時/計數器,一個6向量兩級中斷結構,一個全雙工串行通信口,片內震蕩器及時

3、鐘電路,同時AT89C51可降至0HZ的靜態邏輯操作,并支持兩種軟件可選的節電工作模式。空閑方式停止CPU的工作,但允許RAM,時/計數器,串行通信口及中斷系統持續工作。掉電方式保存RAM中的內容,但震蕩器停止工作并禁止其他所有部件工作直到下一個硬件復位。主要功能特性: 兼容MCS51指令系統                  4k可反復擦寫(>1000次)Flash ROM  3

4、2個雙向I/O口 8個中斷源  三個16位可編程定時/計數器 2.7-6.V的寬工作電壓范圍  時鐘頻率0-24MHz128x8bit內部RAM  五個外部中斷源 兩個串行中斷  可直接驅動LED 兩級加密位  低功耗睡眠功能 內置一個模擬比較放大器  可編程UARL通道 軟件設置睡眠和喚醒功能等加到上述電路中,成為小系統三:實訓任務.1)認識MCS-51的ROM及片外RAM空間:認識51系列單片機的程序存儲器(RO

5、M)的空間范圍;匯編指令編碼在ROM中存儲形式;掌握指令編碼和指令編碼所在地址的概念;了解51系列單片機的程序存儲器(ROM)固定地址的用途。認識51系列單片機的片外數據存儲器(片外RAM)的地址空間范圍;了解51系列單片機的片外數據存儲器的用途;重點掌握片內片外訪問存儲器的指令。(2)認識MCS-51片內RAM空間:認識51系列單片機片內隨機存儲器(片內RAM)的空間范圍;認識51系列單片機片內隨機存儲器的區域劃分;掌握字節地址和位地址的概念;了解R0R7寄存器與字節地址的關系。重點掌握MCS-51系列單片機四個口的用法的位操作。(3)MCS-51匯編語言設計(編碼轉換):用MCS-51匯編

6、指令進行程序設計。將四位BCD碼化為十六位二進制數。(或 將四位十六進制數轉化為BCD碼)。要求:在PC機上調試,程序可正確運行并上交源程序清單及程序說明。(4)鍵盤輸入電路設計/動態顯示電路設計:在實訓過程中要求設計按鍵輸入電路、設計顯示電路,并畫出電路圖并編寫按鍵輸入子程序。重點掌握硬件電路的設計及通過編程對電路的控制。(5)單片機最小系統設計:單片機最小系統的設計是單片機應用系統設計及開發的基礎,通過單片機最小系統設計,使學生對所學的單片機原理及應用課程有更深的理解。要求:提供電路圖和程序清單。重點掌握硬件電路的設計及過程控制。(6)基于單片機的應用系統設計:設計出實現某控制目的的應用系

7、統是本實訓課的最終實訓的結果。實訓要求中包括單片機最小系統的設計,按鍵輸入電路設計,顯示電路的設計,及應用系統的軟件編程。四:最小系統的構成1、時鐘和時鐘電路單片機內部具有一個高增益反相放大器,用于構成振蕩器。通常在引腳XTALl和XTAL2跨接石英晶體和兩個補償電容構成自激振蕩器,系統時鐘電路結構如圖2、復位和復位電路單片機小系統采用上電自動復位和手動按鍵復位兩種方式實現系統的復位操作。上電復位要求接通電源后,自動實現復位操作。手動復位要求在電源接通的條件下,在單片機運行期間,用按鈕開關操作使單片機復位。復位電路結構如圖3所示。上電自動復位通過電容C3充電來實現。手動按鍵復位是通過按鍵將電阻

8、R2與VCC接通來實現。3、鍵盤和鍵盤電路.4、顯示電路系統設置了6個LED數碼管,單片機提供段碼信號,低電平有效,輸出端通過限流電阻與數碼管的段碼數據線相連,用來送出LED數碼管的段碼數據信號。單片機提供位選信號,當某位輸出低電平時,與此相連的開關三極管導通,對應的數碼管點亮,使用三極管用來增強信號的驅動能力 1、 USB下載電路與USB接口端電路USB下載電路USB接口電路DA與AD轉換電路DA轉換就是數模轉換,指為把數字信號轉換為信息基本相同的模擬信號而設計的處理過程;AD轉換就是模數轉換,就是把模擬信號轉換成數字信號而設計的處理過程。DA轉換電路AD轉換電路五:程序(見附頁)六:心得體

9、會經過一周的實訓,我們對單片機最小系統有了更深的認識,認識到理論與實踐的區別,對課本的知識點有了進一步的梳理,我們認識到自身在實際操作和動手能力方面的不足,雖然整個實習過程充滿了波瀾和不確定性,但是我們還是按時的完成的任務。這次的實訓是我們整個學期學習知識的一次總結,我們認識到各個學科之間的聯系,同時還練習了我們的實際動手能力,編程能力,以及團隊協作能力,對我們今后的發展有很大的幫助。這次的實訓對我們也是一個很大的挑戰,時間緊,而且我們對所學的知識掌握的也不是很牢靠,所以這次的報告難免會出現很多瑕疵,希望老師能給予批評和指導。 附頁#include<reg52.h>#include

10、<intrins.h>#define uint unsigned int#define uchar unsigned charuint temp,tempH,tempL;uchar aa=0,xianshi=0,a=0,flag=0,num=0,flag_get=0;uchar dofly=0xed,0x48,0xe6,0x6e,0x4b,0x2f,0xaf,0x68,0xef,0x6f,0xeb,0x8f,0xa5,0xce,0xa7,0xa3;/uchar wei=0xfb,0xf7,0xef,0xdf;uchar str4=0xed,0xed,0xed,0xed,m=0xed

11、,n=0,b=0,x1,x2,x3,x4; /矩陣變量sbit dula=P26;sbit wela=P27;sbit DQ = P22; / 定義DQ引腳為P2.2sbit key1=P34; /定義IO口sbit key2=P35;sbit key3=P36;sbit key4=P37; sbit led=P25; /LED鎖存/延時函數 void delay(uint z)uint x,y;for(x=z;x>0;x-)for(y=110;y>0;y-);/*-矩陣按鍵-*/uchar keycan() /鍵盤掃描函數 uchar cord_h,cord_l; /行列值中間變

12、量P3=0x0f; /行線輸出全為0cord_h=P3&0x0f; /讀入列線值if(cord_h!=0x0f) /先檢測有無按鍵按下 delay(100); /去抖 if(cord_h!=0x0f) cord_h=P3&0x0f; /讀入列線值 P3=cord_h|0xf0; /輸出當前列線值 cord_l=P3&0xf0; /讀入行線值 P3=0x0f; while(P3!=0x0f);/松手檢測 switch(cord_h+cord_l) case 0x77:m=dofly0;n+;break;/0 按下相應的鍵顯示相對應的碼值 case 0x7b:m=dofly

13、1;n+;break;/1 case 0x7d:m=dofly2;n+;break;/2 case 0x7e:m=dofly3;n+;break;/3 case 0xb7:m=dofly4;n+;break;/4 case 0xbb:m=dofly5;n+;break;/5 case 0xbd:m=dofly6;n+;break;/6 case 0xbe:m=dofly7;n+;break;/7 case 0xd7:m=dofly8;n+;break;/8 case 0xdb:m=dofly9;n+;break;/9 case 0xdd:m=dofly10;n+;break;/a case 0

14、xde:m=dofly11;n+;break;/b case 0xe7:m=dofly12;n+;break;/c case 0xeb:m=dofly13;n+;break;/d case 0xed:m=dofly14;n+;break;/e case 0xee:m=dofly15;n+;break;/f return(n);/* 數碼管顯示 */void display(void) uchar k; if(xianshi=1) b=k % 4; strb=m; k=keycan(); switch(b) case 0: /左邊第一位每間隔十次掃描 x1+; break; case 1: /左

15、邊第二位每間隔十次掃描 x2+; break; case 2: /左邊第三位每間隔十次掃描 x3+; break; case 3: /左邊第四位每間隔十次掃描 x4+; break; default:break; if(x1>=20|x2>=20|x3>=20|x4>=20) x1=0;x2=0;x3=0;x4=0; if(x1<=10) wela=1; P0=0xfb; wela=0; P0=0xff; dula=1; P0=str1; dula=0; delay(5);/點亮第一位數碼管 if(x2<=10) wela=1; P0=0xf7; wela=

16、0; P0=0xff; dula=1; P0=str2; dula=0; delay(5); /點亮第二位數碼管 if(x3<=10) wela=1; P0=0xef; wela=0; P0=0xff; dula=1; P0=str3; dula=0; delay(5); /點亮第三位數碼管 if(x4<=10) wela=1; P0=0xdf; wela=0; P0=0xff; dula=1; P0=str0; dula=0; delay(5); /點亮第四位數碼管 if(xianshi!=1) x1=0;x2=0;x3=0;x4=0; /*/void key() /獨立按鍵 P

17、3=0xff; if(key1=0) /按鍵掃描 delay(5); /消抖 if(key1=0) xianshi=1; if(key2=0) delay(5); /消抖 if(key2=0) xianshi=2; if(key3=0) delay(5); /消抖 if(key3=0) xianshi=3; a=0; if(key4=0) delay(5); /消抖 if(key4=0) xianshi=4; a=0; void zuo() led=1;switch(a)case 0:P1=0xfe;break;case 1:P1=0xfd;break;case 2:P1=0xfb;break

18、;case 3:P1=0xf7;break;case 4:P1=0xef;break;case 5:P1=0xdf;break;case 6:P1=0xbf;break;case 7:P1=0x7f;break;void you()led=1;switch(a)case 7:P1=0xfe;break;case 6:P1=0xfd;break;case 5:P1=0xfb;break;case 4:P1=0xf7;break;case 3:P1=0xef;break;case 2:P1=0xdf;break;case 1:P1=0xbf;break;case 0:P1=0x7f;break;/

19、*/* 延時函數 */*/void delays(unsigned int i)/延時函數 while(i-);/*/* 初始化 */*/void Init_DS18B20(void) unsigned char x=0; DQ = 1; /DQ復位 delays(8); /稍做延時 DQ = 0; /單片機將DQ拉低 delays(80); /精確延時 大于 480us DQ = 1; /拉高總線 delays(10); x=DQ; /稍做延時后 如果x=0則初始化成功 x=1則初始化失敗 delays(5);/*/* 讀一個字節 */*/unsigned char ReadOneChar(

20、void)unsigned char i=0;unsigned char dat = 0;for (i=8;i>0;i-) DQ = 0; / 給脈沖信號 dat>>=1; DQ = 1; / 給脈沖信號 if(DQ) dat|=0x80; delays(5); return(dat);/*/* 寫一個字節 */*/void WriteOneChar(unsigned char dat) unsigned char i=0; for (i=8; i>0; i-) DQ = 0; DQ = dat&0x01; delays(5); DQ = 1; dat>&

21、gt;=1; delays(5);/*/* 讀取溫度 */*/unsigned int ReadTemperature(void)unsigned char a=0;unsigned int b=0;unsigned int t=0;Init_DS18B20();WriteOneChar(0xCC); / 跳過讀序號列號的操作WriteOneChar(0x44); / 啟動溫度轉換delays(200);Init_DS18B20();WriteOneChar(0xCC); /跳過讀序號列號的操作 WriteOneChar(0xBE); /讀取溫度寄存器等(共可讀9個寄存器) 前兩個就是溫度a=

22、ReadOneChar(); /低位b=ReadOneChar(); /高位b<<=8;t=a+b;return(t);void close() /關閉數碼管dula=1;P0=0xff;dula=0;wela=1;P0=0xff;wela=0;void display1(void)close();P1=0xff;if(flag_get=1)temp=ReadTemperature();elsetemp=temp;tempH=temp>>4; tempL=temp&0x0F;tempL=tempL*6/10;/小數近似處理 wela=1; P0=0xfb; wela=0; P0=0xff; dula=1; P0=dofly(t

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論