1.1?實習目的
了解單片機最小系統;
了解keil軟件操作,程序下載及調試方法;
掌握單片機外部電路使用;
應用單片機開發板進行實驗開發;
1.2?單片機型號及特性
1、AT89S51單片機功能及特點
AT89S51采用40引腳雙列直插封裝(DIP)形式,內部由CPU,4kB的ROM,256 B的RAM,2個16b的定時/計數器TO和T1,4個8 b的工/O端I:IP0,P1,P2,P3,一個全雙功串行通信口等組成。特別是該系列單片機片內的Flash可編程、可擦除只讀存儲器(E~PROM),使其在實際中有著十分廣泛的用途,在便攜式、省電及特殊信息保存的儀器和系統中更為有用。AT89S51提供了高度靈活和低成本的解決辦法。充分利用他的片內資源,即可在較少外圍電路的情況下構成功能完善的超聲波測距系統。
2、STC89C52單片機功能及特點 STC89C52是由8K可反復擦寫Flash ROM,32個雙向I/O口,256x8bit內部RAM,3個16位可編程定時/計數器中斷,時鐘頻率0-24MHz,2個串行中斷,可編程UART串行通道,2個外部中斷源,共6個中斷源,2個讀寫中斷口線,3級加密位,低功耗空閑和掉電模式,軟件設置睡眠和喚醒功能。該器件采用ATMEL搞密度非易失存儲器制造技術制造,與工業標準的MCS-51指令集和輸出管腳相兼容。
1.3?單片機開發板
1、復位電路
在電路中,使用電阻給電容充電,使電容的電壓緩慢上升一直到VCC,在還沒有到VCC時,芯片復位腳近似低電平,但是芯片復位,接近VCC時,芯片復位腳近高電平,導致芯片停止復位,此時復位完成,整個電路循環運行.這個電路就叫做復位電路。開關復位電路如上圖所示。 在電路上電時候或電壓波動不穩定的時候,當給單片機上電那一瞬間,電壓有在幾微秒內(有的是幾毫秒內)不是直接跳變到5V的而是一個直線上升的階段,這時候,單片機不能正常工作,需要復位電路給它延時以等到電壓穩定。這叫上電復位。
圖1
2、晶振電路
晶振使用12MHZ。時鐘周期是機器周期的12倍,機器周期是晶振頻率的倒數,1/12MHz = 1/12us那么時鐘周期就是12*(1/12us)=1us。單片機晶振提供的時鐘頻率越高,那么單片機運行速度就越快,單片機的一切指令的執行都是建立在單片機晶振提供的時鐘頻率。晶振的兩端并聯上合適的電容它就會組成并聯諧振電路。這個并聯諧振電路加到一個負反饋電路中就可以構成正弦波振蕩電路,也就是晶振電路。
圖2
3、鍵盤和中斷
鍵盤掃描原理:
檢測時,先送一列為低電平,其余幾列全為高電平,然后立即輪流檢測一次各行是否有低電平,若檢測到某一行為低電平,則我們便可確認當前被按下的鍵是哪一行哪一列的,用同樣的方法輪流送各列一次低電平,輪流檢測一次各行是否變成低電平,這樣即可檢測完所有的按鍵,當有鍵被按下時便可判斷出按下的鍵是哪一個鍵。
圖3
中斷原理:
⑴?當單片微機內部或外部有中斷申請時,CPU能及時響應中斷,停下正在執行的任務,轉去處理中斷服務子程序,中斷服務處理后能回到原斷點處繼續處理原先的任務; ⑵?當有多個中斷源同時申請中斷時,應能先響應優先級高的中斷源,實現中斷優先級的控制; ⑶?當低優先級中斷源正在享用中斷服務時,若這時優先級比它高的中斷源也申請中斷,要求能停下低優先級中斷源的服務程序轉去執行更高優先級中斷源的服務程序,實現中斷嵌套,并能逐級正確返回原斷點處。
4、數碼管
靜態顯示驅動原理:
靜態驅動也稱直流驅動。靜態驅動是指每個數碼管的每一個段碼都由一個單片機的I/O口進行驅動。靜態驅動的優點就是編程簡單,顯示亮度高,缺點是占用I/O口多。實際應用時必須增加譯碼驅動器進行驅動,增加了硬件電路的復雜性。
動態顯示驅動原理:
數碼管動態顯示接口是單片機中應用最為廣泛的一種顯示方式之一,動態驅動是將所有數碼管的8個顯示筆劃"a,b,c,d,e,f,g,dp"的同名端連在一起,另外為每個數碼管的公共極COM增加位選通控制電路,位選通由各自獨立的I/O線控制,當單片機輸出字形碼時,所有數碼管都接收到相同的字形碼,但究竟是那個數碼管會顯示出字形,取決于單片機對位選通COM端電路的控制,所以我們只要將需要顯示的數碼管的選通控制打開,該位就顯示出字形,沒有選通的數碼管就不會亮。通過分時輪流控制各個數碼管的的COM端,就使各個數碼管輪流受控顯示,這就是動態驅動。在輪流顯示過程中,每位數碼管的點亮時間為1~2ms,由于人的視覺暫留現象及發光二極管的余輝效應,盡管實際上各位數碼管并非同時點亮,但只要掃描的速度足夠快,給人的印象就是一組穩定的顯示數據,不會有閃爍感,動態顯示的效果和靜態顯示是一樣的,能夠節省大量的I/O端口,而且功耗更低。
圖4
第2章?單片機應用系統軟件
2.1?STC下載軟件
本軟件不需要安裝,只要直接點擊這個圖標即可。
MCU Type 選擇STC89C52RC 將生成的文件Open File ?然后我的電腦點擊右鍵找到管理設備管理器端口然后看顯示的是哪個COM口。最后點擊Download 單片機的開關在顯示連接時再打開。
2.2Keil軟件
點開圖標UV3;
點擊add close即可在界面上編譯即可。?
2.3?外部電路驅動
1、串口
串行接口是一種可以將接受來自CPU的并行數據字符轉換為連續的串行數據流發送出去,同時可將接受的串行數據流轉換為并行的數據字符供給CPU的器件。一般完成這種功能的電路,我們成為串行接口電路。計算機通信是將計算機技術和通信技術的相結合,完成計算機與外部設備或計算機與計算機之間的信息交換 。可以分為兩大類:并行通信與串行通信。
并行通信通常是將數據字節的各位用多條數據線同時進行傳送 。
并行通信控制簡單、傳輸速度快;由于傳輸線較多,長距離傳送時成本高且接收方的各位同時接收存在困難。 串行通信是將數據字節分成一位一位的形式在一條傳輸線上逐個地傳送。
串行通信的特點:傳輸線少,長距離傳送時成本低,且可以利用電話網等現成的設備,但數據的傳送控制比并行通信復雜。?? 異步通信是指通信的發送與接收設備使用各自的時鐘控制數據的發送和接收過程。為使雙方的收發協調,要求發送和接收設備的時鐘盡可能一致。? 異步通信的數據格式?:
異步通信的特點:不要求收發雙方時鐘的嚴格一致,實現容易,設備開銷較小,但每個字符要附加2~3位用于起止位,各幀之間還有間隔,因此傳輸效率不高。
同步通信時要建立發送方時鐘對接收方時鐘的直接控制,使雙方達到完全同步。此時,傳輸數據的位之間的距離均為“位間隔”的整數倍,同時傳送的字符間不留間隙,即保持位同步關系,也保持字符同步關系。
2、定時器
定時/計數器的工作原理:
加1計數器輸入的計數脈沖有兩個來源,一個是由系統的時鐘振蕩器輸出脈沖經12分頻后送來;一個是T0或T1引腳輸入的外部脈沖源。每來一個脈沖計數器加1,當加到計數器為全1時,再輸入一個脈沖就使計數器回零,且計數器的溢出使TCON中TF0或TF1置1,向CPU發出中斷請求(定時/計數器中斷允許時)。如果定時/計數器工作于定時模式,則表示定時時間已到;
如果工作于計數模式,則表示計數值已滿。可見,由溢出時計數器的值減去計數初值才是加1計數器的計數值。 工作方式寄存器TMOD用于設置定時/計數器的工作方式,低四位用于T0,高四位用于T1。其格式如下:
GATE:門控位。
C/T:定時/計數模式選擇位。?????
M1M0:工作方式設置位。
TF1(TCON.7):T1溢出中斷請求標志位。
TR1(TCON.6):T1運行控制位。
TF0(TCON.5):T0溢出中斷請求標志位,其功能與TF1類同。
TR0(TCON.4):T0運行控制位,其功能與TR1類同。
3、中斷
一、中斷的概念
CPU在處理某一事件A時,發生了另一事件B請求CPU迅速去處理(中斷發生); CPU暫時中斷當前的工作,轉去處理事件B(中斷響應和中斷服務); 待CPU將事件B處理完畢后,再回到原來事件A被中斷的地方繼續處理事件A(中斷返回),這一過程稱為中斷 。 MCS-51單片機的中斷系統結構
引起CPU中斷的根源,稱為中斷源。中斷源向CPU提出的中斷請求。CPU暫時中斷原來的事務A,轉去處理事件B。對事件B處理完畢后,再回到原來被中斷的地方(即斷點),稱為中斷返回。實現上述中斷功能的部件稱為中斷系統(中斷機構)。 80C51的中斷系統有5個中斷源(8052有 6個) ,2個優先級,可實現二級中斷嵌套?。 TCON的中斷標志
IT0(TCON.0),外部中斷0觸發方式控制位。 當IT0=0時,為電平觸發方式。 當IT0=1時,為邊沿觸發方式(下降沿有效)。 IE0(TCON.1),外部中斷0中斷請求標志位。 IT1(TCON.2),外部中斷1觸發方式控制位。 IE1(TCON.3),外部中斷1中斷請求標志位。 TF0(TCON.5),定時/計數器T0溢出中斷請求標志位。 TF1(TCON.7),定時/計數器T1溢出中斷請求標志位。??????? SCON的中斷標志
RI(SCON.0),串行口接收中斷標志位。 TI(SCON.1),串行口發送中斷標志位。 中斷允許控制
EX0(IE.0),外部中斷0允許位; ET0(IE.1),定時/計數器T0中斷允許位; EX1(IE.2),外部中斷0允許位; ET1(IE.3),定時/計數器T1中斷允許位; ES(IE.4),串行口中斷允許位; EA (IE.7), CPU中斷允許(總允許)位。 中斷優先級控制
PX0(IP.0),外部中斷0優先級設定位; PT0(IP.1),定時/計數器T0優先級設定位; PX1(IP.2),外部中斷0優先級設定位; PT1(IP.3),定時/計數器T1優先級設定位; PS (IP.4),串行口優先級設定位; PT2 (IP.5) ,定時/計數器T2優先級設定位。
第3章?電子時鐘設計
3.1?基本電路 ??????????????????
數碼管
所謂的八段就是指數碼管里有八個小LED發光二極管,通過控制不同的LED的亮滅來顯示出不同的字形。數碼管又分為共陰極和共陽極兩種類型,其實共陰極就是將八個LED的陰極連在一起,讓其接地,這樣給任何一個LED的另一端高電平,它便能點亮。而共陽極就是將八個LED的陽極連在一起。其原理圖如下。
圖3-1數碼管圖
其中引腳圖的兩個COM端連在一起,是公共端,共陰數碼管要將其接地,共陽數碼管將其接正5伏電源。一個八段數碼管稱為一位,多個數碼管并列在一起可構成多位數碼管,它們的段選線(即a,b,c,d,e,f,g,dp)連在一起,而各自的公共端稱為位選線。顯示時,都從段選線送入字符編碼,而選中哪個位選線,那個數碼管便會被點亮。數碼管的8段,對應一個字節的8位,a對應最低位,dp對應最高位。所以如果想讓數碼管顯示數字0,那么共陰數碼管的字符編碼為00111111,即0x3f;共陽數碼管的字符編碼為11000000,即0xc0。可以看出兩個編碼的各位正好相反。
2.DS1302的結構和工作原理
DS1302是美國DALLAS公司推出的一種高性能、低功耗、帶RAM的實時時鐘電路,它可以對年、月、日、周日、時、分、秒進行計時,具有閏年補償功能,工作電壓為2.5V~5.5V。采用三線接口與CPU進行同步通信,并可采用突發方式一次傳送多個字節的時鐘信號或RAM數據。DS1302內部有一個31×8的用于臨時性存放數據的RAM寄存器。DS1302是DS1202的升級產品,與DS1202兼容,但增加了主電源/后背電源雙電源引腳,同時提供了對后背電源進行涓細電流充電的能力。
2.1 引腳功能及結構
DS1302的引腳排列,其中Vcc1為后備電源,VCC2為主電源。在主電源關閉的情況下,也能保持時鐘的連續運行。DS1302由Vcc1或Vcc2兩者中的較大者供電。當Vcc2大于Vcc1+0.2V時,Vcc2給DS1302供電。當Vcc2小于Vcc1時,DS1302由Vcc1供電。X1和X2是振蕩源,外接32.768kHz晶振。RST是復位/片選線,通過把RST輸入驅動置高電平來啟動所有的數據傳送。RST輸入有兩種功能:首先,RST接通控制邏輯,允許地址/命令序列送入移位寄存器;其次,RST提供終止單字節或多字節數據的傳送手段。當RST為高電平時,所有的數據傳送被初始化,允許對DS1302進行操作。如果在傳送過程中RST置為低電平,則會終止此次數據傳送,I/O引腳變為高阻態。上電運行時,在Vcc≥2.5V之前,RST必須保持低電平。只有在SCLK為低電平時,才能將RST置為高電平。I/O為串行數據輸入輸出端(雙向),后面有詳細說明。SCLK始終是輸入端。
2.2數據輸入輸出(I/O)
在控制指令字輸入后的下一個SCLK時鐘的上升沿時,數據被寫入DS1302,數據輸入從低位即位0開始。同樣,在緊跟8位的控制指令字后的下一個SCLK脈沖的下降沿讀出DS1302的數據,讀出數據時從低位0位到高位7。
2.4 DS1302的寄存器
DS1302有12個寄存器,其中有7個寄存器與日歷、時鐘相關,存放的數據位為BCD碼形式,其日歷、時間寄存器及其控制字見表1。 此外,DS1302 還有年份寄存器、控制寄存器、充電寄存器、時鐘突發寄存器及與RAM相關的寄存器等。時鐘突發寄存器可一次性順序讀寫除充電寄存器外的所有寄存器內容。DS1302與RAM相關的寄存器分為兩類:一類是單個RAM單元,共31個,每個單元組態為一個8位的字節,其命令控制字為C0H~FDH,其中奇數為讀操作,偶數為寫操作;另一類為突發方式下的RAM寄存器,此方式下可一次性讀寫所有的RAM的31個字節,命令控制字為FEH(寫)、FFH(讀)。
3.2?設計原理
編程思想
1.數據輸出
從P0口輸出段選碼,從P1口輸出位選碼,數碼管就會顯示出數字來。
2.計時功能的實現與中斷服務程序
時間的運行依靠定時中斷子程序對時鐘單元數值為進行進位調整來實現的。計數器T0打開后,進入計時,滿50ms后,重裝定時,中斷一次。中斷二十次后,滿一秒進位,滿60秒后即為1分鐘,分鐘單位進位,60分到了后,時單位進位,24小時滿后,清0;通過掃描程序送數碼管顯示出來,實現時鐘計時功能。
圖3-1 電子時鐘軟件流程圖
3.3實現方法???????????????????????????????????????
本實驗完全使用軟件實現數字時鐘。系統以AT89C52為核心,具有時間顯示功能。硬件電路包括AT89C52單片機最小系統電路,數碼管模塊。采用單片機內部的定時/計數器來實現電子時鐘。原理為:在單片機內部存儲器設三個字節分別存放時鐘的時、分、秒信息。利用定時器與軟件結合50ms秒定時中斷,產生二十次中斷,達到一秒,秒計算到60時,要軟件清零并向分進1;分計算到60時,要自己清零并向時進1;時計算到24時,要清零。這樣才能循環計時。該方案具有硬件電路簡單,性能可靠,實時性好,操作簡單,編程容易的特點。但由于每次執行程序時,定時器都要重新賦初值,所以該時鐘精度不高。而且,由于是軟件實現,當單片機不上電,程序不執行時,時鐘將不工作。 ????
3.4(1)數碼管的動態顯示?
顯示格式如10-45-10.在多位LED顯示時,為了降低成本和功耗,將所有位的段選線并聯起來,由一個8位口控制,由另一個端口進行顯示位的控制。但是,由于段選是公用的,要讓各位數碼管顯示不同的字符,就必須采用掃描方式,即動態掃描顯示方式。首先從段選線上送出字段碼,再控制位選線,字符就顯示在指定位置上,持續1~5ms時間;接下來又送出新的字段碼,按照上述過程又顯示在新的位置上,直到每一位數碼管都掃描完為止,即為一個掃描周期。由于人的視覺停留效應,因此當掃描周期小到一定程度時,人就感覺不出字符的移動或閃爍,覺得每位數碼管到一直在顯示,達到一種穩定的視覺效果。
3.5?動態掃描顯示的掃描方式有程序控制和定時中斷掃描兩種。程序控制掃描方式要占用許多CPU時間,在計算機的任務較重時,難以得到好的效果,所以在實際中常采用定時中斷掃描方式,這種方式是每隔一定時間(如1ms)顯示一位數碼管,假設有8位數碼管,顯示掃描周期為8ms,顯示效果十分良好。本次設計采用這種方法。
3.6?(2)數碼管的字型碼設計
3.7八段LED顯示器由8個發光二極管組成。基中7個長條形的發光管排列成"日"字形,另一個賀點形的發光管在顯示器的右下角作為顯示小數點用,它能顯示各種數字及部份英文字母。LED顯示器有兩種不同的形式:一種是8個發光二極管的陽極都連在一起的,稱之為共陽極LED顯示器;另一種是8個發光二極管的陽極都連在一起的,稱之為共陽極LED顯示器。共陰和共陽結構的LED顯示器各筆劃段名和安排位置是相同的。當二極管導通時,相應的筆劃段發亮,由發亮的筆劃段組合而顯示的各種字符。這里必須注意的是:很多產品為方便接線,常不按規則的方法去對應字段與位的關系,這時字形碼就必須根據接線來自行設計了。單片機上數碼管接法為共陽型,也就是相應的輸出位為0時筆段亮,則字型碼為:
第4章?實習總結
4.1?實習體會
這幾天的實習分為兩大部分,前幾天進行單片機的焊接,之后老師布置作業,進行編程調試,最后進行檢查。在對AT89C52單片機焊接和調試過程中,我學到了很多東西,無論是在單片機理論方面還是在電子器件焊接方面都取得了很大的進步。 在單片機焊接過程中注意以下幾點:
1、注意電解電容、發光二極管、蜂鳴器的正負極性不能接反、三者均是長的管腳接正極、短的管腳接負極,如接反輕則燒毀元氣件,重則發生輕微爆炸。
2、三極管8550的E、B、C、注意接法,板子上面有相應的圖形形狀。按照那個圖形焊接。
3、焊接元氣件的過程之中焊接時間應在2-4秒。焊接時間不宜過長,否則不僅會燒毀元氣件、而且易使焊點容易脆裂
4、電阻焊接過程中注意相應的阻值對應,不要焊錯。否則影響相應的電流大小。
5、排阻焊接過程之中公共端應該接VCC、其余管腳為相應的獨立端。
6、ISP插槽應該注意方向。缺口對應板子的外面、如果接反下載線將不能接好。
7、數碼管的焊接應該是有小數點的一側在下面、接反影響數碼管的顯示。
焊接的順序如下:應該先焊器件高度小的,再焊高度大的。
單片機主要包括AT89C52芯片,數碼管,蜂鳴器,發光二極管,按鍵,12864,1206,紅外接收,24c04,18b20溫度傳感器。 在實現某些功能時要對單片機引腳,內部結構,寄存器和原理有一定的了解和感官認識,它是怎樣工作的,能干什么?單片機是一門應用性和實踐性很強的學科,要是一段時間不接觸就會把學會的東西忘記,因此要經常制作一些小東西,鞏固單片機的一些知識點。
4.2設計硬件體會
雖然硬件部分有的硬件比較少,做出來的時間比較少,但在制作這些硬件的過程中仍然從某種意義上遵循著硬件開發的一些既定的程序。在設計硬件時,先將各部分硬件用PTOTEL畫出來,然后最后根據總的要求將各個部件連接在一起。硬件最好使用覆銅板將電路焊出來,最好不要使用萬用板焊接,這樣誤差比較大。在制作過程中必須注意比較細致的分析。在使用軟件進行編程時,必須結合硬件。
在元器件的布局方面,應該把相互有關的元件盡量放得靠近一些,對于那些易產生噪聲的器件、小電流電路、大電流電路開關電路等,應盡量使其遠離單片機的邏輯控制電路和儲存電路,如果可能的話,可能將這些電路另外制成電路板,這樣有利于抗干擾,提高電路工作的可靠性。
盡量在關鍵元件,如ROM、RAM等芯片旁邊安裝去耦電容。實際上,印制電路板走線、引腳連線等都可能含有較大的電感效應。大的電感可能會在VCC走線上引起嚴重的開關噪聲尖峰。防止VCC走線上開關噪聲尖峰的唯一方法,是在VCC與電源地之間安防一個合適大小的去耦電容。最好使用瓷片電容,因為這種電容具有較低的高頻阻抗,另外這種電容溫度和時間上的介質穩定性也很不錯。如果不會設計硬件電路,可以根據典型電路進行設計,然后再根據實際情況進行加各種電容、電阻等元器件。
參考文獻
[2]?華成英,童詩白?模擬電子技術基礎?2006
[3] 閆石 數字電子技術基礎 2006
[4] 謝自美 電子線路設計 1992
[5] 何利民 單片機應用系統設計 1993
[6] 付家才 單片機工程時間技術 2004.3
[7] 朱定華 單片機原理及接口技術 2002.11
[8] 劉湘濤 江世明 單片機原理與應用 2006
附錄2系統主要程序
#include?編輯:黃飛///////////////////////////////////////////////// #define uchar unsigned char #define uint unsigned int ///////////////////////////////////////////////// uint miaod,miaog,fend,feng,shid,shig; uint t,num,max,temp; //////////////////////////////////////////////// uchar code table[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x98}; uchar code wela[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}; ////////////////////////////////////////////////// void delay(uint z) //如果數碼管有顯示太快。可以開這個延時。 { uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); } //////////////////////////////////////////////// void display(uchar shig,uchar shid,uchar feng,uchar fend,uchar miaog,uchar miaod) { P1=0X00; //消隱,防止余暉 shig=temp/10; shid=temp%10; feng=max/10; fend=max%10; miaog=num/10; miaod=num%10; P1=wela[0]; P0=table[miaod]; delay(2); P1=wela[1]; P0=table[miaog]; delay(2); P1=wela[2]; P0=0xbf; delay(2); P1=wela[3]; P0=table[fend]; delay(2); P1=wela[4]; P0=table[feng]; delay(2); P1=wela[5]; P0=0xbf; delay(2); P1=wela[6]; P0=table[shid]; delay(2); P1=wela[7]; P0=table[shig]; delay(2); } void init() { TMOD=0x01; TH0=(65535-45872)/256; TL0=(65535-45872)%256; ET0=1; TR0=1; EA=1; num=0; } /*void delay(uint z) //如果數碼管有顯示太快。可以開這個延時。 { uint x,y; for(x=z;x>0;x--) for(y=100;y>0;y--); }*/ void main() { init(); while(1) { display(shig,shid,feng,fend,miaog,miaod); } } void time0() interrupt 1 { TH0=(65536-45872)/256; TL0=(65536-45872)%256; t++; if(t==20) { t=0; num++; if(num==60) { num=0; max++; if(max==60) { max=0; temp++; if(temp==24) temp=0; } } } }???????????????????????????????????????
?
評論
查看更多