版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
5.1磨刀霍霍—預備知識
5.1.1定時和計數的基本概念5.1.2串行通信與串口 5.2小試牛刀—實戰案例
動手實踐5-1:周期脈沖信號的產生動手實踐5-2:周期脈沖頻率的測量動手實踐5-3:利用串口實現并口的擴展動手實踐5-4:點-點雙機單工通信的實現第5章
定時/計數器和串口第5章
定時/計數器和串口5.3庖丁解牛—原理剖析5.3.1定時/計數器的內部結構5.3.2定時/計數器的工作方式5.3.3使用步驟與案例解析5.3.4門控信號的作用動手實踐5-5:脈沖寬度的測量5.3.551單片機串口的基本結構5.3.6串口的工作方式5.3.7
51單片機的內部中斷第5章
定時/計數器和串口動手實踐5-6:定時/計數器中斷的應用動手實踐5-7:串口中斷的應用——雙工通信5.4牛氣沖天——實戰進階(*)5.4.1定時/計數器的級聯動手實踐5-8:長定時的實現5.4.2串口方式2和方式3及其應用動手實踐5-9:串口通信中的奇偶校驗動手實踐5-10:多機主從式通信5.1磨刀霍霍—預備知識
5.1.1定時和計數的基本概念利用D觸發器或JK觸發器的串聯,可以實現多位二進制計數。
計數初值計數值計數脈沖門控信號計數溢出定時和計數任何一個計數器都可以實現計數和定時功能,二者基本的區別在于計數脈沖是已知頻率和周期的,還是頻率和周期未知或者不確定的。如果計數脈沖是頻率恒定的時鐘脈沖,則一般用于實現定時(Time);如果計數脈沖的頻率或周期是未知的,或者不斷變化的,則一般用于實現計數(Count)。實現定時功能的電路稱為定時器(Timer),實現計數功能的電路稱為計數器(Counter)。二者統稱為定時/計數器。在實際系統中,利用計數功能可以實現外部事件出現次數的統計、脈沖寬度或頻率的測量等功能。利用計數溢出信號可以實現很多定時控制功能,例如實現期望的延時,當期望的延時時間到后,切換LED的亮滅狀態,或者使并口某個引腳的高低電平狀態翻轉以輸出指定頻率的周期脈沖等。可編程定時/計數器所謂可編程定時/計數器,指的是計數器的所有或部分功能(包括計數初值的裝入,計數過程的起停、計數溢出信號的檢測等)由CPU通過執行程序來進行控制和實現,從而能夠將硬件實現和軟件實現的優點綜合起來,實現靈活的設置和控制,又不占用CPU過多的時間。MCS-51的51子系列單片機內部集成了2個可編程定時/計數器T0和T1,51子系列還增加了一個T2。這些定時/計數器作為單片機集成的內部資源,可以實現16位、13位或8位計數。每個定時/計數器都有多種工作方式可供選擇,其中T0有4種,T1和T2分別有3種。定時/計數產生的進位溢出使相應的位單元置位,程序中通過查詢該位或采用中斷方式進行處理。脈沖頻率和寬度測量的基本原理假設標準脈沖的周期為Tc,計數初值為N0,待測脈沖高電平結束時刻的當前計數值為N,則待測脈沖的寬度為T=NTc。如果待測脈沖為占空比等于50%的周期方波,則將上述結果再乘以2,即可得到脈沖的周期。用一個計數器工作在定時方式,定時單位時間(例如1s),同時讓另一個計數器工作計數方式,在定時1s時間內,統計待測脈沖的個數,計數值也就是脈沖的頻率。實際系統中考慮到定時/計數器的位數、計數值的范圍以及測量的實時性等,定時單位時間不一定是1s。5.1.2串行通信與串口串行通信的基本概念波特率(BaudRate)指的是串行通信時每秒傳送的碼元數。在計算機通信中,一個碼元一般指的是需要傳輸的一位二進制數據,單位為bit/s,簡寫為bps,有時也寫為baud(波特)。串行通信常用的標準波特率在RS-232C標準中已有規定,典型的有600、1200、2400、4800、9600、19200和115200等。在異步串行通信中,傳送一個字符不僅需要傳送字符本身(例如字符的ASCII碼),還要在前后附加起始位和停止位,合成來稱為一幀數據,代表一個字符或符號。因此串行通信的傳輸速率還可以用字符速率進行描述,又稱為符號速率(SymbolRate),單位為字符/秒。實現串行通信的接口稱為串行通信接口,簡稱串口。實現同步和異步通信的接口分別稱為通用同步通信接口和通用異步通信接口,又稱為通用同步收發器(USRT,UniversalSynchronousReceiver/Transmitter)和通用異步收發器(UART,UniversalAsynchronousReceiver/Transmitter)。在51單片機中只有一個UART,而在高檔的嵌入式微處理器(例如STM32系列微處理器)中,還有USART(通用同步異步收發器),既能實現同步通信,也能實現異步通信。串口與串行通信接口標準串口的兩個最基本的功能是數據傳送和數據格式轉換。數據傳送主要定義傳送過程中的標準、數據幀格式及工作方式,控制具體的數據傳送過程等。數據格式轉換是將傳送的數據進行串行和并行之間的相互轉換,在發送端需要將并行數據轉換為串行數據,而在接收端需要將串行數據轉換為并行數據。一般認為,當傳輸距離在1.5m內時,可以將兩臺51單片機的串口直接相連,如圖5-9所示。其中RxD和TxD分別為數據接收端和數據發送端,兩臺單片機的RXD和TXD端交叉連接在一起。一臺單片機發送數據,則另一臺單片機接收數據。這種直接以TTL電平(低電平0V、高電平+5V)來實現串行數據傳輸的方法,抗干擾性差,傳輸距離短,傳輸速率低。為提高可靠性,增大通信距離和提高傳輸速率,在實際設計中可以采用各種串行通信接口標準,如RS-232C、RS-422A、RS-485等。RS-232C全稱是“使用二進制進行交換的數據終端設備(DTE,dataterminalequipment)和數據通信設備(DCE,datacommunicationequipment)之間的接口標準”。RS232C標準的傳輸距離在15m之內,數據傳輸速率局限在20
kb/s以下,其傳輸速率主要有:50、75、110、150、300、600、1200、2400、4800、9600、19200b/s。RS-232C標準采用負邏輯電平,即邏輯1用-3V~-15V電平表示,邏輯0用+3V~+15V表示。由此可見,RS-232C的邏輯電平與TTL邏輯電平不兼容,因此必須進行電平轉換。常用的電平轉換芯片有MC1488和MC1489,MAX系列RS-232C收發器MAX232、MAX213E、MAX241E芯片等。
5.2小試牛刀—實戰案例
動手實踐5-1:周期脈沖信號的產生(ex5_1.pdsprj、p5_1.asm)
動手實踐5-2:周期脈沖頻率的測量(ex5_2.pdsprj、p5_2.asm)
動手實踐5-3:利用串口實現并口的擴展(ex5_3.pdsprj、p5_3.asm)
動手實踐5-4:點-點雙機單工通信(ex5_4.pdsprj、p5_4.asm)動手實踐5-1周期脈沖信號的產生。動手實踐5-2周期脈沖頻率的測量。動手實踐5-3利用串口實現并口的擴展。動手實踐5-4點-點雙機單工通信。5.3庖丁解牛—原理剖析
5.3.1定時/計數器的內部結構遞增計數器51單片機中的定時/計數器是一個遞增計數器。啟動計數前,將計數器的計數初值寫入特殊功能寄存器TH0和TL0。計數過程中,在每個計數脈沖Tc作用下,TH0和TL0中保存的計數值會從計數初值開始不斷遞增變化,稱為當前計數值。當計數溢出時,TF0標志位置位,可用于向CPU發出中斷請求,或者供CPU查詢。在51單片機中,通過程序配置,計數初值和當前計數值可以是8位、13位或16位二進制數據,從而實現8位、13位或16位計數。計數脈沖控制電路C/T:計數和定時功能選擇信號。
當為低電平時,計數器的計數脈沖由單片機內部時鐘電路產生的時鐘脈沖經過12分頻而得到的,是恒定不變、頻率已知的周期脈沖信號,定時/計數器實現定時功能。
當為高電平時,計數脈沖由外部電路通過T0引腳送入,此時定時/計數器實現計數功能。GATE:門控允許信號。
當GATE=0時,或門輸出都為高電平,S2的通斷與INT0信號無關。
當GATE=1時,在INT0高電平期間,S2閉合,計數脈沖能夠送到計數器,計數器進行正常計數;在INT0低電平期間,S2斷開,計數脈沖不能夠送到計數器,計數器停止計數。INT0引入的信號稱為門控信號。TR0:計數啟動信號。
在或門輸出高電平的前提下,當TR0=1時,與門輸出高電平,控制開關S2接通,允許計數脈沖送入計數器開始計數;
否則,如果TR0=0,則不能啟動計數。相關的特殊功能寄存器M1M0用于指定4種工作方式0~3。TF0是計數溢出標志位,當計數溢出時,由硬件將該位設置為1,可供程序檢測。TR0:該位為1時啟動計數,將該位清零時停止計數。5.3.2定時/計數器的工作方式方式1:16位計數計數開始前將16位計數初值的高低8位直接存放到TH0和TL0中。在計數過程中,16位計數值將不斷遞增變化。當計數到0FFFFH時,如果再來一個計數脈沖,則計數值加1后變為0000H(多余的進位無法保存,自動丟失),同時TF0被置位,發生計數溢出。之后,將從0000H開始重新計數。方式0:13位計數計數開始前,將13位計數初值的高8位存入TH0,低5位存入TL0的低5位,TL0的高3位始終為0。例如,假設求得計數初值為4660,則按如下格式存入TH0和TL0:46601001000110100B1001000100010100TH0TL0共13位方式2:8位,自動重裝時初值計數開始前將8位計數初值同時存入兩個TH0和TL0。在計數過程中,TL0做遞增計數,而TH0中的計數初值保持不變。當計數到0FFH時,再來一個計數脈沖,則發生計數溢出。計數溢出后,內部電路控制將TH0中保存的計數初值重新裝入TL0,并從原來的計數初值重新開始計數。由此可見,方式2與方式0和1的主要區別在于:方式2可以自動重裝初值;方式0和1在計數溢出后,無法自動重新裝入計數初值,只能從全0碼開始重新計數。如果需要,必須在計數溢出后,用指令將計數初值重新裝入TH0和TL0。方式3:8位定時/計數器定時/計數器T0分為兩個獨立的8位計數器TH0和TL0。其中TH0只能實現簡單的定時功能,并借用TR1和TF1以控制定時的啟停、標識計數溢出。此外,計數溢出時不能自動重裝初值。TL0占用原T0的控制位和引腳,實現與方式0和1類似的功能,只是計數位數不同。這種方式下,由于TH0單獨用作另一個8位計數器,因此TL0也不能自動重裝初值。當設置定時/計數器T0工作在方式3時,T1一般用作串口通信所需的波特率發生器,在啟動后就不斷重復計數,產生的溢出脈沖經分頻后作為串口工作所需的時鐘脈沖。5.3.3定時和計數功能的使用步驟與案例解析定時功能
如果是利用定時/計數器實現定時功能,則一般要求定時到后應能出現計數溢出,以便CPU通過檢測TF0或TF1判斷定時是否到。
此時,可以根據所需定時時間的長短計算得到計數初值,再根據各種工作方式下計數初值的范圍來選擇工作方式。當設置計數初值N0=0時,方式0~2的計數過程從啟動計數到計數溢出所需的計數脈沖個數分別為213、216和28,稱為最大計數值或計數滿值,記為Nm。如果N0≠0,則計數器從N0開始計數,必須在計數值達到Nm時才發生溢出。假設計數脈沖周期為Tc,則計數溢出時的定時時間為T=(Nm-N0)Tc。因此為實現期望的定時時間T,所需的計數初值應為N0=Nm-T/Tc
例如,假設T0工作在方式1,已知單片機的時鐘頻率為6MHz,則計數器的計數脈沖頻率為6M/12=0.5MHz,Tc=2s,因此為實現1ms定時,所需的計數初值N0=Nm-T/Tc=65536-1ms/2s=65036=0FE0CH。顯然,對于不同的工作方式,為實現相同長度的定時,所需的計數初值是各不相同的。在上例中,如果設置T0工作在方式0,則計數初值應為8192-500=7692。如果設置工作在方式2,則計數初值應為256-500<0,這說明為實現1ms定時,不能工作在方式2。在根據所需的定時時間計算計數初值,并根據計數初值確定定時/計數器的工作方式后,實現定時功能的程序只需要做如下設置和操作。根據工作方式確定方式控制字,并用MOV指令存入TMOD寄存器。用MOV指令將計數初值存入TH0和TL0。對于方式0和方式1,必須根據計數初值的高低8位分別設置TH0和TL0;對方式2,必須用兩條MOV指令將8位的計數初值同時存入TH0和TL0。用SETBTR0指令啟動計數。用JB、JNB或JBC指令檢測TF0標志位,并等待計數溢出(定時到)。定時到后,繼續做相應的操作。程序p5_1.asm初始化啟動定時等待定時到清除TF0用T0定時0.2ms,注意設置時鐘脈沖為6MHz計數功能如果是實現計數功能,則在初始化時一般將計數初值設為0。啟動計數后,每來一個計數脈沖,計數值遞增1。在期望的條件滿足時,停止計數,并根據當前計數值求得希望的參數。顯然,為了實現計數功能,一般需要保證計數不溢出。此時,應根據計數脈沖的頻率高低對可能達到的最大計數值Nm進行估計,并據此選擇定時/計數器合適的工作方式。Nm=1~256,可選任何一種工作方式;Nm=256~8192,不能為方式2;Nm=8192~65536,則只能選擇方式1。根據由T0引腳送入的外部脈沖頻率或周期,確定為保證計數不溢出可能達到的計數值,并根據計數初值確定定時/計數器的工作方式。之后,在程序中只需要進行如下設置和操作。根據工作方式確定方式控制字,并用MOV指令存入TMOD寄存器。用MOV指令向TH0和TL0存入計數初值00H。用SETBTR0指令啟動計數。當規定的條件滿足(例如定時1s到)時,停止計數并讀取計數值。程序p5_2.asm初始化啟動T0定時1ms等待T0定時到清除TF0用T0定時1ms、用T1計數,時鐘頻率為12MHz啟動T1計數暫停T1計數讀取計數值T0計數初值的計算本案例中,T0用于實現1ms定時,計數初值的計算方法為:已知時鐘頻率為12MHz,則計數器計數脈沖頻率為12M/12=1MHz,Tc=1ms。由于T0工作在方式0,因此為實現1ms定時,所需的計數初值N0=Nm-T/Tc=8192-1ms/1ms=7192。將該計數初值用13位二進制表示為1110000011000B,其高8位為1110000=0E0H,在低5位11000B之前添加3個0,得到00011000B=18H。程序中將0E0H和18H作為計數初值,分別存入TH0和TL0。頻率測量范圍在該案例中,每次定時1ms時間范圍內由T1統計待測脈沖的個數。由于計數值只能為整數,因此在1ms范圍內至少需要送入一個待測脈沖。這就意味著待測脈沖的頻率至少應為1KHz。另一方面,由于T1工作在方式2,實現的是8位二進制計數。在1ms時間范圍內待測脈沖的個數不能超過255個,也就意味著頻率不能超過255KHz。在調試過程中,讀者試著調節信號發生器產生的脈沖頻率,使其超過255KHz,觀察LED顯示的測量結果是否正確。由此可知,如果需要擴大頻率測量,可以增加計數位數。例如,如果設置T1為方式1以實現16位二進制計數,則待測脈沖的最高頻率可以增大到65535KHz。但是需要注意,在定時計數器工作過程中,單片機需要兩個機器周期的時間才能檢測到T0或T1引腳上輸入的一個待測脈沖,因此待測脈沖的頻率不能超過單片機時鐘脈沖頻率的1/24。假設時鐘頻率為12MHz,則待測脈沖的最高頻率不能超過500KHz。5.3.4定時/計數器門控信號的作用在定時/計數器中,當設置GATE=0時,計數的啟停只需要用TR0或TR1進行控制。當設置GATE=1時,計數的啟停不僅要受到TR0或TR1信號的控制,還要受到由INT0或INT1引腳送入門控信號的控制。利用這一特性,可以實現一些特殊的應用功能,例如脈沖寬度的測量。測量過程可以用圖5-27表示。(P3.3)動手實踐5-5:脈沖寬度的測量
(ex5_5.pdsprj,p5_5.asm)設置單片機的時鐘頻率為12MHz,在運行過程中設置信號發生器輸出脈沖頻率為1
KHz,16個LED上顯示16位二進制數為01F4H=500,表示脈沖的高電平寬度為500
s。5.3.551單片機串口的基本結構51單片機集成的UART也主要實現數據傳送和數據格式轉換功能,其內部結構如圖5-28所示,其中主要包括發送數據緩沖器、接收數據緩沖器、發送控制器、接收控制器、輸出控制門和輸入移位寄存器等。從應用的角度看,可以歸納為3個特殊功能寄存器,即串口數據緩沖器SBUF(SerialBuffer)、串口控制寄存器SCON(SerialController)和電源控制寄存器PCON(PowerController)。此外,在串口工作過程中還要用到定時/計數器T1。SBUF
串口內部有一個8位的數據緩沖器SBUF,用于存放待發送和接收到的數據。該特殊功能寄存器的地址為99H,可以通過名稱進行字節操作,不能進行位尋址。例如,如下指令
MOV SBUF,A ;發送數據
MOV A,SBUF ;讀取接收到的數據
通過SCON進行訪問,可以對串口中的發送和接收控制器、輸入移位寄存器以及兩個門電路進行控制,以便在波特率發生器送來的時鐘信號控制下,通過輸入移位寄存器將外部的串行數據轉換為并行數據存入SBUF,或者由門電路將SBUF中的并行數據轉換為串行數據輸出。
同時,控制或門電路發出串口中斷請求RI(ReceiveInterrupt,接收中斷)和TI(TransmissionInterruption,發送中斷)信號。SCONSM0和SM1:這兩位二進制的組合00~11分別指定串口的工作方式為方式0~3。REN:控制是否允許串口接收數據。通過指令將該為置位,則允許串口接收數據;否則禁止串口接收數據,只能進行數據發送。RI:接收中斷標志位。當串口接收到一個數據時,自動將該位置位。因此通過檢測RI位的狀態,CPU可以判斷一個字符幀是否接收完畢,能否從接收SBUF讀取接收到的數據。當RI=1時,串口不會接收數據。因此,在接收完一個數據并被CPU讀取后,必須將RI清零,以便等待接收下一個數據。TI:發送中斷標志位。當一個數據發送完畢后,該位自動置位,因此通過檢測TI狀態,CPU可以確定一個字符幀是否發送完畢,是否可以向串口寫入下一個需要發送的數據。當TI=1時,串口不會發送數據,因此一個數據發送完畢后必須將TI清零,以便準備發送下一個數據。RI:接收中斷標志位。當串口接收到一個數據時,自動將該位置位。因此通過檢測RI位的狀態,CPU可以判斷一個字符幀是否接收完畢,能否從接收SBUF讀取接收到的數據。當RI=1時,串口不會接收數據。因此,在接收完一個數據并被CPU讀取后,必須將RI清零,以便等待接收下一個數據。TI:發送中斷標志位。當一個數據發送完畢后,該位自動置位,因此通過檢測TI狀態,CPU可以確定一個字符幀是否發送完畢,是否可以向串口寫入下一個需要發送的數據。當TI=1時,串口不會發送數據,因此一個數據發送完畢后必須將TI清零,以便準備發送下一個數據。PCON與波特率發生器串口的波特率由PCON和波特率發生器(定時/計數器T1)共同決定,涉及到特殊功能寄存器有TMOD、TCON、PCON、TL1、TH1等。(1)方式0的波特率固定不變,始終等于單片機時鐘頻率的1/12。(2)方式2的波特率只有兩種,等于時鐘頻率的1/32或1/64,具體取決于對PCON寄存器中最高位SMOD位的設置。當設置該位為0時,方式2的波特率為時鐘頻率的1/64;當設置該位為1時,方式2的波特率為時鐘頻率的1/32。(3)方式1和方式3的波特率由SMOD位以及T1的計數初值和定時時間共同決定。此時,T1必須工作在方式2,定時時間為(256-計數初值)×12/時鐘頻率,相應的波特率為波特率=2SMOD×T1的定時時間/32根據上式,如果給定串口的波特率,T1的計數初值應設為計數初值=256-時鐘頻率×2SMOD/(12×波特率×32)例如,假設單片機的時鐘頻率為12MHz,SMOD=0,要求串口傳輸的波特率為1200bps,則計數初值=256-12×106×20/(12×1200×32)≈230=0E6H5.3.6串口的工作方式在這種工作方式下,數據傳輸的波特率固定為單片機時鐘頻率的1/12。在傳輸數據的過程中,RXD(P3.0引腳的第二功能)用作數據線,傳送輸入或輸出的數據;TXD(P3.1引腳的第二功能)用作時鐘線,輸出同步移位時鐘。每次傳送,發送和接收8位數據,數據由低位到高位逐位傳送。方式0:同步移位寄存器方式對發送過程,當TI=0時,通過執行MOVSBUF,A指令將累加器A中實現存入的需要發送的數據由串口內部電路控制逐位移出,并由TxD引腳送出單片機。發送完畢時,TI由串口內部電路自動置位。對接收過程,首先必須設置SCON中的D4位REN=1,并且在RI=0時,通過串口內部電路將從RxD引腳送入的數據逐位存入SBUF。當接收完8位數據后,串口將RI置位。CPU在此過程中不斷檢測RI,當檢測到RI=1時,執行MOVA,SBUF指令從SBUF寄存器中讀取接收到的數據存入累加器A。數據的接收時序如圖5-30(b)所示。8位串入/并出芯片74164的A和B為串行數據輸入端,與RxD(P3.0引腳的第二功能)相連接;CLK端為串行時鐘信號輸入端,直接與TxD(P3.1引腳的第二功能)相連接;Q0~Q7為并行輸出端,輸出8位數據用于控制LED的亮滅。引腳MR為清零端,當輸入低電平時8個輸出端清0。當MR=1時,如果沒有CLK脈沖,74164輸出數據就一直保持不變。案例5-3程序p5_3.asm發送和接收的一個數據幀包括1位起始位、SBUF中8位數據位(低位在前高位在后)和1位停止位。傳送數據的過程中,發送的數據幀通過TxD引腳送出單片機,接收的數據幀逐位來自于RxD引腳。顯然,方式1與方式0的一個重要區別是,RxD和TxD都用作數據線,沒有專門的時鐘線,所以屬于異步通信。此外,傳輸的數據幀格式不同,方式1每次數據傳送,實際上一共傳送了10位二進制,所以有些地方又稱為10位異步通信方式,方式1的數據收發時序如圖5-32所示。方式1:8位異步通信方式案例5-4p5_4t.asmp5_4r.asm5.3.751單片機的內部中斷中斷源內部中斷外部中斷INT0INT1由P3.2引腳送入由P3.3引腳送入T0T1RI||TI由內部定時計數器T0計數溢出產生由內部定時計數器T1計數溢出產生由內部串口數據收發完畢產生中斷請求與中斷響應注
意
由TF0和TF1引起的中斷,響應后能自動復位;對串口中斷RI和TI,響應后不能自動復位,必須在中斷服務程序中安排專門的CLR指令將其清零。開T0中斷開T1中斷開串口中斷中斷優先級不管是外部中斷還是內部中斷,中斷請求到來的時刻是隨機的。這就意味著,CPU正在處理某個中斷請求時,可能又有一個新的中斷請求到來;還可能是在某個時刻,同時有多個中斷請求到來。但是,CPU在任何一個時刻只能響應并處理一個中斷請求。這就涉及到CPU對各中斷請求的響應順序問題,這就是中斷優先級。在51單片機中,可以將各中斷源的中斷優先級關系歸納為下面3條基本規則:CPU同時接收到幾個中斷請求時,首先響應優先級最高的中斷請求;正在進行的中斷過程不能被新的同級或低優先級的中斷請求所中斷,一直到該中斷服務程序結束,返回了主程序且執行了主程序中的一條指令后,CPU才能響應新的中斷請求;新來的高優先級裝入請求能夠打斷正在進行的低優先級中斷服務,從而實現兩級中斷嵌套。
所謂中斷嵌套,就是單片機正在執行低優先級中斷的中斷服務程序時,可被高優先級中斷請求所中斷,待高優先級中斷處理完畢后,再返回低優先級中斷服務程序。中斷嵌套的過程如圖5-34所示。MCS-51單片機的中斷系統中有兩個中斷優先級組,每個中斷請求源可由軟件設置為高優先級組或低優先級組。兩個優先級組通過IP(中斷優先級)寄存器進行設置,其字節地址為0B8H,可以位尋址。只要用指令將向其中寫入一個字節數據,將各位進行置位或復位,即可將各中斷源設置為高或低優先級組。當某位為1時,設置相應的中斷源為高優先級,否則為低優先級。除了利用上述IP進行優先級設置外,位于同一級的各中斷源還有一個默認的優先級順序,該順序正好與各中斷源中斷服務程序入口地址在ROM中的存放順序一致,從高級到低級依次為:
外部中斷0、定時/計數器T0中斷、外部中斷1、定時/計數器T1中斷、
串行口中斷、定時/計數器T2中斷。
51單片機復位時,IP的初始值為00H,因此所有的中斷源都屬于低優先級組。在程序中,可以根據實際系統的需要利用指令隨意設置各中斷源的優先級。例如,如下指令MOV IP,#00010100B執行后,設置各中斷源的優先級順序從高到低依次為:
外部中斷1、串行口中斷、外部中斷0、定時/計數器T0中斷、
定時/計數器T1中斷、定時/計數器T2中斷。動手實踐5-6:定時/計數器中斷的應用(ex5_1.pdsprj,p5_6.asm)將實踐案例5-1改為用中斷方式實現動手實踐5-7:串口中斷的應用——雙工通信(ex5_7.pdsprj,p5_7.asm)5.4牛氣沖天—實戰進階
5.4.1定時/計數器的級聯不管設置定時/計數器工作在哪一種工作方式,由于計數位數有限,計數脈沖的周期或頻率固定,因此都只能實現有限長度的定時。表5-3給出了在51單片機兩種典型的時鐘脈沖頻率下,3種工作方式能夠獲得最大定時時間。動手實踐5-8:長定時的實現
(ex5_8.pdsprj,p5_8_1.asm,p5_8_2.asm)利用定時/計數器T0和T1級聯實現0.5s的定時。其中T0工作在定時方式,用于在P1.1端產生周期為20ms的方波脈沖;P1.1端輸出的方波脈沖再作為T1計數器的計數脈沖,控制P1.0引腳輸出1Hz的周期方波脈沖。5.4.2串口方式2和方式3及其應用在SCON中,當設置SM1和SM0為10和11時,分別指定串口的工作方式為方式2和方式3。在這兩種方式下,串口仍然用TXD和RxD引腳發送和接收數據。方式2和方式3與方式1的區別在于發送數據幀的格式不同;方式2和3之間的主要區別在于傳輸的波特率不同。方式2的波特率固定為振蕩器頻率的1/32或1/64,而方式3的波特率由定時/計數器T1的計數初值決定。方式2和3數據幀的格式如圖5-40所示。由此可見,這兩種方式除了發送8位數據位以外,另外還需要發送一位TB8,合起來共9位構成數據幀,因此稱為9位異步通信方式。此外,與方式1一樣需要前后分別附加一位起始位和一位停止位,合起來共需傳送11位數據。因此有些地方又稱為11位異步通信方式。對發送方,數據幀的最后一位為TB8。在發送前,首先用位操作指令設置TB8為0或1,然后將待發送的8位數據存入SBUF即可啟動串行數據的發送。發送數據結束后將TI置位。對接收方,接收到的8位數據存入SBUF,等待CPU讀取,而第9位數據自動存入SCON寄存器的RB8位。當9位數據接收完畢時,串口內部電路將RI置位。串行通信中的錯誤校驗
在串行通信過程(特別是長距離通信)中,數據傳輸的過程會受到各種干擾(傳輸線路引入的噪聲)的影響,造成數據傳送錯誤。因此,在接收端一般都需要對數據傳送的正確與否進行校驗,以保證傳輸數據準確無誤。常用的數據校驗方法有奇偶校驗、循環冗余碼校驗等。奇偶校驗
串行數據發送時,在數據位后面尾隨1位奇偶校驗位(1或0)。當約定為奇校驗時,數據位和校驗位中1碼的個數應為奇數;當約定為偶校驗時,1碼的個數應為偶數。
在通信過程中,收發雙方需要事先約定采用奇校驗還是偶校驗。在發送時,發送方根據待發送數據位中1碼個數的奇偶正確設置相應的校驗位,以保證發送的數據位和校驗位中1碼總的個數為奇數或偶數。
按照此約定,如果在傳輸過程中由于干擾使得數據位中的某一位發生錯誤,即1碼變為0碼或0碼變為1碼,則接收到的數據位和校驗位中1碼個數的奇偶將不滿足約定。此時,由于接收的數據是錯誤的,CPU不應該也不需要讀取,接收方可以要求發送方重新發送。代碼和校驗與循環冗余碼校驗
代碼和校驗是發送方將所發數據塊求和或各字節異或,產生一個字節的校驗字符(校驗和)附加到數據塊末尾。接收方接收數據時同時對數據塊(除校驗字節)求和或各字節異或,將所得結果與發送方的“校驗和”進行比較,如果相符,則無差錯,否則即認為在傳輸過程中出現了差錯。
循環冗余碼校驗糾錯能力強,容易實現。該校驗是通過某種數學運算實現有效信息與校驗位之間的循環校驗,常用于對磁盤信息的傳輸、存儲區的完整性校驗等。是目前應用最廣的檢錯碼編碼方式之一,廣泛用于同步通信中。多機串行通信
在單片機集散式分布系統中,往往采用一臺主機(Master)和多臺從機(Slave)。主機可以與系統中任何一臺從機進行串行通信(發送或接收數據),一般各從機之間不直接進行數據傳送。對這樣的主從式多機通信系統,由于所有的從機都通過同樣的RxD和TxD兩根線與主機進行數據傳送,因此工作過程中一個關鍵的問題是主機如何找到當前需
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 盲校義務教育實驗數學三年級上冊總復習知識清單
- 小學語文一年級上冊《語文園地三》拼音復習與應用教案
- 初中九年級化學 二氧化碳的實驗室制取 知識清單
- 跨境金融AI實時翻譯與合規審核
- 周長概念的建立與度量-北師大版小學數學三年級上冊《什么是周長》教學設計
- 人教版九年級英語全冊Unit 4“How we have changed!”閱讀課(3a~3c)教學設計
- 中職語文二種樹郭橐駝傳教案設計
- 初中七年級歷史《探華夏科技之光 育文化自信之魂-中國古代科技文化成就專題復習》教案
- 初中物理九年級中考復習:“疊放體”壓強綜合計算教案
- 初中化學九年級“簡易滅火器的設計與制作”項目式教學設計
- 合作生育子女協議書
- (高清版)DG∕TJ 08-2433A-2023 外墻保溫一體化系統應用技術標準(預制混凝土反打保溫外墻)
- 眼科器械處理流程及質控要點
- 醫保基金檢查合同范本
- DB51 T1996-2015四川公路工程超聲回彈綜合法 檢測結構混凝土強度技術規程
- 《寵物美容與護理》課件-梳毛工具
- 護理查房特發性突聾
- GB/T 44370-2024系統和軟件工程軟件產品質量要求和評估可用性通用行業格式用戶需求說明
- 《建筑排水塑料管道工程技術規程 CJJT29-2010》
- 食品安全與日常飲食智慧樹知到期末考試答案章節答案2024年中國農業大學
- 海南省民族教育發展提升行動計劃(2023-2025年)
評論
0/150
提交評論