




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
第一次課(4課時):【課程引入】1、課程定位:(重要)本門課程是電氣自動化專業針對電氣設備維護能力進行培養的一門專業學習領域核心課程。主要培養學生的各類傳感器的使用與維護能力、信號的采集與處理能力、電子線路的安裝與調試能力以及單片機控制與工程應用能力。2、單片機和傳感器的應用:(廣泛)1)現代生活生產中單片機和傳感器的應用:(視頻“我機器人”)2)大學生創新中單片機和傳感器的應用:(創新的相關視頻)3)電子設計競賽中單片機和傳感器的應用:(20XX年電子設計大賽題)3、單片機與傳感器技術的就業前景:(前途)4、學習資源:(條件)1)實驗實訓室等硬件環境:單片機實訓室、傳感器實訓室,測控網絡實驗室2)虛擬的軟件仿真平臺:keil匯編語言環境、proteus仿真環境。3)網絡平臺:傳感器網站,各種公開的單片機學習網站?!菊n程要求】1、課程教學的主要形式:分組教學,講、學、練、評一體,實物與虛擬交替進行。2、達到的教學目標:1)每個團隊能夠獨立的設計一個小型的測控系統(單物理量測量)、包括硬件、軟件及最終的調試。2)每個團隊具有總結匯報團隊所作工作,讓人全面了解的能力。同時每個團隊也必須達到作為一個專業團隊全面認識,公正認識其他團隊成果的能力。3)每位同學能夠達到利用匯編語言進行程序編寫的能力、能夠掌握檢測常見物理量的一般方法。4)每個人能夠達到利用網絡和資源查詢自己需要的測控相關知識的能力,可以實現自身的持續發展。3、課程考核:1)主動學習能力考核:主要采用實踐考評和卷面考評相結合,各占總成績的20%。2)團隊合作能力考核:包括任務的接受、任務的分工、任務的完成、任務的總結及呈現,主要采用過程考核的方式,根據每次任務完成的情況給予評價,占總成績的50%。3)良好的職業素養的考核:主要包括出勤,衛生等個人素質表現,占總成績的10%4、課程內容:為了達到本課程的目標,本課程分七個小的項目和一個綜合設計項目來開展,其中前六個項目主要是老師在帶領同學學習單片機和傳感器的基礎知識的同時由簡到難遞進式鍛煉同學對給定的項目和任務的設計、實踐、調試、總結的能力。每個項目占大約三次到兩次課的內容。第七個小的項目主要由學生主導,教師為輔共同來進行設計的演練。最后一個綜合設計項目基本以學生為主,教師只提供技術指導和參與最終評價。【分組】2人一小組,4到6人一大組【本次課程開始】項目一:設計單片機最小系統本項目要求在學習單片機基本硬件、軟件知識的基礎上首先在PROTEUS軟件中完成單片機最小系統的繪制與最小軟件系統的聯調,最終根據仿真實驗的結果分組利用實物搭建出實際的單片機最小控制電路,并進行程序加載和調試,從而達到初步實現單片機控制電路的能力。本項目的完成分三個小的任務來完成。本次課我們完成第一個任務即可:任務1-1繪制單片機硬件最小系統1、任務要求:在熟悉單片機硬件基本結構及單片機仿真軟件PROTEUS的基礎上,設計并繪制出單片機硬件最小系統圖。2、任務資訊:1、什么是單片機:2、AT89S51單片機內部結構包含哪幾個部分?其引腳共有多少,各具有什么功能?3、單片機硬件系統包含哪些部分?每部分有什么功能?4、PROTEUS仿真軟件中常用元件的名稱?如何繪制單片機控制電路圖?三、任務實施1、寫出單片機最小系統中使用到的元件在PROTEUS軟件中的元件名稱。項目1認識單片機任務1.1開發軟件的應用1、PROTUES軟件的應用二、單片機仿真實例運行PROTUES軟件進入下界面:1、放置元件單擊“P”按鈕,出現挑選元件對話框在對話框的KEYWORDS中輸入要挑選的元件,如輸入“AT89C51”則出現如下界面,選擇該單片機,點擊“任務1.2讓單片機動起來理論知識:1.2.1微型計算機中數的表示方法本次課要點:原碼、反碼、補碼的求法數制之間的轉換原則〖新課內容:〗一、計算機中數的表示計算機只識別和處理數字信息,數字是以二進制數表示的;它易于物理實現,同時,資料存儲、傳送和處理簡單可靠;運算規則簡單,使邏輯電路的設計、分析、綜合、方便,使計算器具有邏輯性。(一)數制及數制之間的轉換1、各種進位計數及其表示方法數字符號:0、1、2、……9——數碼。數碼的個數——基數。進位規則:逢十進一例如,十進制數,10個數碼;采用“逢十進一”30681=3×104+0×103+6×102+8×101+1×100例如,二進制數,2個數碼,采用“逢二進一”(11010100)2=1×27+1×26+0×25+1×24+0×23+1×22+0×21+0×20總之,N進制數,N個數碼,“逢N進一”二進制數與十六進制數的相互轉換a)二進制轉換十六進制:規律是:以小數點為界限,分別往前往后每四位二進制數一組進行分組,(整數部分不夠的位直接在高位補0,小數部分不夠的位在往其低位補0),之后把每一組轉換成對應得到十六進制數碼即可。b)十六進制轉換二進制:規律是:上述轉換的“逆”,即把每位十六進制數碼都轉換成對應四位二進制數,按照十六進制數正常的順序排列即可。c)十進制轉換十六進制:方法:可以先轉換成二進制數,在轉換成十六進制數(較簡單些)。有符號數表示方法1、機器數與真值機器只認識二進制數:0、1。這是因為,電路狀態常有兩個,如通、斷;高電平、低電平;…可用0、1表示。這種0、1、0、1…1在機器中的表現形式——機器數。一般為8位。機器數有:無符號數:00000000B、……11111111B即00H~FFH帶符號數:+1010110B、-1101001真值符號位和數值位:計算機中通常都是用最高位來表示一個數的符號。并且分別用“0”和“1”表示正和負。有符號數有三種表示方法。原碼、反碼和補碼。a)、原碼(PrimaryCode)正數的原碼與原來的數相同。負數的原碼符號位“置1”,數值位不變。舉例(略:+5、-5、+0、-0);原碼數的范圍:-127~+127b)、反碼(DiminishedRadixComplement)正數的反碼與原來的數相同。負數的反碼符號位“置1”,數值位按位取反得到。舉例(略:+5、-5、+0、-0);反碼數的范圍:-127~+127c)、補碼(ComplementaryCode)正數的補碼與原來的數相同。負數的補碼由它的絕對值求反加1后得到,符號位“置1”。舉例(略:+5、-5、0);數的范圍:-128~+1271.2.280C51單片機內部結構及引腳功能本次課要點:A、80C51內部結構有幾部分B、80C51引腳功能,主要包含幾個組成部分〖新課內容:〗一.80C51內部BUS內部BUS內中斷振蕩器OSC程序存儲器4KBROM數據存儲器128BRAM2×16位定時器/計數器80C51CPU可編程并行口可編程串行口外中斷一個8位的CPU一個片內振蕩器及時鐘電路4KBROM(不同型號內容不同,看書P4)128B內部RAM可尋址64KB的外部ROM和外部RAM的控制電路兩個16位定時器/計數器(Timer/Counter)21個特殊功能寄存器(SpecialFunctionRegister)4個8位并行(Parallel)I/O口一個串行口(Series)5個中斷源(Interrupt)這些我們稱為單片機的資源(Souce),單片機的應用就是怎么充分合理地利用這些資源,來解決實際中的問題。二.80C51單片機的CPUMCS-51的CPU包括兩部分:運算部件和控制器。1、運算部件運算部件組成:包括算術邏輯部件ALU、布爾處理器、累加器A、寄存器B、暫存器以及程序狀態字寄存器PSW等。累加器A:是一個8位的累加器(也可以寫為ACC),絕大部分運算和操作都同A有關。寄存器B:是專為執行乘法和除法操作而設置的,一般情況下也可以作為暫存器使用。2.控制器(Controler)控制器是單片機的神經中樞,以振蕩器的頻率位基準,產生CPU時序,對指令(Command)進行譯碼,然后發出各種控制信號,實現各種操作。三、80C51單片機的引腳及其功能P2.0P2.0P2口P2.7P0口VSSP3口RSTP1口P0.7EAVCCP0.040393231282180C51、87C5180C3118910171819201.電源(1)VCC(40)——芯片電源,接+5V;(4.5~5.5)(2)VSS(20)——電源地。2.時鐘引腳XTAL1(18)、XTAL2(19)——外接晶體振蕩或外接脈沖。(P42)3.控制線RST(9)——復位引腳。(Reset),高電平有效。EA——片內外ROM選擇EA=1,選擇片內ROM;EA=0,選擇片外ROM?!镒⒁狻铮嚎刂菩盘柧€寫法上的差別。有“非”表示低電平起作用,反之是高電平起作用。4.I/O口線P0口:8位雙向I/O口。在訪問外部存儲器時,P0口可用于分時傳送低8位地址總線和8位數據總線。能驅動8個LSTTL門。P1口:8位準雙向I/O口(“準雙向”是指該口內部有固定的上拉電阻)。能驅動4個LSTTL門。P2口:8位準雙向I/O口。在訪問外部存儲器時,P2口可用于高8位地址總線。能驅動4個LSTTL門。P3口:8位準雙向I/O口。能驅動4個LSTTL門。P3口還有第二功能。1.2.3MCS-51單片機最小應用系統--------以AT89C51為例〖課前復習:〗1、清零、取反指令的功能2、P0~P3口作為一般的輸入\輸出口使用的注意事項本次課要點:學會畫最小硬件系統2、掌握最小軟件系統〖新課內容:〗一、最小硬件系統1、最小硬件系統的組成所謂最小硬件系統是指單片機能工作所必須具備的硬件條件,它包括四個部分:1)電源芯片接上5V電源,即40腳接5V電源的正,20腳接地。2)時鐘電路18、19腳接晶體振蕩器和電容構成時鐘電路,如圖所示。3)程序存儲器選擇EA89C51片內有EEPROM,EA接“正”。4)復位電路8.2KRST8.2KRSTVCC+5V+5V+5V4031AT89C5119181920EA10μF6MHz20P2、介紹幾個概念時鐘周期:系統晶振頻率的倒數狀態周期:2倍的時鐘周期★機器周期:12倍的時鐘周期指令周期:指CPU執行一條指令占用的時間指令字節:指令占用存儲空間的長度3、MCS-51復位的條件及復位后狀態復位條件:在9引腳上加兩個機器周期以上的高電平復位后狀態◆復位后PC值為0000,程序從頭運行◆大部分的SFR被置為0◆P0~P3口被置為FFH◆SP被置為07H4、如何檢查最小硬件系統◆有無+5V電源◆31引腳是否為+5V◆9引腳正常工作應為低電平◆時鐘引腳電壓用數字表測量18、19引腳電壓約為1.7V~2.9V之間用模擬表測量18引腳電壓約為1.7V~2.9V之間19引腳電壓只有零點幾伏習題:1、單片機有哪些主要的內部資源?2、繪制出單片機最小硬件電路(以AT89S51為例)3、單片機復位條件?4、理解時鐘頻率、時鐘周期、機器周期、指令周期和指令字節的概念。5、說出AT89S51單片機系統復位后片內各寄存器的狀態。1.2.4AT89S51單片機的存儲器配置方式采用哈佛結構,程序存儲器和數據存儲器是分開的,它們有各自的尋址系統、控制信號和功能,并且有不同的操作指令。程序存儲器主要用來存放程序和表格常數,數據存儲器主要用來存放程序運行的數據和結果。AT89S51單片機的組織結構可以分為三個不同的存儲空間:☆64KB的程序存儲器(ROM),包括片內4KBROM和片外60KBROM☆64KB的外部數據存儲器(外RAM)☆256B內部數據存儲器(內RAM),分高128B和低128B。這三種不同的存儲器在物理結構上是相互獨立的,但編址有重疊,CPU是怎么處理的?它是通過不同的指令和控制信號來對其實現讀、寫功能操作的。用MOVC指令訪問ROM空間,用MOV指令訪問內部RAM,用MOVX指令訪問外部RAM。0000H0000H0FFFH0000H0FFFH1000HFFFFH外部ROM(60KB)內部ROM(4KB)EA=1外部ROM(4KB)EA=080H7FHFFH00HFFFFH0000H特殊功能寄存器(21個)內部RAM(128)外部RAM(64KB)圖1-3AT89S51存儲空間配置圖表1-1AT89S51單片機內RAM結構表地址區域功能名稱數據操作方式30H~7FH堆棧與數據緩沖區8位整體操作20H~2FH位尋址區8位整體操作或位操作00H~1FH18H~1FH工作寄存器3區8位整體操作10H~17H工作寄存器2區08H~0FH工作寄存器1區00H~07H工作寄存器0區下面介紹幾個常見的特殊功能寄存器,其余的在后面相關項目中再介紹。A.累加器Acc累加器Acc是MCS-51系列單片機中最為常見的寄存器,許多指令的操作數取自于Acc許多運算的結果存放在Acc中。乘除法指令必須通過Acc進行,累加器Acc的助記符為A。在匯編語言指令中Acc簡寫為A。B.寄存器B乘除法指令都要用到寄存器B,B也可以作為一般的寄存器使用。C.程序狀態字寄存器PSWPSW反映的是程序運行的狀態,用于存放相關標志位。對其操作時,既可字節操作也可位操作。各位的意義如下:(1)Cy-----進位標志。累加器A在執行加減運算時,如果最高位有進位或借位,單片機會自動將Cy置1,否則清0。另外Cy還是位操作累加器,指令助記符為C。(2)AC----輔助進位標志。累加器A在執行加減運算時,如果低半字節Acc.3向高半字節Acc.4有進位或借位,單片機會自動將AC置1,否則清0。(3)RS1、RS0-----工作寄存器區選擇控制位。工作寄存器區分為4個區,但每次能處于當前工作的寄存器區只能有一個??梢酝ㄟ^設置RS1、RS0這兩位的值來選擇處于當前工作狀態的工作寄存器區。RS1、RS0=00——0區(00H~07H)RS1、RS0=01——1區(08H~0FH)RS1、RS0=10——2區(10H~17H)RS1、RS0=11——3區(18H~1FH)(4)OV-----有符號數運算時的溢出標志(5)P-----奇偶標志。表示累加器A中“1”的個數的奇偶性。如果A中“1”的個數為奇數,單片機會自動將P置1,否則清0。(6)F0、F1-----用戶標志。與位尋址區的位地址功能相同,區別在于位尋址區內的位只有位地址,而F0、F1有3中表示方法:位地址D5H、D1H,位編號PSW.5、PSW.1和位定義名F0、F1。習題:說出AT89S51單片機內部128RAM的分區及其作用.如何區分位地址和字節地址?實踐操作:任務要求:在PROTUES軟件中繪制出AT89S51單片機的最小硬件電路,用P1.0引腳控制一發光二極管,調試給出的程序,使該二極管間隔亮滅,并不斷循環。(列出所需器件清單,課外焊接該電路。項目2單片機流水燈控制任務2.1MCS-51的指令格式與常用符號〖課前復習:〗內部128RAM的分區及其作用如何區分位地址和字節地址本次課要點:1、80C51單片機的指令格式2、內部RAM間的數據傳送和位操作〖新課內容:〗80C51單片機的指令格式[標號:]操作碼[(目的操作數),(源操作數)][;注釋]⑴標號:指令地址的符號表達形式。①一般用英文字母和數字組成,但是必須以字母開頭。②系統的保留字不能作標號。例如:Acc、PSW,B等等③標號必須用冒號“:”與操作碼分隔④標號是可以選擇的⑵操作碼:表示指令的操作功能。①操作碼是表示指令功能的助記符,它代表了指令 的操作功能。例如:MOV數據傳送指令的操作碼ADD加法運算指令的操作碼②操作碼是指令的必需部分,是指令的核心,不可缺少。⑶操作數:參加操作的數據或數據地址①操作數可分為目的操作數和源操作數。②操作數可用二進制數、十進制數或十六進制數表示。③操作數的個數可以是0~3個。④第1個操作數與操作碼之間用空格分隔,⑤操作數與 操作數之間用逗號“,”隔開。⑷注釋:指令功能說明。①注釋是可以選擇的,是為便于閱讀,對指令功能作的說明和注解。②注釋必須以“;”開始。二、指令中部分常用的符號Ri:工作寄存器R0和工作寄存器R1,i=0或1Rn:工作寄存器R0~R7,n=0~7@Ri:寄存器R0和R1間接尋址8位的存儲單元。Direct:8位直接地址,內部RAM的地址或SFR的地址。#data8:8位的立即數。數的范圍為0~255。Bit:位地址。片內RAM和SFR中的可尋址位。#data16:16位立即數addr16:16位目的地址,用于LJMP和LCALL指令。addr11:11位目的地址,用于AJMP和ACALL指令。rel:帶符號的8位偏移地址,用于SJMP和轉移指令。addr16、addr11、rel三個符號在具體的指令中都表現為標號的形式。DPTR:數據指針,特殊功能寄存器。DPTR是DPH、DPL的組合,DPTR存放的是16位數據,其中的高8位就是DPH中的內容,低8位就是DPL中的內容。任務2.1最小軟件系統匯編:把匯編程序翻譯成目標程序(機器語言)的過程叫匯編。分類:手動匯編和機器匯編MOVA,#30H對應的機器語言為74H30H偽指令:在匯編過程中起控制作用,但自身不產生機器碼,不屬于MCS-51指令系統,而僅僅是為匯編服務的指令。RG(起始偽指令)(Origination)格式:ORG16位地址功能:規定它下面的程序的起始地址。也就是在匯編時將它下面的程序翻譯成機器碼時,這些機器碼在程序存儲器中存放的起始地址為ORG指令指定的16位地址。注意:◆一個程序中可以有多個ORG偽指令◆ORG后面的16位地址順序是從小到大的順序◆兩條ORG指令之間存放的指令不能超過他們之間的地址范圍END(結束偽指令)格式:END功能:是匯編語言程序結束標志。在END之后的指令,匯編程序不再翻譯,因此,一個源程序只有一個END指令而且必須有一個,并且放在源程序的最后。注意:◆END必須放在程序的最后◆在程序中只能有一個有效的END3、無條件轉移指令LJMPaddr16;長轉移指令,可轉移到64KB空間內的任意位置。AJMPaddr11;短轉移指令,轉移范圍是與PC值同一2KB,可以向前或向后,超出程序匯編時將出錯。(最好不用)SJMPrel;相對轉移指令,轉移范圍是PC前后-128B~+127B,也不能超出范圍。SJMP$=H:SJMPH單片機最小軟件系統單片機的最小軟件系統,也稱為程序的一般結構。下面是滿足最小軟件系統要求的一個典型例子: ORG0000H;匯編程序開頭 LJMPSETUP;跳過中斷入口地址 ......;中斷入口地址區 ORG0030HSETUP: ......;初始化區MAIN: ......;主程序區 LJMPMAIN;主程序循環執行 ......;子程序和中斷服務程序區 END;程序結束匯編語言程序的從結構上分為6個部分:匯編程序開頭、中斷入口地址區、初始化區、主程序區、子程序和中斷服務程序區以及程序結束。在我們編寫程序時,只要將有關的程序嵌入到相應的區域即可。指令學習:(1)起始偽指令ORG(Origination)格式:ORG16位地址功能:規定它下面的程序的起始地址。也就是在匯編時將它下面的程序翻譯成機器碼時,這些機器碼在程序存儲器中存放的起始地址為ORG指令指定的16位地址。(2)結束偽指令END格式:END功能:匯編語言源程序的結束標志。在END后面的指令,匯編程序不再處理。(3)無條件轉移指令:LJMPaddr16習題:1、寫出匯編語言程序的一般結構。任務2.3內部RAM間的數據傳送和位操作操作碼:MOV(即Move的縮寫)以累加器A為目的字節的傳送指令。MOV A,Rn ;MOV A,direct ;MOV A,@Ri ;MOV A,#data ;以Rn為目的字節的傳送指令MOV Rn,A ;MOV Rn,direct ;MOV Rn,#data ;以直接地址為目的字節的傳送指令MOV direct,A ;MOV direct,Rn ;MOV direct,#data ;MOV direct1,direct2 ;MOV direct,@Ri ;以寄存器間接地址為目的字節的傳送指令MOV @Ri,A ;MOV @Ri,direct;(direct:直接的)MOV @Ri,#data ;#data#datadirectACC@RiRnI/O口結構及工作原理〖課前復習:〗80C51的指令格式、常用符號對內部RAM的數據傳送指令本次課要點:1、I/O口作為輸入輸出口的注意事項。2、如何區別bit和direct?〖新課內容:〗P0口結構及工作原理VV2內部總線寫鎖存器讀鎖存器讀引腳DQP0.X鎖存器CLKQABMUX&P0.X引腳地址/數據控制VCCV1P0口有兩種功能,一個是作為通用的I/O口;另一個是作為地址/數據總線(Bus),用于擴展外部的ROM和RAM,我們以后再研究。(1)P0口用作輸出口:控制線上信號為0,電子開關與B接通。同時與門輸出為0,V1截止。由于V1截止,輸出級處于開漏狀態,用作輸出口時,需外接上拉電阻。如果沒有上拉電阻,在輸出高電平時,V1、V2都截止,輸出引腳懸空,不能輸出高電平。用作輸入口時,也就是要把引腳上的信號讀進來。我們看一下,假設V2導通,這時不管外電路施加什么電平,都被V2短路,讀進來的始終是低電平。因此要想把它作為輸入口,必須保證V2截止,要使V2截止,需先向該端口寫入“1”,這點要特別注意。P0口的每一位可任意作為輸入或輸出。既可以用數據傳送指令來整體操作,也可用位操作指令一位一位地操作。帶負載能力:8個LSTTL電平(0.36毫安/20微安)。操作舉例(略)。V內部總線V內部總線寫鎖存器讀鎖存器讀引腳DQP1.X鎖存器CLKQP1.X引腳VCCR作為輸出口時,不需外接上拉電阻。作為輸入口時也要先向該端口鎖存器寫入“1”,然后再讀。每位也可分別用作輸入或輸出。帶負載能力:4個LSTTL門電路。3.P2口結構(同P1口)4.P3口結構(同P1口)小結:1、P0口用作輸出口時,需外接上拉電阻。而P1~P3口不要接上拉電阻2、P0~P3口作為輸入口使用,都要先向該端口鎖存器寫入“1”3、P0~P3口每位也可分別用作輸入或輸出。4、對口的操作,對字節操作用數據傳送指令,對位操作用位操作指令。5、帶負載能力P0口帶8個LSTTL門電路,而P1~P3口能帶4個LSTTL門電路二、介紹幾個指令清零與取反指令CLRA;對累加器清零CPLA;將累加器中的內容按位取反注意:清零和取反指令只能對A操作如果要對內部RAM的某個單元清零,只能用MOV30H,#02、位操作指令1)、位傳送指令MOV C,bit ;C即PSW中的CyMOV bit,C ;bit為可尋址位2)、位修正指令CLR C ;CLR bit ;清零CPL C ;CPL bit 取反;SETB C ;SETB bit ;置13)bit的形式bit可以是位編號、位地址、位定義名三種形式中的任何一種三、例題設內部RAM中各單元的內容均為FFH,執行下列程序后,寫出單元內容發生變化的單元,并寫出具體內容。SETBRS0CLRRS1MOVR1,#55HCLRRS0MOVR1,#0AAHMOVA,#40HMOVR0,#30HMOV@R0,AMOVR1,AMOV@R1,#20HMOV20H,#0SETB07HCPL08HCLR70HMOV60H.,#1如果(60H)=總結:如何區別bit和direct?一般在MOV后面,指的是direct,除了指令中含有C時,則指bit在SETBCLRCPL后都指bitCLRA,CPLA這兩條指令是對8位數據的操作任務2.3循環彩燈控制一、硬件電路在最小硬件系統基礎上,用P1口作輸出,用低電平驅動LED發光管,LED發光條件是:電壓1.8V左右,電流8~10mA。為滿足要求,電路中串接限流電阻,經計算取360Ω。電路如圖所示。360360Ω+5V8.2KRSTVCC+5V+5V+5V403189C51189181920EA10μF6MHz20P二、軟件設計軟件設計是在最小軟件系統基礎上,根據所要求的顯示方式,用位操作指令CLRP1.X/SETBP1.X,對某位口操作,也可用數據傳送指令MOVP1,#DATA,對多位口同時操作。如:設計一個由8個小燈構成的循環彩燈,要求8個小燈依次亮滅,然后重復循環程序為:ORG0000HLJMPSETUPORG0030HSETUP: CLRP1.0MOVR2,#80HDEL1:MOVR7MOVR2,#80HDEL1:MOVR7,#0FFHDEL2:DJNZR7,DEL2DJNZR2,DEL1 CLRP1.1SETBP1.1MOVR2,#80HDEL1:MOVR7MOVR2,#80HDEL1:MOVR7,#0FFHDEL2:DJNZR7,DEL2DJNZR2,DEL1SETBP1.2 CLRP1.3SETBP1.3 ……… SETBP1.7LJMPSETUPENDDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1RET三、引出指令1、NOP空操作指令2、循環轉移指令DJNZRn,rel;先執行RnRn-1,然后判斷,若Rn=0,則程序順序執行,否則就轉移,轉移到rel處,轉移范圍為-128B~+127B。DJNZdirect,rel;同上面類似。用和返回指令LCALLaddr16;長調用指令,調用子程序,子程序可在64KB空間內任意位置,同LJMP指令。ACALLaddr11;斷調用指令,調用子程序,同LJMP指令。RET;調用返回指令,子程序結束后,執行該指令程序將返回到調用子程序處繼續向下執行。上面的程序也可寫成:ORG0000HLJMPSETUPORG0030HSETUP: CLRP1.0LCALLDELAYSETBP1.0 CLRP1.1LCALLDELAYSETBP1.1 CLRP1.2SETBP1.2 CLRP1.3SETBP1.3 ……… SETBP1.7LJMPSETUPDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1RETEND注意:書寫子程序時的注意事項書寫子程序一定要有名稱(標號)書寫子程序一定要有RET返回指令參數的傳遞子程序和主程序間的關系如下圖所示:子程序2子程序2斷點主程序子程序1斷點斷點主程序子程序思考題:在循環彩燈硬件電路的基礎上,設計一個循環彩燈程序,使小燈依次點亮后熄滅,再從頭開始,重復8次。
任務2.4指令和程序設計(一)〖課前復習:〗1、循環轉移指令的功能2、子程序書寫的注意事項〖新課內容:〗一、程序:指令的有序集合要求:1、實現預定的功能2、所占用的空間字節最少3、程序執行的時間最短二、程序設計的方法1、分析問題、確定算法2、畫程序流程圖3、設計源程序三、程序的一般結構:ORG0000HLJMPSETUP……;中斷入地址……;ORG0030HSETUP:……;初始化……MAIN:……;主程序……LJMPMAIN……;子程序和中斷服務程序……END四、程序設計的方法1、順序程序設計順序程序是指按順序依次執行的程序,把完成一系列操作的指令按操作的順序組成指令序列。這樣的程序很簡單也稱簡單程序或直線程序。如上講循環彩燈的第一個程序就是順序程序。2、循環程序設計循環程序一般包括以下幾部分:1)循環初值在進入循環之前,要對循環中需要使用的寄存器或存儲器賦予規定的初值,主要是循環次數。2)循環體循環程序中要反復執行的部分,是循環結構中的主要部分。3)循環修改每執行一次循環,就要對有關參數修改,為進入下一次循環做準備。4)循環控制在程序中根據循環計數器的值或其他條件,控制循環是否應該結束。它有兩種結構形式:置初值循環控制置初值循環控制循環體循環修改NY退出Y置初值循環控制循環修改循環體N退出例、將0~15共16個立即數傳送到內部RAM30H開始的單元用順序程序設計源程序為:ORG0000HLJMPSETUPOGR0030HSETUP:MOV30H,#0MOV30H,#1MOV30H,#2MOV30H,#3MOV30H,#4MOV30H,#5……………….………………..MOV30H,#15SJMP$END引出指令1、加1指令INCA;(A)(A)+1,以下類同。INCRnINCdirectINC@RiINCDPTR例1、設(R0)=7FH;(7EH)=40H執行:INC@R0INCR0INC@R0后,(R0)=7FH;(7EH)=00H;(7FH)=41H.2、減1指令DECA;(A)(A)-1 ,以下類同。DECRnDEC@RiDECdirect例5、設(R0)=7FH,在內RAM中,(7EH)=00H,(7FH)=40H執行:DEC@R0DECR0DEC@R0結果為:(R0)=7EH,(7EH)=0FFH,(7FH)=3FH。用循環程序設計源程序為:ORG0000HLJMPSETUPOGR0030HSETUP:MOVR7,#16MOVR0,#30HMOVA,#0AA:MOV@R0,AINCAINCR0DJNZR7,AASJMP$END
任務2.5指令和程序設計(二)〖課前復習:〗1、程序的一般結構2、循序程序設計的步驟3、DJNZ、INC、DEC指令的功能〖新課內容:〗例題:首先分析前面講過的循環彩燈程序ORG0000HLJMPSETUPORG0030HSETUP: CLRP1.0;MOVP1,#11111110BLCALLDELAYSETBP1.0 CLRP1.1;MOVP1,#11111101BLCALLDELAYSETBP1.1 CLRP1.2;MOVP1,#11111011BSETBP1.2 CLRP1.3SETBP1.3;總結出這樣的規律:最低位的0依次左移了一位 ……… SETBP1.7LJMPSETUPDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1RETEND一、引出指令1.循環移位指令(1)RLA;循環左移AA7A0(2)RRA;循環右移AA7A0(3)RLCA;帶進位位的循環左移AA7A0Cy(4)RRCA;帶進位位的循環右移AA7A0Cy注意:左移相當于乘以2右移相當于除以2下面我們利用上面的循環移位指令設計前面講過的循環彩燈程序。 ORG0000H LJMPSETUP ORG0030HSETUP:MOVA,#0FEHMAIN: MOVP1,A LCALLDELAY RLA SJMPMAINDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1 RET END用循環移位指令一個循環彩燈程序,要求:8個小燈依次點亮,然后全部熄滅,然后重復循環。程序如下: ORG0000H LJMPSETUP ORG0030HSETUP: MOVA,#0FEHMAIN: MOVP1,A LCALLDELAY CLRC RLCA SJMPMAINDELAY: MOVR2,#80HDEL1:MOVR3,#0FFHDEL2:DJNZR3,DEL2DJNZR2,DEL1 RET可以看出,循環程序所用指令條數要少,占內部ROM字節較少,在程序中應盡可能編寫循環程序。循環程序可以用不同的指令編寫,關鍵選用合適的控制退出或條件判斷退出。2、比較轉移指令CJNEA,direct,rel;(C:Compare,J:Jump,N:No,E:Equle)若A=(direct),則程序順序執行,且Cy=0。否則程序轉移,轉移到標號指示的地方。若A>(direct),Cy=0,若A<(direct),Cy=1。CJNEA,#data,relCJNERn,#data,relCJNE@Ri,#data,rel其余三條指令功能與第一條類似。例題:設內部RAM30H~3FH單元中有一組數據,編程求出數值等于55H的個數,并把結果存放在50H單元中二、分支程序設計在一些情況下,常需要根據不同的條件處理不同的工作,這種程序結構稱為分支程序結構。例:編制一個循環彩燈程序,要求根據R5中內容的不同分別執行各自的程序,R5=0、1、2。 CJNER5,#0,DIS0 CJNER5,#1,DIS1 CJNER5,#2,DIS2STOP: SJMPSTOPDIS0: …… LJMPSTOPDIS1: …… LJMPSTOPDIS2: …… LJMPSTOP
任務2.6指令和程序設計(三)〖課前復習:〗1、循環移位指令的功能2、比較轉移指令的功能〖新課內容:〗提出控制要求:在單片機的P1.0引腳上接一按鍵,當鍵按下時引腳為低電平,未按下為高電平,P2口接有8個發光二極管,要求編程實現按一次鍵依次點亮一個發光管,每次只有一個發光管亮。指令學習:一、條件轉移指令(一)判A轉移指令JZrel;(J:JumpZ:Zero)判斷累加器A中的內容,看其是否為0,為0就轉移,轉移到標號指示的地方。JNZrel(N:No);與上面的指令功能類似,A中不為0轉移。(二)判位(bit)轉移指令1.JBbit,rel;對可位尋址的位進行判別,該位為1轉移,轉移到標號指示的地方。2.JNBbit,rel;對可位尋址的位進行判別,該位為0轉移,轉移到標號指示的地方。JBCbit,rel;對可位尋址的位進行判別,該位為1轉移,轉移到標號指示的地方,并且將該位清0。(三)判進位位Cy轉移指令1.JCrel;對進位Cy進行判別,C=1轉移,轉移到標號指示的地方。2.JNCrel;與上條指令功能相同,C=0轉移。例題:編程求20H單元中含有‘1’的個數,并將結果存到21H單元中分析問題:20H單元地址07H06H05H04H03H02H01H00H位地址ORG0000H LJMPSETUP ORG0030HSETUP:MOV21H,#0JNB00H,AA1INC21HAA2:JNB01H,AA3INC21H。。。。。。。。。。。 SJMP$ END思考題:利用循環程序實現上個題目的功能。二、程序書寫的兩種形式完整格式:如上面的程序就是完整格式子程序形式:AA:MOV21H,#0JNB00H,AA1INC21HAA2:JNB01H,AA3INC21H。。。。。。。。。。。RET三、堆棧操作指令1、堆棧的概念2、堆棧的原則:“先進后出,后進先出”3、堆棧指針:SP系統復位后,SP=07H,并且SP始終指向棧頂的4、堆棧的操作指令PUSHdirect;SP——SP+1,(SP)——(direct)PUSH為壓棧指令,是將指定的直接地址direct中的內容壓入堆棧。分兩步進行,先將堆棧指針SP的內容加1,指向堆棧頂的一個空單元,然后將direct中的內容送入該空單元中。POPdirect;(SP)——(direct),SP——SP-1POP為出棧指令,是將當前堆棧指針SP所指示的單元內容彈出到指定的direct中,然后將SP減1。操作過程與PUSH相反。注意:由于堆棧操作只能以直接尋址的方式來操作,所以不能以累加器A或工作寄存器Rn作操作數,若要把A中的數送入堆棧,應用PUSHACC,這里的ACC表示累加器A的直接地址是E0H。注意:1對累加器A的壓棧PUSHA╳PUSHACC√2、工作寄存器的壓棧PUSHR0╳PUSH00H(0區工作)√PUSH08H(1區工作)√3、SP的值一般設置在數據緩沖區即30H~7FH小結:1、掌握堆棧操作的原則以及堆棧操作指令的功能2、掌握條件轉移指令的轉移條件
任務2.7指令和程序設計(四)〖課前復習:〗1堆棧操作的原則2、條件轉移指令的功能〖新課內容:〗一、指令介紹交換指令:1.XCHA,Rn;2.XCHA,direct;3.XCHA,@Ri;4.XCHDA,@Ri;5.SWAPA;A中內容的高4位和低4位交換不帶進位加法指令:ADDA,Rn;(Add:);(A)(A)+(Rn)以下類同。ADDA,directADDA,#dataADDA,@Ri★加法指令應用時,必須把一個加數放在累加器A中,并且結果也放到A中帶進位加法指令:ADDCA,Rn;(A)(A)+(Rn)+(C),以下類同。ADDCA,directADDCA,#dataADDCA,@Ri例:兩個16位無符號數相加R0R1+R2R3R6R4R5程序如下:AA:MOVA,R1ADDA,R3MOVR5,AMOVA,R0ADDCA,R2MOVR4,ACLRAADDCA,#0MOVR6,ARET例:已知R0中有一個用原碼表示的數據,試求其補碼結果仍然存放在R0中分析問題:給出一個二進制數,補碼的求法,要考慮給出的數據是正數還是負數,正數的補碼等原碼,負數的補碼在反碼的基礎上加1程序如下:AA:MOVA,R0JNBACC.7,BBCPLAADDA,#1SETBACC.7MOVR0,ABB:RET帶進位減法指令:1.SUBBA,Rn;(SUB:Subtract);(A)(A)-(Rn)-(C),以下類同。2.SUBBA,direct3.SUBBA,#data4.SUBBA,@Ri★減法運算時,被減數一定放在累加器A中指令減法指令前,必須對Cy清0,用CLRC注意:INCA指令和ADDA,#1指令DECA指令和SUBBA,#1指令加1減1指令和加減法中的加1和減1指令是有區別的,主要是加1減1指令不影響標志位,特別是不影響進位標志Cy。而加減法運算中的加1和減1指令影響標志位。BCD碼調整指令DAA對加法運算結果進行BCD碼調整,主要用于BCD碼加法運算,注意不能對BCD碼減法運算結果進行調整。注意:DA指令只能跟在加法指令后面使用;調整前參與運算的兩數是BCD碼數;DA指令不能與減法指令配對使用,但可以實現對A中壓縮BCD操作。乘法和除法指令乘法指令MULAB;(Multiplie)該條指令的功能是將兩個8位無符號數相乘,兩個無符號數分別存放在A和B中,乘積為16位,低8位存放在A中,高8位存放在B中。除法指令DIVAB;(Devided)該條指令的功能是將兩個8位無符號數相除,被除數存放在A中,除數存放在B中,指令執行后,商存放A中,余數存放B中。注意:乘除法指令的執行周期為4個機器周期,參加運算的無符號數必須存放在A和B中,只有8位的乘除法指令。例:R1/R0R2分析問題:除法指令可以用減法來實現10/310–3=7……….17–3=4…………1和即為商4–3=1…………11<3……………余數程序如下:AA:MOVR2,#0BB:MOVA,R1CLRCSUBBA,R0;可以放在下面的位置MOVR1,AJCCCINCR2MOVR1,ASJMPBBCC:RET
任務2.8指令和程序設計(五)〖課前復習:〗1、加減法指令的功能及其注意事項2、乘除法指令的功能〖新課內容:〗一、指令介紹邏輯“與”運算指令ANLA,Rn(AndLogic)ANLA,@RiANLA,#dataANLA,directANLdirect,AANLdirect,#data這些指令的功能是將源操作數和目的操作數按位相與,結果送回目的操作數中。邏輯“或”運算1.ORLA,Rn;(OrLogic)2.ORLA,@Ri3.ORLA,#data4.ORLA,direct5.ORLdirect,A6.ORLdirect,#data這些指令的功能是將源操作數和目的操作數按位相或,結果送回目的操作數中。邏輯“異或”運算1.XRLA,Rn2.XRLA,@Ri3.XRLA,#data4.XRLA,direct5.XRLdirect,A6.XRLdirect,#data這些指令的功能是將源操作數和目的操作數按位相異或,結果送回目的操作數中。例:已知一單字節數存放在R0中,要求將其轉換成十進制數存放在R1R2R3中分析問題:單字節數的范圍:0~255例254屬于上面的范圍254/100商2R154/10商4R2余數5R3程序如下:AA:MOVA,R0MOVB,#100DIVABMOVR1,AMOVA,BMOVB,#10DIVABMOVR2,AMOVR3,BRET例:已知一單字節數存放在R0中,要求將其轉換成十進制數存放在R1R2中程序如下:AA:MOVA,R0MOVB,#100DIVABMOVR1,AMOVA,BMOVB,#10DIVABSWAPAADDA,BMOVR2,ARET例:已知三位BCD碼表示的十進制數存放在R0R1R2中,要求將其轉換成二進制數,存放在R2R3中。同學們考慮這個問題如何解決,如果把上個題目改成已知三位BCD碼表示的十進制數存放在R0R12中,要求將其轉換成二進制數,存放在R2R3中。問題又如何解決呢?小結:1、掌握與指令的功能及應用2、鞏固SWAP指令的應用項目3數碼管顯示廣告牌一、任務要求利用單片機控制數碼管,實現靜態顯示和動態掃描顯示。二、任務資訊1、數碼管及其使用。2、單片機并行I/O口的應用。3、循環程序、查表程序和子程序的設計與調試。LED數碼管及其顯示方式一、LED數碼管外型和引腳abcabcdefgdpcomabcdefgdp共陽型+5Vcom共陰型共陰型LED數碼管如上圖所示。正面為一個矩形,上面有七個筆畫組成的8和圓點表示的小數點,共計8個,分別用a、b、c、d、e、f、g、dp代表各個筆畫的名稱,故又稱為8“段”數碼管,每一個段內部都有一個LED發光管和他們對應。上下兩頭各有5個引腳。其中有8個引腳分別和a、b、c、d、e、f、g、dp對應,兩頭中間引腳內部是相連的,接的是8個LED的公共端(Commonality)(即數碼管的“位”),用COM表示。內部結構內部結構分為共陽型和共陰型,如上面圖所示。LED數碼管的編碼(Code)方式從LED的內部結構看,要點亮它,跟我們前面講的8個循環彩燈相似,8個小燈亮的方式不同,在數碼管上顯示不同的字符。一般用8位二進制數代表每個段。A為低位,Dp為高位,即:D7D6D5D4D3D2D1D0dpgfedcba如要顯示0,就須把對應的a、b、c、d、e、f段的LED點亮,如果用正邏輯表示,即1亮0滅,顯示0要求段的數據為3FH,同樣顯示其他字符也有對應數據表示。也就是顯示字符的編碼。下面為數碼管的正邏輯編碼:0:3FH;1:06H;2:5BH;3:4FH;4:66H;5:6DH;6:7DH7:07H;8:7FH;9:6FH。注意:共陰型數碼管于正邏輯編碼方式一致,共陽型數碼管恰好相反。二、LED數碼管靜態顯示方式LED數碼管顯示電路在單片機系統中分為靜態(StaticStage)顯示和動態(DynamicStage)顯示。1.特點:(1)靜態顯示時數碼管的段需要一個8位I/O口控制。(2)數碼管的位:接“電源”或接“地”(3)靜態顯示方式,編程簡單,但占用的I/O口線較多,dp390dp390Ω+5VP0P2最小系統P1P3a第一位第二位第四位第三位下面是其應用的例子:2.硬件電路(共陽型)P1口的數碼管是完整電路,其余口為示意電路。顯示程序(在四個數碼管上分別顯示0、1、2、3) ORG0000H LJMPSETUP ORG0030HSETUP: MOVA,#3FH CPLA MOVP1,A MOVA,#06H CPLA MOVP3,A MOVA,#5BH CPLA MOVP0,A MOVA,#4FH CPLA MOVP2,A SJMPSETUP END三、LED數碼管動態顯示方式1.特點:(1)將所有數碼管的所有相同的段連接在一起,8個段共8組,由一個8位的I/O口控制。(2)每一個數碼管的公共端由一位I/O口控制。通過分時向段送數據和位控制信號,使各數碼管輪流顯示,這種數碼管顯示方式就稱為動態掃描(Scan)電路。(3)動態顯示方式,編程相對復雜,但占用的I/O口線較少。adpadp最小系統P2············+5V+5V硬件電路(共陽型)段數據由P0口輸出,外接上拉電阻,位由P2.0~P2.3輸出,用低電平驅動三極管,三極管輸出接數碼管的公共端。三、任務實施1、用單片機控制一位數碼管,依次顯示數字0~9。(1)設計出硬件電路(在PROTUES軟件中畫出下面電路)(3)用匯編語言編寫控制程序,并在KEIL軟件中進行調試ORG0000HSTART:MOVR1,#00HNEXT:MOVA,R1MOVDPTR,#TABMOVCA,@A+DPTRMOVP0,ALCALLDELAYINCR1CJNER1,#10,NEXTLJMPSTART;延時1S的延時子程序DELAY:MOVR5,#20D2:MOVR6,#20D1:MOVR7,#248DJNZR7,$DJNZR6,D1DJNZR5,D2RETTAB:DB3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH,6FHEND2、用單片機控制四位數碼管,穩定顯示數字“0(1)設計出硬件電路(在PROTUES軟件中畫出下面電路)(3)用匯編語言編寫控制程序,并在KEIL軟件中進行調試。(數碼管為共陽型)ORG0000HLJMPSETUPORG0030HSETUP:MOV70H,#0MOV71H,#1MOV72H,#2MOV73H,#3MOVDPTR,#TABMAIN:LCALLDISLJMPMAINDIS:MOVA,70HMOVCA,@A+DPTRMOVP0,ACLRP2.0LCALLDELSETBP2.0MOVA,71HMOVCA,@A+DPTRMOVP0,ACLRP2.1LCALLDELSETBP2.1MOVA,72HMOVCA,@A+DPTRMOVP0,ACLRP2.2LCALLDELSETBP2.2MOVA,73HMOVCA,@A+DPTRMOVP0,ACLRP2.3LCALLDELSETBP2.3RETDEL:MOVR7,#80HDJNZR7,$RETTAB:DB0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90HEND項目4簡易秒表的設計一、任務要求本項目制作一個簡易秒表,利用LED數碼管顯示時間。用兩位數碼管動態顯示時間,時間范圍為0-60秒。擴展功能:用三個獨立式按鍵實現秒表的啟動、停止和復位功能。(選做)二、任務資訊1、單片機并行I/O口的應用。2、數碼管顯示,鍵盤控制技術應用。3、中斷系統的應用。4、定時計數器的使用。5、綜合應用程序的設計與調試。MCS-51中斷系統中斷(Interrupt)概述中斷的概念所謂中斷是指CPU正在處理某件事時,外部發生了某一事件(如定時器溢出),請求(Requle)CPU迅速處理(Process),CPU暫時中斷當前的工作,轉入處理所發生的事件,處理完畢后,再回到原來被中斷的地方,繼續原來的工作,這樣的過程稱為中斷。實現這種功能的部件稱為中斷系統,產生中斷的請求源稱為中斷源。2.中斷的調用過程現行程序現行程序中斷服務程序現行程序中斷服務程序現行程序現行程序現行程序二、與中斷系統有關的SFR定時/計數器控制寄存器TCON(88H)IE1IT1IE0IT08BH8AH89H88HTCON(TimeControl)的字節地址為88H,表明該寄存器的每一位可位尋址。其中:IT0:外部中斷0的觸發方式選擇位,當IT0=0時為電平觸發(LeverTriggering),IT0=1時為邊沿觸發(EdgeTriggering)。IE0:為外部中斷0的標志位。IT1:同IT0類似。IE1:同IE0類似。CPU是怎么知道中斷請求的尼?CPU會在每個機器周期的S5P2采樣外部中斷引腳,根據以下兩種情況置中斷標志:當IT0=0時,CPU查到外引腳為低電平,置“1”中斷標志,外引腳為高電平時清“0”中斷標志。當IT0=1時,CPU是根據前后兩次檢查外引腳的情況判斷是否有中斷請求,當前一次為高,后一次為低,置“1”中斷標志。其他情況不置中斷標志。CPU響應(Respond)中斷,轉向執行中斷服務程序時會自動由硬件清“0”中斷允許控制寄存器IE(A8H)IE的地址末位為8,說明它也可位尋址。EAESET1EX1ET0EX0AFHACHABHAAHA9HA8HEA:所有中斷總的控制位。(E:EnableA:All)ES:串行口中斷允許位。(E:EnableS:Series)ET1:定時/計數器1中斷允許位。EX1:外部中斷1中斷允許位。ET0:定時/計數器0中斷允許位。EX0:外部中斷0中斷允許位。中斷優先級控制寄存器IP(I:Interrupt,P:Priority)(B8H)也可位尋址。PSPT1PX1PT0PX0BCHBBHBAHB9HB8H通過對相應位設置可以改變該中斷的優先級。MCS-51中斷系統只有兩級優先級,在同優先級內中斷的優先順序為:外部中斷0、T0、外部中斷1、T1、串行口。低級中斷可以被高級中斷所打斷。MCS-51中斷嵌套如下圖所示:高級中斷程序低級中斷程序主程序高級中斷程序低級中斷程序主程序三、中斷的處理過程中斷的處理過程包括:中斷請求、中斷響應、中斷服務和中斷返回。1、中斷請求當某個中斷源要求CPU服務時,必須發出中斷請求信號。內部中斷源和外部中斷源請求的方式不同。若是外部中斷源,需要將請求信號加到該中斷的外部引腳上,CPU會在執行指令的每個機器周期內檢查外部中斷引腳,有請求信號時置“1”該中斷標志位。分為兩種情況。具體上面已詳細講過。若是內部中斷源,CPU內部的硬件電路會自動置位該中斷標志位,具體內容我們學習定時器和串行口時再講。2、中斷響應有了中斷請求,CPU也不一定會響應該中斷,要響應中斷還必須滿足一定的條件。中斷響應的條件如下:該中斷已“開中斷”。此時CPU沒有響應同級或更高級中斷。當前正處在所執行指令的最后一個機器周期。正在執行的指令不是RETI或是訪問IE、IP的指令。滿足上述條件CPU就會響應該中斷,響應中斷,在執行中斷服務程序前還要執行以下幾項操作:保護斷點(Breakpoint)地址,將斷點地址壓入堆棧。撤消(Cancel)該中斷源的中斷請求標志(串行口除外)。關閉(Close)同級中斷。將該中斷源的入口地址送入PC。執行以上幾項操作后就進入執行中斷服務程序。3、中斷服務保護現場(把斷點地址信息壓入堆棧保護)中斷服務程序主體恢復現場4、中斷返回中斷服務內容完成,現場恢復,就可以回到原來被打斷的地方繼續運行。這個過程通過執行RETI指令自動完成,主要做下面兩項工作?;謴蛿帱c地址。將響應中斷時壓入堆棧的斷點地址彈出,送入PC。開放同級中斷四、外部中斷的應用外部中斷應用需要注意以下幾個問題:1、硬件上要把中斷請求信號加到中斷引腳上。2、軟件上做三項工作提供中斷入口地址中斷的初始化(方式選擇、開中斷)編寫具體的中斷服務程序。下面以一個具體的事例說明外部中斷的應用。我們以前做過的循環彩燈,現在要求通過按一個按鈕,每按一次彩燈移一位。SS10K1K+5V360Ω最小系統P3.2+5V上圖為電路圖。按鈕信號加到中斷0的引腳P3.2,當S不按下時,P3.2引腳為高電平,按下為低電平,在按鍵的過程中P3.2引腳產生中斷請求信號。中斷觸發方式用邊沿觸發,程序如下: ORG0000H LJMPSETUP ORG0003H LJMPINT0P ORG0030HSETUP:MOVA,#0FEH SETBIT0 SETBEX0 SETBEAMAIN:SJMPMAININT0P:MOVP1,A RLA RETI END定時/計數器概述〖課前復習:〗1、外部中斷的應用步驟〖新課內容:〗定時/計數器概述80C51有兩個16位的定時/計數器,T0和T1。本質上講都是計數器。對外部事件脈沖計數就作為計數器使用對內部的機器周期計數就作為定時器使用。(對外部脈沖計數時,信號脈沖應加到相應的外引腳上T0(P3.4),T1(P3.5))他們都是加法計數器,計滿后就會溢出(Overflow),溢出時產生中斷標志。二、與定時/計數器有關的SFR1.定時/計數器工作方式控制寄存器TMOD(T:Timer,M:Mode)(89H)GATEC/TM1M0GATEC/TM1M0高4位控制T1低4位控制T0TMOD不可位尋址,高4位和低4位分別控制T1和T0。(1)M1M0——工作方式選擇位。M1M0方式功能00方式013位的計數器01方式116位的計數器10方式28位的計數器,初值自動重裝11方式3兩個8位的計數器,僅適用T0(2)C/T——計數/定時方式選擇位。C/T=1,為計數工作方式,對外部事件脈沖計數,作為計數器用(負跳變有效)。C/T=0,為定時工作方式,對內部機器脈沖計數,作定時器用。(3)GATE——門控位。一般取GATE=0,在后面的定時器工作方式結構中分析原因。TCON:定時/計數器控制寄存器(88H)TF1TR1TF0TR0IE1IT1IE0IT08FH8EH8DH8CH8BH8AH89H88HTCON可位尋址。低4位我們在中斷部分已講過,不再重復。高4位的功能與定時器有關,含義如下:TF0:定時/計數器T0溢出標志。(T:Timer,F:Flag)TR0:定時/計數器T0運行控制位。(T:Timer,R:Run)TR0=1,T0運行TR0=0,T0停止TF1:功能與TF0相同。TR1:功能與TR0相同。3.計數寄存器TH0、TL0是T0的兩個8位計數器,TH1、TL1是T1的兩個8位計數器,并且高8位數存放在TH中,低8位數存放在TL中。三、定時/計數器的工作方式1.方式0(自學)控制1控制1OSC÷12+TL0TH0(8)(8)TF0T0TR0INT0GATEC/T0中斷當M1M0=01時,定時/計數器工作在方式1,邏輯結構如上圖所示。內部為16位計數器,有TL0作低8位和TH0作8位,16位計滿溢出,溢出置位TF0。最大計數值為216=65536。原理分析總結:GATE=0,TR0=1,控制開關閉合,開始計數。GATE=1,同時TR=1INT0=1時,才開始運行。總上分析,得出取GATE=03.方式2自動重裝自動重裝控制1OSC÷12+TL0(8)TF0T0TR0INT0GATEC/T0中斷TH0(8) 當M1M0=10時,定時/計數器工作在方式2,邏輯結構如上圖所示。定時/計數器工作為8位,能自動恢復定時/計數器初值。即用TL0計數,計滿溢出時自動將TH0中的值送入TL0,自動恢復初值。計數的最大值為256。初值的計算方法例用定時器T0產生1ms的定時,系統的fosc=12MHZ分析:機器周期=1us要產生1ms的定時,要數1ms/1us=1000個機器周期的脈沖,那么數機器周期的方法有兩種方法10001000065536初值(1)從0開始計數,計到1000即可,但是總要去看什么時候到1000?(2)從某個平臺(初值)開始計數,計滿剛好溢出,產生中斷標志,請求中斷具體計算:65536-1ms/1us=65536-1000=64536轉換后存到計數寄存器中即可。四、定時/計數器的應用步驟1、初始化選擇工作模式MOVTMOD,……..計數器付初值MOVTH0,……..MOVTL0,………..啟動計數器SETBTR0開中斷SETBET0SETBEA2、提供中斷入口地址3、編寫中斷服務程序。(1)保護現場、恢復現場(2)重新賦初值(方式2除外)例:設計一程序,在P1.0引腳上輸出周期為2ms方波。fOSC=6MHz.分析:要在P1.0引腳上輸出方波,只要在P1.0引腳上交替輸出高電平和低電平即可,用定時/計數器產生1ms定時,定時到改變輸出信號。計算1ms定時的計數初值,1ms需要數500機器周期。初值=65536-500=6503665036/256得整數部分為254,余數為12。程序如下: ORG0000H LJMPSETUP ORG000BH ② LJMPINET0P ORG0030HSETUP: MOVTMOD,#01 MOVTH0,#254 ① MOVTL0,#12 SETBTR0 SETBET0 SETBEAMAIN: SJMP$INET0P: CLRTR0 MOVTH0,#254 MOVTL0,#12 ③ SETBTR0 CPLP1.0 RETI END從方式0和方式1的應用看,方式1比方式0有優點,計數范圍大,初值計算不須換算,使用方便,建議采用。例:設計一程序,在P1.0引腳上輸出400us方波。fOSC=6MHz.用方式2實現分析:由于400us需要計數200個機器脈沖數,而8位計數器就能計數256,因此用方式2可以實現。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 員工自己退休協議書
- 舊書捐贈協議書范文
- 異地合伙創業協議書
- 郵政離職保密協議書
- 轉租中介保密協議書
- 有關車禍理賠協議書
- 就業意向協議書注意
- 礦山項目收購協議書
- 期房轉讓協議書公證
- 政府投資協議書模板
- 空調定期清洗消毒制度消毒
- 2024-2025學年下學期高二政治選必修2第三單元B卷
- 重慶市拔尖強基聯盟2024-2025學年高三下學期3月聯合考試歷史試題(含答案)
- 果園種植管理合作合同范本
- 居室空間設計 課件 項目四 起居室空間設計
- 【歷史】隋唐時期的科技與文化教學設計 2024-2025學年統編版七年級歷史下冊
- 勞務外包服務投標方案(技術標)
- 中國水泥回轉窯行業發展監測及投資方向研究報告
- 初中英語牛津深圳版單詞表(按單元順序)七年級至九年級
- 槍支安全及使用指南
- 《肝衰竭診治指南(2024版)》解讀
評論
0/150
提交評論