第一篇:第4章 單片機原理及接口技術講稿(第三版)-李朝青
第4章
匯編語言程序設計及知識
§4.1 編程的步驟、方法和技巧
§4.1.1 編程的步驟
一、分析問題
對需要解決的問題進行分析,以求對問題由正確的理解。如,? 解決問題的任務是什么? ? 工作過程?
? 現有的條件,已知數據,對運算的精度和速度方面的要求? ? 設計的硬件結構是否方便編程?
二、確定算法
算法是如何將實際問題轉化成程序模塊來處理。
在編程以前,先要對幾種不同的算法進行分析、比較,找出最適宜的算法
三、畫程序流程圖
程序流程圖是使用各種圖形、符號、有向線段等來說明程序設計過程的一種直觀的表示。流程圖步驟分得越細致,編寫程序是也越方便。畫流程圖是程序結構設計是采用的一種重要手段。
一個系統軟件有總的流程圖(主程序框圖)和局部的流程圖。流程圖常采用的圖形和符號。
四、編寫程序
用89C51匯編語言編寫的源程序行(一條語句)包括四個部分,也叫四個字段: 〔標號:〕〔操作碼〕〔操作數〕;〔注釋〕
每個字段之間要用分隔符分隔,而每個字段內部不能使用分隔符。可以用作分隔符的符號:空格“
”、冒號“:”、、逗號“,”、分號“;”等。
例:LOOP:MOV A,#00H;立即數00H→A ? 標號
標號是用戶定義的符號地址。
一條指令的標號是該條指令的符號名字,標號的值是匯編這條指令時指令的地址。標號由以英文字母開始的1~8個字母或數字組成,以冒號“:”結尾。
標號可以由賦值偽指令賦值,如果沒有賦值,匯編程序把存放該指令目標碼第一字節的存儲單元的地址賦給該標號,所以,標號又叫指令標號。
? 操作碼
操作碼是必不可少的。
它用一組字母符號表示指令的操作碼。在89C51中,由89C51的指令助記符組成。? 操作數
匯編語言指令可能要求或不要求操作數,所以這一字段可能有也可能沒有。若有兩個操作數,操作數之間用逗號“,”分開。操作數包括的內容有:
(1)工作寄存器:由PSW.3和PSW.4規定的當前工作寄存器區中的R0~R7。(2)特殊功能寄存器:21個SFR的名字。
(3)標號名:賦值標號—由匯編指令EQU等賦值的標號;指令標號—指令標號指示的指令的第一字節地址是該標號的值。
(4)常數:可用二進制(B)、十進制、十六進制(H),若常數以字符開頭,前面加0。(5)$:用來表示程序計數器的當前值。
1(6)表達式:匯編時,計算出表達式的值填入目標碼。? 注釋
注釋部分不是匯編語言的功能部分,只是用語增加程序的可讀性。良好的注釋是匯編語言程序編寫中的重要組成部分。
§4.1.2 編程的方法和技巧
一、模塊化的程序設計方法
1、程序功能模塊化的優點
單個模塊結構的程序功能單一,易于編寫、調試和修改。
便于分工,從而可使多個程序員同時進行程序的編寫和調試工作,加快軟件研制進度。程序可讀性好,便于功能擴充和版本升級。
對程序的修改可局部進行,其它部分可以保持不變。
對于使用頻繁的子程序可以建立子程序庫,便于多個模塊調用。
2、劃分模塊的原則
每個模塊應具有獨立的功能,能產生一個明確的結果,即單模塊的功能高內聚性。
模塊之間的控制耦合應盡量簡單,數據耦合應盡量少,即模塊間的低耦合性。控制耦合是指模塊進入和退出的條件及方式,數據耦合是指模塊間的信息交換方式、交換量的多少及交換頻繁程度。
模塊長度適中。20條~100條的范圍較合適。
二、編程技巧
1、盡量采用循環結構和子程序。
2、盡量少用無條件轉移指令。
3、對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數的寄存器外,子程序中用到的其他寄存器的內容應壓入堆棧(返回前再彈出),即保護現場。
4、在中斷處理程序中,除了要保護處理程序中用到的寄存器外,還要保護標志寄存器。
5、用累加器傳遞入口參數或返回參數比較方便,在子程序中,一般不必把累加器內容壓入堆棧。
§4.1.3 匯編語言程序的基本結構
一、順序程序
順序程序是最簡單的程序結構,即順序結構。程序按順序一條一條地執行指令。
二、分支程序
程序分支是通過條件轉移指令實現的,即根據條件對程序的執行進行判斷、滿足條件則進行程序轉移,不滿足條件就順序執行程序。
分支程序又分為單分支和多分支結構。
多分支程序是首先把分支程序按序號排列,然后按序號值進行轉移。
在MCS-51指令系統中,通過條件判斷實現單分支程序轉移的指令有:JZ、JNZ、CJNE、DJNZ等。此外還有以位狀態作為條件進行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用這些指令可以完成0、1、正、負,以及相等、不相等作為各種條件判斷依據的程序轉移。
結構如圖4-1所示。
例4-1: 128種分支轉移程序。
功能:根據入口條件轉移到128個目的地址。入口:(R3)=轉移目的地址的序號00H~7FH。出口:轉移到相應子程序入口。JMP_128:MOV
A,R3
RL
A
MOV
DPTR,#JMPTAB
JMP
@A+DPTR JMPTAB:AJMP
ROUT00
AJMP
ROUT01
┇
┇
AJMP
ROUT7F
說明:此程序要求128個轉移目的地址(ROUT00 ~ROUT7FH)必須駐留在與絕對轉移指令AJMP相同的一個2KB存儲區內。
RL指令對變址部分乘以2,因為每條AJMP指令占兩個字節。
三、循環程序
在程序運行時,有時需要連續重復執行某段程序,可以使用循環程序。其結構包括四部分:
1、置循環初值
2、循環體(循環工作部分)
3、修改控制變量
4、循環控制部分 其組織方式如圖4-2所示。
1、置循環初值
對于循環程序中所使用的工作單元,在循環開始時應置初值。
例如,工作寄存器設置計數初值,累加器A清0,以及設置地址指針、長度等。
2、循環體(循環工作部分)
重復執行的程序段部分,分為循環工作部分和循環控制部分。
循環控制部分每循環一次,檢查結束條件,當滿足條件時,就停止循環,往下繼續執行其他程序
3、修改控制變量
在循環程序中,不許給出循環結束條件。
常見的是計數循環,當循環了一定的次數后,就停止循環。
在單片機中,一般用一個工作寄存器Rn作為計數器,對該計數器賦初值作為循環次數。每循環一次,計數器的值減1,即修改循環控制變量,當計數器的置件為0時,就停止循環。
4、循環控制部分
根據循環結束條件,判斷是否結束循環。
89C51可采用DJNZ指令來自動修改控制變量并能結束循環。
§4.2 匯編語言源程序的編輯和匯編
§4.2.1 源程序編輯
在微型計算機上,借助編輯軟件,編寫或修改匯編語言源程序。如行編輯或屏幕編輯軟件。
§4.2.2 源程序的匯編
匯編:將匯編語言源程序轉換為機器碼表示的目標程序的過程。對單片機有:
一、手工匯編
二、機器匯編
三、反匯編
一、手工匯編
通過手工方式查指令編碼表,逐個把助記符指令“翻譯”成機器碼,然后把得到的機器碼程序鍵入單片機,進行調試和運行。
手工匯編的缺點:
1、偏移量的計算容易出錯
2、程序的修改會引起后面指令地址的變化,轉移指令的偏移量也要重新計算。
二、機器匯編
機器匯編是在計算機上使用交叉匯編程序進行源程序的匯編。匯編工作由機器自動完成,最后得到以機器碼表示的目標程序。
三、反匯編
將二進制機器語言程序翻譯成匯編語言程序的過程稱反匯編。匯編和反匯編的過程如圖4-3所示。
圖4-3
匯編和反匯編過程
§4.2.3 偽指令
偽指令不是真正的指令,無對應的機器碼,在匯編時不產生目標程序,只是用來對匯編過程進行某種控制。
? ORG 匯編起始命令 格式:ORG
16位地址
功能:規定該偽指令后面程序的匯編地址,即匯編后生成目標程序存放的起始地址。例如:
ORG
2000H START:MOV
A,#64H
┇
規定了START的地址是2000H,又規定了匯編后的第一條指令碼從2000H開始存放。? END 匯編結束指令 格式:END 功能:通知匯編程序結束匯編。在END之后所有的匯編指令均不予以處理。
? EQU 賦值命令
格式:字符名稱
EQU 項(數或匯編符號)功能:把“項”賦給“字符名稱”。
注意:字符名稱不等于標號(其后沒有冒號);其中的項,可以是數,也可以是匯編符號。EQU賦值過的符號名可以用作數據、代碼地址、位地址或一個立即數。可以是8位的,也可以是16位的。
例如: 例1:
AA
EQU
R1
MOV A,AA;AA代表工作寄存器R1 例2:
A10
EQU
DELY
EQU
07EBH
MOV
A,A10;A10作為片內的一個直接地址
LCALL
DELY;DELY作為一個16位子程序的入口地址 ? DATA
數據地址賦值命令
格式:字符名稱
DATA
表達式 功能:與EQU類似,但有以下差別:
1、EQU定義的字符名必須先定義后使用,而DATA定義的字符名可以后定義先使用。
2、用EQU偽指令可以把一個匯編符號賦給一個名字,而DATA只能把數據賦給字符名。
3、DATA語句可以把一個表達式的值賦給字符名稱,其中的表達式應是可求值的。DATA偽指令在程序中用來定義數據地址
? DB 定義字節命令 格式:DB(項或項表)
功能:通知匯編程序從當前ROM地址開始,保留一個字或字節串的存儲單元,并存入DB后的數據。
注意:項或項表可以是一個字節,用逗號隔開的字節串或括在單引號中的ASCII字符串。例如:
ORG
2000H
DB
0A3H LIST:DB
26H,03H STR:DB
‘ABC’
┇
經匯編后(2000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,(41H,42H,43H分別為A,B,C的ASCII碼)? DW 定義字命令
格式:DW
16位數據項或項表
功能:把DW后的16位數據項或項表從當前地址連續存放。每項數值為16位二進制數,高8位先放,低8位后存放。DW用于定義一個地址表。
例如:
ORG
1500H TABLE:DW
7234H,8AH,10H
┇
經匯編后(1500H)=72H,(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,? DS 定義存儲空間命令 格式:DS
表達式
功能:在匯編時,從指定地址開始保留DS之后表達式的值所規定的存儲單元以備后用。例如:
ORG
1000H DS
08H DB
30H,8AH 匯編后,從1000H保留8個單元,然后從1008H按DB命令給內存賦值,即(1008H)=30H
(1009H)=8AH ? BIT 位地址符號命令 格式:字符名
BIT
位地址
功能:把BIT后的位地址值賦給字符名。其中字符名不是標號,其后沒有冒號,但字符名是必須的。
例如:
A1
BIT
P1.0 A2
BIT
02H 匯編后,P1口第0位的位地址90H就賦給了A1,而A2的值則為02H。
第二篇:第7章 單片機原理及接口技術講稿(第三版)-李朝青
第7章
89C51串行口及串行通信技術
本書前幾章涉及的數據傳送都是采用并行方式,如8051與存儲器,存儲器與存儲器,8051與并行打印機之間的通信。89C51處理8位數據,若以并行傳送方式一次傳送一個字節的數據,至少需要8條數據線。當89C51與打印機連接時,除8條數據線外,還需要狀態、應答等控制線。一些微機系統,如IBM-PC系列機,由于磁盤機、CRT、打印機與主機系統的距離有限,所以,使用多條電纜線以提高數據傳送速度還是合算的。但是,計算機之間、計算機與其終端之間的距離有時非常遠,此時,電纜線過多是不經濟的
串行通信只用一位數據線傳送數據的位信號,即使加上幾條通信聯絡控制線,也用不了很多電纜線。因此,串行通信適合遠距離數據傳送,如大型主機與其遠程終端之間、處于兩地的計算機之間采用串行通信就非常經濟。當然,串行通信要求有轉換數據格式、時間控制等邏輯電路,這些電路目前已被集成在大規模集成電路中(稱為可編程串行通信控制器),使用很方便。
本章將介紹89C51串行口的結構及應用,PC機與89C51間的雙機通信,一臺PC機控制多臺89C51前沿機的分布式系統,以及通信接口電路和軟件設計,并給出設計實例,包括接口電路、程序框圖、主程序和接收/發送子程序。
7.1 串行通信基本知識
7.1.1數據通信
在實際工作中,計算機的CPU與外部設備之間常常要進行信息交換,一臺計算機與其他計算機之間也往往要交換信息,所有這些信息交換均可稱為通信。
通信方式有兩種,即并行通信和串行通信。
通常根據信息傳送的距離決定采用哪種通信方式。
例如,在IBM-PC機與外部設備(如打印機等)通信時,如果距離小于30m,可采用并行通信方式;當距離大于30m時,則要采用串行通信方式。89C51單片機具有并行和串行二種基本通信方式。
并行通信是指數據的各位同時進行傳送(發送或接收)的通信方式。其優點是傳送速度快;
缺點是數據有多少位,就需要多少根傳送線。
例如,89C51單片機與打印機之間的數據傳送就屬于并行通信。
圖7-1(a)所示為89C51與外設間8位數據并行通信的連接方法。并行通信在位數多、傳送距離又遠時就不太合適了。
串行通信指數據是一位一位按順序傳送的通信方式。
它的突出優點是只需一對傳輸線(利用電話線就可作為傳輸線),這樣就大大降低了傳送成本,特別適用于遠距離通信;
其缺點是傳送速度較低。假設并行傳送N位數據所需時間位T,那么串行傳送的時間至少為NT,實際上總是大于NT的。
圖7-1(b)所示為串行通信方式的連接方法。
7.1.2串行通信的傳輸方式
串行通信的傳送方向通常有三種:
單向(或單工)配置,只允許數據向一個方向傳送;
半雙向(或半雙工)配置,允許數據向兩個方向中的任一方向傳送,但每次只能有一個站點發送;
全雙向(全雙工)配置,允許同時雙向傳送數據,因此,全雙工配置是一對單向配置,它要求兩端的通信設備都具有完整和獨立的發送和接受能力。圖7-2所示為串行通信中的數據傳送方式。
圖7-2 串行通信中的數據傳送方式
7.1.3異步通信和同步通信
串行通信有兩種基本通信方式,即異步通信和同步通信。
1、異步通信
在異步通信中,數據是一幀一幀(包括一個字符代碼或一字節數據)傳送的,每一幀的數據格式如圖7-3所示
圖7-3 異步通信數據格式
在幀格式中,一個字符由四個部分組成:起始位、數據位、奇偶校驗位和停止位。首先是一個起始為(0),然后是5位--8位數據(規定低位在前,高位在后),接下來是奇偶校驗位(可省略),最后是停止位(1)。
始位(0)信號只占用一位,用來通知接收設備一個待接收的字符開始到達。線路上在不傳送字符時應保持為1。接收端不斷檢測線路的狀態,若連續為1以后又測到一個0,就知道發來一個新字符,應馬上準備接收。字符的起始位還被用作同步接收端的時鐘,以保證以后的接收能正確進行。
起始位后面緊接著是數據位,它可以是5位(D0--D4)、6位、7位或8位(D0--D7)。奇偶校驗(D8)只占一位,但在字符中也可以規定不用奇偶校驗位,則這一位就可省去。也可用這一位(1/0)來確定這一幀中的字符所代表信息的性質(地址/數據等)。
停止位用來表征字符的結束,它一定是高電位(邏輯1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳送完畢,同時,也為接收下一個字符做好準備--只要再接收到0,就是新的字符的起始位。若停止位以后不是緊接著傳送下一個字符,則使線路電平保持為高電平(邏輯1)。
圖7-3(a)表示一個字符緊接一個字符傳送的情況,上一個字符的停止位和下一個字符的起始位是緊鄰的;
圖7-3(b)則是兩個字符間有空閑位的情況,空閑位為1,線路處于等待狀態。存在空閑位正是異步通信的特征之一。
例如,規定用ASCII編碼,字符為七位,加一個奇偶校驗位、一個起始位、一個停止位,則一幀共十位。
2、同步通信
同步通信中,在數據開始傳送前用同步字符來指示(常約定1個--2個),并由時鐘來實現發送端和接收端同步,即檢測到規定的同步字符后,下面就連續按順序傳送數據,直到通信告一段落。
同步傳送時,字符與字符之間沒有間隙,也不用起始位和停止位,僅在數據塊開始時用同步字符SYNC來指示,其數據格式如圖7-4所示。
同步字符的插入可以是單同步字符方式或雙同步字符方式,如圖7-4所示,然后是連續的數據塊。同步字符可以由用戶約定,當然也可以采用ASCII碼中規定的SYNC代碼,即16H。按同步方式通信時,先發送同步字符,接收方檢測到同步字符后,即準備接收數據。
在同步傳送時,要求用時鐘來實現發送端與接收端之間的同步。為了保證接收正確無誤,發送方除了傳送數據外,還要同時傳送時鐘信號。
同步傳送可以提高傳輸速率(達56kb/s或更高),但硬件比較復雜。
3、波特率(Baud rate)
波特率,即數據傳送速率,表示每秒鐘傳送二進制代碼的位數,它的單位是b/s。波特率對于CPU與外界的通信是很重要的。
假設數據傳送速率是120字符/s,而每個字符格式包含1個代碼位(1個起始位、1個終止位、8個數據位)。這時,傳送的波特率為:
10b/字符×120字符/s=1200b/s 每一位代碼的傳送時間Td為波特率的倒數。Td=1b/(1200bs-1)=0.833ms 異步通信的傳送速率在50b/s--19200b/s之間,常用于計算機到終端機和打印機之間的通信、直通電報以及無線電通信的數據發送等。
7.1.4串行通信的過程及通信協議
1、串←→并轉換與設備同步
兩個通信設備在串行線路上成功地實現通信必須解決兩個問題:
一是串←→并轉換,即如何把要發送的并行數據串行化,把接收的串行數據并行化;
二是設備同步,即同步發送設備與接收設備的工作節拍,以確保發送數據在接收端被正確讀出。
(1)串←→并轉換
串行通信是將計算機內部的并行數據轉換成串行數據,將其通過一根通信線傳送;并將接收的串行數據再轉換成并行數據送到計算機中。
在計算機串行發送數據之前,計算機內部的并行數據被送入移位寄存器并一位一位地輸出,將并行數據轉換成串行數據。如圖7-5所示。
在接收數據時,來自通信線路的串行數據被壓入移位寄存器,滿8位后并行送到計算機內部。如圖7-6所示。
在串行通信控制電路中,串--并、并--串轉換邏輯被集成在串行異步通信控制器芯片中。89C51單片機的串行口和IBM-PC相同。(2)設備同步
進行串行通信的兩臺設備必須同步工作才能有效地檢測通信線路上的信號變化,從而采樣傳送數據脈沖。
設備同步對通信雙方有兩個共同要求: 一是通信雙方必須采用統一的編碼方法; 二是通信雙方必須能產生相同的傳送速率。
采用統一的編碼方法確定了一個字符二進制表示值的位發送順序和位串長度,當然還包括統一的邏輯電平規定,即電平信號高低與邏輯1和邏輯0的固定對應關系。
通信雙方只有產生相同的傳送速率,才能確保設備同步,這就要求發送設備和接收設備采用相同頻率的時鐘。發送設備在統一的時鐘脈沖上發出數據,接收設備才能正確檢測出與時鐘脈沖同步的數據信息。
2、串行通信協議
通信協議是對數據傳送方式的規定,包括數據格式定義和數據位定義等。
通信雙方必須遵守統一的通信協議。串行通信協議包括同步協議和異步協議兩種。在此只討論異步串行通信協議和異步串性協議規定的字符數據的傳送格式。(1)起始位
通信線上沒有數據被傳送時處于邏輯1狀態。
當發送設備要發送一個字符數據時,首先發出一個邏輯0信號,這個邏輯低電平就是起始位。
起始位通過通信線傳向接收設備,接收設備檢測到這個邏輯低電平后,就開始準備接收數據位信號。
起始位所起的作用就是設備同步,通信雙方必須在傳送數據位前協調同步。(2)數據位
當接收設備收到起始位后,緊接著就會收到數據位。數據位的個數可以是5、6、7或8。IBM-PC中經常采用7位或8位數據傳送,89C51串行口采用8位或9位數據傳送。這些數據位被接收到移位寄存器中,構成傳送數據字符。在字符數據傳送過程中,數據位從最低有效位開始發送,依次順序在接收設備中被轉換為并行數據。(3)奇偶校驗位
數據位發送完之后,可以發送奇偶校驗位。奇偶校驗用于有限差錯檢測,通信雙方需約定已知的奇偶校驗方式。如果選擇偶校驗,那么組成數據位和奇偶位的邏輯1的個數必須是偶數;如果選擇奇校驗,那么邏輯1的個數必須是奇數。(4)停止位約定
在奇偶位或數據位(當無奇偶校驗時)之后發送的是停止位。停止位是一個字符數據的結束標志,可以是1位,1.5位或2位的高電平。接收設備收到停止位之后,通信線路上便又恢復邏輯1狀態,直至下一個字符數據的起始位到來。(5)波特率設置
通信線上傳送的所有位信號都保持一致的信號持續時間,每一位的信號持續時間都由數據傳送速度確定,而傳送速度是以每秒多少個二進制位來衡量的,這個速度叫波特率。如果數據以300個二進制位每秒在通信線上傳送,那么傳送速度為300波特,通常記為300b/s。(6)掛鉤(握手)信號約定
(見本章7.4節實例)
7.2 串行口及應用
89C51單片機除具有4個8位并行口外,還具有串行接口。
此串行接口是一個全雙工串行通信接口,即能同時進行串行發送和接收數據。它可以作UATR(通用異步接收和發送器)用,也可以作同步移位寄存器用。
使用串行接口可以實現89C51單片機系統之間點對點的單機通信和89C51與系統機(如IBM-PC機等)的單機或多機通信。
7.2.1 89C51串行口
1、結 構
89C51通過引腳RXD(P3.0,串行數據接收端)和引腳TXD(P3.1,串行數據發送端)與外界進行通信。其內部結構簡化示意圖如圖7-7所示。圖中有兩個物理獨立的接收、發送緩沖器SBUF,它們占用同一低值99H,可同時發送、接收數據。發送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。
串行發送與接收的速率與移位時鐘同步。89C51用定時器T1作為串行通信的波特率發生器,T1溢出率經2分頻(或不分頻)后又經16分頻作為串行發送或接收的移位脈沖。移位脈沖的速率即是波特率。
圖7-7 串行口內部結構示意簡圖
從圖中可看出,接收器是雙緩沖結構,在前一個字節被從接收緩沖器SBUF讀出之前,第二個字節即開始被接收(串行輸入至移位寄存器),但是,在第二個字節接收完畢而前一個字節CPU未讀取時,會丟失前一個字節。
串行口的發送和接收都是以特殊功能寄存器SBUF的名義進行讀或寫的。當向SBUF發“寫”命令時(執行“MOV SBUF,A”指令),即是向發送緩沖器SBUF裝載并開始由TXD引腳向外發送一幀數據,發送完便使發送中斷標志位TI=1。
在滿足串行口接收中斷標志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數據進入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當發讀SBUF命令時(執行“MOV A,SBUF”命令),便由接收緩沖器(SBUF)取出信息通過89C51內部總線送CPU。
對于發送緩沖器,因為發送時CPU是主動的,不會產生重疊錯誤,一般不需要用雙緩沖器結構來保持最大傳送速率。
2、串行口控制字及控制寄存器
89C51串行口是可編程接口,對它初始化編程只用兩個控制字分別寫入特殊功能寄存器SCON(98H)和電源控制寄存器PCON(87H)中即可。(1)SCON(98H)
89C51串行通信的方式選擇、接收和發送控制以及串行口的狀態標志等均由特殊功能寄存器SCON控制和指示,其控制字格式如圖7-8所示。
圖7-8 串行口控制寄存器SCON ①SM0和SM1(SCON.7,SCON.6)?a?a串行口工作方式選擇位。兩個選擇位對應4種通信方式,如表7-1所示。其中,fosc是振蕩頻率。
②SM2(SCON.5)——多機通信控制位,主要用于方式2和方式3。
若置SM2=1,則允許多機通信。當一片89C51(主機)與多片89C51(從機)通信時,所有從機的SM2位都置1。主機首先發送的一幀數據為地址,即從機機號,其中第9位為1,所有的從機接收到數據后,將其中第9位裝入RB8中。
各個從機根據收到的第9位數據(RB8中)的值來決定從機可否再接收主機的信息。若(RB8)=0,說明是數據幀,則使接收中斷標志位RI=0,信息丟失;若(RB8)=1,說明是地址幀,數據裝入SBUF并置RI=1,中斷所有從機,被尋址的目標從機清除SM2以接收主機發來的一幀數據。其他從機仍然保持SM2=1。
若SM2=0,即不屬于多機通信情況,則接收一貞數據后,不管第九位數據是0還是1,都制RI=1,接收到的數據裝入SBUF。
根據SM2這個功能,可實現多個89C51應用系統的串行通信。
在方式1時,若SM2=1,則只有接收到有效停止位時,RI才制1,以便接收下一貞數據。在方式0時,SM2必須是0。
③REN(SCON.4)——允許接收控制位。
由軟件置1或清0,只有當REN=1時才允許接收,相當于串行接收的開關;若REN=0,則禁止接收。
在串行通信接收控制過程中,如果滿足RI=0和REN=1(允許接收)的條件,就允許接收,一幀數據就裝載入接收SBUF中。
④TB8(SCON.3)——發送數據的第9位(D8)裝入TB8中。
在方式2或方式3中,根據發送數據的需要由軟件置位或復位。在許多通信協議中可用作奇偶校驗位,也可在多機通信中作為發送地址幀或數據幀的標志位。對于后者,TB8=1,說明該幀數據為地址;TB8=0,說明該幀數據為數據字節。在方式0或方式1中,該為未用。⑤RB8(SCON.2)——接收數據的第9位。
在方式2或方式3中,接收到的第9位數據放在RB8位。它或是約定的奇/偶校驗位,或是約定的地址/數據標識位。在方式2和方式3多機通信中,若SM2=1,如果RB8=1,說明收到 7 的數據為地址幀。
在方式1中,若SM2=0(即不是多機通信情況),RB8中存放的是已接收到的停止位。在方式0中,該位未用。
⑥TI(SCON.1)——發送中斷標志。
在一幀數據發送完時被置位。在方式0串行發送第8位結束或其他方式串行發送到停止位的開始時由硬件置位,可用軟件查詢。它同時也申請中斷,TI置位意味著向CPU提供“發送緩沖器SBUF已空”的信息,CPU可以準備發送下一幀數據。串行口發送中斷被響應后,TI不會自動清0,必須由軟件清0。
⑦RI(SCON.0)——接收中斷標志。
在節收到一幀有效數據后由硬件置位。在方式0中,第8位數據發送結束時,由硬件置位;在其他三種方式中,當接收到停止位中間時由硬件置位。RI=1,申請中斷,表示一幀數據接收結束,并已裝入接收SBUF中,要求CPU取走數據。CPU響應中斷,取走數據。RI也必須由軟件清0,清除中斷申請,并準備接收下一幀數據。
串行發送中斷標志TI和接收中斷標志RI是同一個中斷源,CPU事先不知道是發送中斷TI還是接收中斷RI產生的中斷請求,所以,在全雙工通信時,必須由軟件來判別。
復位時,SCON所有位均清0。(2)PCON(87H)
電源控制寄存器PCON中只有SMOD位與串行口工作有關,如圖7-9所示。
圖7-9 電源控制寄存器PCON SMOD(PCON.7)——波特率倍增位。
在串行口方式
1、方式2和方式3時,波特率和SMOD成正比,亦即當SMOD=1時,波特率提高一倍。
復位時,SMOD=0。
3、串行通信工作方式
根據實際需要,89C51串行口可設置4種工作方式,可有8位、10位或11位幀格式。方式0以8位數據為一幀,不設起始位和停止位,先發送或接收最低位。其幀格式如下:
方式1以10位為一幀傳輸,設有1個起始位(0),8個數據位和1個停止位(1)。其幀格式為:
方式2和方式3以11位為1幀傳輸,設有1個起始位(0),8個數據位,1個附加第9位和1個停止位(1)。其幀格式為:
附加第9位(D8)由軟件置1或清0。發送時在TB8中,接收時送RB8中。(1)串行口方式0 方式0為同步移位寄存器輸入/輸出方式,常用于擴展I/O口。
串行數據通過RXD輸入或輸出,而TXD用于輸出移位時鐘,作為外接部件的同步信號。
這種方式不適用于兩個89C51之間的直接數據通信,但可以通過外接移位寄存器來實現單片機的接口擴展。
圖7-10 方式0發送電路及時序
圖7-11 方式0接收電路及時序
例如,74LS164可用于擴展并行輸出口,74LS165可用于擴展輸入口。
在這種方式下,收/發的數據為8位,低位在前,無起始位、奇偶校驗位及停止位,波特率是固定的。
發送過程中,當執行一條將數據寫入發送緩沖器SBUF(99H)的指令時,串行口把SBUF中8位數據以fosc/12的波特率從RXD(P3.0)端輸出,發送完畢置中斷標志TI=1。方式0發送 9 時序如圖7-10(b)所示。寫SBUF指令在S6P1處產生一個正脈沖,在下一個機器周期的S6P2處數據的最低位輸出到RXD(P3.0)腳上;再在下一個機器周期的S3,S4,S5輸出移位時鐘為低電平,而在S6級下一個機器周期的S1,S2為高電平,就這樣講8位數據由低位至高位一位一位順序通過RXD線輸出,并在TXD腳上輸出fosc/12的移位時鐘,在“寫SBUF”有效后的第10個機器周期的S1P1將發送中斷標志TI置位。圖中,74LS164是TTL“串入并出”移位寄存器。
接收時,用軟件置REN=1(同時,RI=0),即開始接收。接收時序如圖7-11(b)所示。當使SCON中的REN=1(RI=0)時,產生一個正脈沖,在下一個機器周期的S3P1~S5P2,從TXD(P3.1)腳上輸出低電平的移位時鐘,在此機器周期的S5P2對P3.0腳采樣,并在本機器周期的S6P2通過串行口內的輸入移位寄存器將采樣值移位接收;在同一個機器的S6P1到下一個機器周期的S2P2,輸出移位時鐘為高電平。于是,講述句字節從地位至高位一位一位地接收下來病狀如SBUF中,在啟動接收過程(即寫SCON,清RI位)將SCON中的RI清0之后的第10個機器周期的S1P1,RI被置位。這一幀數據接收完畢,可進行下一幀接收。圖7-11(b)中,74LS165是TTL“并入串出”移位寄存器,QH端為74LS165的串行輸出端,經P3.0輸入至89C51。(2)串行口方式1 方式1真正用于串行發送或接收,為10位通用異步接口。TXD與RXD分別用于發送與接收數據。
收發一幀數據的格式為1位起始位、8位數據位(低位在前)、1位停止位,共10位。在接收時,停止位進入SCON的RB8,此方式的傳送波特率可調。串行口方式1的發送和接收時序如圖7-12(a)和(b)所示
圖7-12 方式1發送和接收時序
方式1發送時,數據從引腳TXD(P3.1)端輸出。當執行數據寫入發送緩沖器SBUF的命令時,就啟動了發送器開始發送。發送時的定時信號,也就是發送移位時鐘(TX時鐘),是由定時器T1(見圖7-7)送來的溢出信號經過16分頻或32分頻(取決于SMOD的值)而得到的,TX時鐘就是發送波特率。可見,方式1的波特率是可變的。發送開始的同時,SEND變為有效,將起始位向TXD輸出;此后每經過一個TX時鐘周期(16分頻計數器溢出一次為一個時鐘周期,因此,TX時鐘頻率由波特率決定。)產生一個移位脈沖,并由TXD輸出一個數據位;8位數據位全部發送完后,置為位TI,并申請中斷置TXD為1作為停止位,再經一個時鐘周期,SEND失效。
方式1接收時,數據從引腳RXD(P3.0)端輸入。接收是在SCON寄存器中REN位置1的前提下,并檢測到起始位(RXD上檢測到1→0的跳變,即起始位)而開始的。接收時,定時信號有兩種(如圖7-12(b)所示):一種是接收移位時鐘(RX時鐘),它的頻率和傳送波特率相同,也是由定時器T1的溢出信號經過16或32分頻而得到的;另一種是位檢測器采樣脈沖,它的頻率是RX時鐘的16倍,亦即在一位數據期間有16位檢測器采樣脈沖,為完成檢測,以16倍于波特率的速率對RXD進行采樣。
為了接受準確無誤,在正式接受數據之前,還必須判定這個1→0跳變是否是干擾引起的。為此,在這位中間(即一位時間分成16等份,在第7,第8及第9等份)連續對RXD采樣三次,取其中兩次相同的值進行判斷。這樣能較好地消除干擾的影響。當確認是真正的起始位(0)后,就開始接受一幀數據。當一幀數據接受完畢后,必須同時滿足以下兩個條件,這次接受才真正有效。
①RI=0,即上一幀數據接收完成時,RI=1發出的中斷請求已被響應,SBUF中數據已被取走。由軟件使RI=0,以便提供“接收SBUF已空”的信息。
②SM2=0或收到的停止位為1(方式1時,停止位進入RB8),則將接收到的數據裝入串行口的SBUF和RB8(RB8裝入停止位),并置位RI;如果不滿足,接收到的數據不能裝入SBUF,這意味著該幀信息將會丟失。
值得注意的是,在整個接收過程中,保證REN=1是一個先決條件。只有當REN=1時,才能對RXD進行檢測。
(3)串行口方式2和方式3 串行口工作在方式2和方式3均為每幀11位異步通信格式,由TXD和RXD發送與接收(兩種方式操作是完全一樣的,所不同的只是波特率)。
每幀11位,即1位起始位,8位數據位(低位在前),1位可編程的第9數據位和1位停止位。發送時,第9數據位(TB8)可以設置為1或0,也可將奇偶位裝入TB8,從而進行奇偶校驗;接收時,第9數據位進入SCON的RB8。
方式2和方式3的發送、接收時序如圖7-13所示。其操作與方式1類似。
圖7-13 方式
2、方式3發送和接收時序
發送前,先根據通信協議由軟件設置TB8(如作奇偶校驗位或地址/數據標志位),然后將要發送的數據寫入SBUF,即可啟動發送過程。串行口能自動把TB8取出,并裝入到第9位數據位的位置,再逐一發送出去。發送完畢,使TI=1。
接收時,使SCON中的REN=1,允許接收。當檢測到RXD(P3.0)端有1→0的跳變(起始位)時,開始接收9位數據,送入移位寄存器(9位)。當滿足RI=0且SM2=0,或接收到的第9位數 11 據為1時,前8位數據送入SBUF,附加的第9位數據送入SCON中的RB8,置RI為1;否則,這次接收無效,也不置位RI。
4、波特率設計
在串行通信中,收發雙方對發送或接收的數據速率有一定的約定,通過軟件對89C51串行口編程可約定四種工作方式。其中,方式0和方式2的波特率是固定的;而方式1和方式3的波特率是可變的,由定時器T1的溢出率來決定。
串行口的四種工作方式對應著三種波特率。由于輸入的移位時鐘來源不同,因此,各種方式的波特率計算公式也不同。(1)方式0的波特率
由圖7-14可見,方式0時,發送或接收一位數據的移位時鐘脈沖由S6(即第6個狀態周期,第12個節拍)給出,即每個機器周期產生一個移位時鐘,發送或接收一位數據。因此,波特率固定為振蕩頻率的1/12,并不受PCON寄存器中SMOD位的影響。
圖7-14 串行口方式0波特率的產生
方式0波特率 ≌ fosc / 12 注意,符號“≌”表示左面的表達式只是引擁右面表達式的數值,即右面的表達式是提供了一種計算的方法。(2)方式2的波特率
串行口方式2波特率的產生與方式0不同,即輸入的時鐘源不同,其時鐘輸入部分入圖7-15所示。
圖7-15 串行口方式2波特率的產生
控制接收與發送的移位時鐘由振蕩頻率fosc的第二節拍P2時鐘(即fosc/2)給出,所以,方式2波特率取決于PCON中SMOD位的值:
SMOD=0時,波特率為fosc的1/64; SMOD=1時,波特率為fosc的1/32。即方式2波特率≌2SMOD/64×fosc(3)方式1和方式3的波特率
方式1和方式3的移位時鐘脈沖由定時器T1的溢出率決定,如圖7-16所示。因此,89C51串行口方式1和方式3的波特率由定時器T1的溢出率與SMOD值同時決定。即方式
1、方式3波特率≌T1溢出率/n
圖7-16 串行口方式
1、方式3波特率的產生
當SMOD=0時,n=32;SMOD=1時,n=16。所以,可用下式確定方式1和方式3的波特率: 方式
1、方式3波特率≌2SMOD/32×(T1溢出速率)其中,T1溢出速率取決于T1的計數速率(計數速率≌fosc/12)和T1預置的處置。若定時器T1采用模式1時,波特率公式如下:
串行方式
1、方式3波特率≌2SMOD/32×(fosc/12)/(216-初值)表7-2列出了串行口方式
1、方式3常用波特率及其初值。
表7-2 常用波特率與其他參數選取關系
定時器T1用作波特率發生器時,通常選用定時器模式2(自動重裝初值定時器)比較實用。要設置定時器T1為定時方式(使C/T=0),讓T1計數內部振蕩脈沖,即計數速率為fosc/12(注意應禁止T1中斷,以免溢出而產生不必要的中斷)。先設定TH1和TL1定時即輸初值為X,那么每過“28-X”個機器周期,定時器T1就會產生一次溢出。
4、波特率設計
因此,T1溢出速率為
T1溢出速率≌(fosc/12)/(28-X)13
于是,可得出定時器T1模式2的初始值X:
例7-1:89C51單片機時鐘振蕩頻率為11.0592MHz,選用定時器T1工作模式2作為波特率發生器,波特率為2400b/s,求初值。
解:設置波特率控制為(SMOD)=0
所以,(TH1)=(TL1)=F4H。
系統晶體振蕩頻率選為11.0592MHz就是為了使初值為整數,從而產生精確的波特率。如果串行通信選用很低的波特率,可將定時器T1置于模式0或模式1,即13位或16位定時方式;但在這種情況下,T1溢出時,需要中斷服務程序重裝初值。中斷響應時間和執行指令時間會使波特率產生一定的誤差,可用改變初值的辦法加以調整。
7.2.2 89C51串行口的工作方式及應用
如前所述,89C51串行口的工作主要受串行口控制寄存器SCON的控制,另外,也和電源控制寄存器PCON有些關系。SCON寄存器用來控制串行口的工作方式,還有一些其他的控制作用。
89C51單片機串行口的四種工作方式傳送的數據位數敘述如下:
①方式0:移位寄存器輸入/輸出方式。串行數據通過RXD線輸入或輸出,而TXD線專用于輸出時鐘脈沖給外部移位寄存器。方式0可用來同步輸出或接收8位數據(最低位首先輸出),波特率固定為fosc/12,其中,fosc為單片機的時鐘頻率。
②方式1:10位異步接收/發送方式。一幀數據包括1位起始位(0),8位數據位和1位停止位(1)。串行接口電路在發送時能自動插入起始位和停止位;在接收時,停止位進入特殊功能寄存器SCON的RB8位。方式1的傳送波特率是可變的,可通過改變內部定時器的定時值來改變波特率。
③方式2:11位異步接收/發送方式。除了1位起始位、8位數據位、1位停止位之外,還可以插入第9位數據位。
④方式3:同方式2,只是波特率可變。
1、串行口方式0的應用
89C51單片機串行口基本上是異步通信接口,但在方式0時是同步操作。外接串入——并出或并入——串出器件,可實現I/O的擴展。
串行口方式0的數據傳送可以采用中斷方式,也可以采用查詢方式。無論哪種方式,都要借助于TI或RI標志。
在串行口發送時,或者靠TI置位后引起中斷申請,在中斷服務程序中發送下一組數據;或者通過查詢TI的值,只要TI為0就繼續查詢,直到TI為1后結束查詢,進入下一個字符的發送。
在串行口接收時,由RI引起中斷或對RI查詢來決定何時接收下一個字符。無論采用什么方式,在開始串行通信前,都要先對SCON寄存器初始化,進行工作方式的設置。在方式0中,SCON寄存器的初始化只是簡單地把00H送入SCON就可以了。
例7-2:用89C51串行口外接164串入——并出移位寄存器擴展8位并行口;8位并行口的每位都接一個發光二極管,要求發光二極管從左到右以一定延遲輪流顯示,并不斷循環。設發光二極管為共陰極接法,如圖7-17所示。
解:設數據串行發送采用中斷方式,顯示的延遲通過調用延遲程序DELAY來實現。程序清單:
ORG 0023H;串行口中斷入口
AJMP SBR;轉入串行口中斷服務程序
ORG 2000H;主程序起始地址
MOV SCON ,#00H;串行口方式0初始化
MOV A ,#88H;最左一位發光二極管先亮
CLR P1.0;關閉并行輸出
MOV SBUF,A;開始串行輸出 LOOP : SJMP $;等待中斷 SBR : SETB P1.0;啟動并行輸出
ACALL DELAY;顯示延遲一段時間
CLR TI;清發送中斷標志
RR A;準備右邊一位顯示
CLR P1.0;關閉并行輸出
MOV SBUF , A;再一次串行輸出
RETI;中斷返回
用方式0外加移位寄存器來擴展8位輸出口時,要求移位寄存器帶有輸出控制,否則串行移位過程也會反映到并行輸出口;另外,輸出口最好再接一個寄存器或鎖存器,以免在輸出門關閉使(STB=0)輸出又發生變化。
用方式0加上并入——串出移位寄存器可擴展一個8位并行輸入口。移位寄存器必須帶有預置/移位的控制端,由單片機的一個輸出端子加以控制,以實現先由8位輸入口置數到移位寄存器,然后再串行移位從單片機的串行口輸入到接收緩沖器,最后再讀入到CPU中。
例7-3:用89C51串行口外加移位寄存器165或166擴展8位輸入口,輸入數據由8個開關提供,另有一個開關K提供聯絡信號。當K=0時,表示要求輸入數據,輸入的8位為開關量,提供邏輯模擬子程序的輸入信號。如圖7-18所示。
解:串行口方式0的接收要用SCON寄存器中的REN位作為開關來控制。因此,初值化時,除了設置工作方式之外,還要使REN位為1,其余各位仍然為0。
對RI采用查詢方式來編寫程序,當然,先要查詢開關K是否閉合。程序清單:
START: MOV SCON ,#10H;串行口方式0初始化
JB P1.1 ,$;開關K未閉合,等待
SETB P1.0;P/S=1,并行置入數據
CLR P1.0;PS=0,開始串行移位
JNB RI ,$;查詢RI
CLR RI;查詢結束,清RI
MOV A ,SBUF;讀數據到累加器
ACALL LOGSIM;進行邏輯模擬
SJMP START;準備下一次模擬
2、串行口方式1的發送和接收
例7-4:89C51串行口按雙工方式收發ASCII字符,最高位用來作奇偶校驗位,采用可校驗方式,要求傳送的波特率為1200b/s。編寫有關的通信程序。
解:7位ASCII碼加1位奇校驗共8位數據,故可采用串行口方式1。
89C51單片機的奇偶校驗位P是當累加器A中1的數目為奇數時,P=1。如果直接把P的值放入ASCII碼的最高位,恰好成了奇偶校驗,與要求不符。因此,要把P的值取反以后放入ASCII碼最高位,才是要求的奇校驗。
雙工通信要求收、發能同時進行。實際上,收、發操作主要是在串行接口進行,CPU只是把數據從接收緩沖器讀出和把數據寫入發送緩沖器。數據傳送用中斷方式進行,響應中斷以后,通過檢測是RI置位還是TI置位來決定CPU是進行發送操作還是接收操作。發送和接收都通過調用子程序來完成,設發送數據區的首地址為20H,接收數據區的首地址為40H,fosc為6MHz,通過查波特率初值(表7-2)可知定時器的初裝值為F3H。定時器T1采用工作模式2,可以避免計數溢出后用軟件重裝定時初值的工作。
程序清單: 主程序
MOV TMOD ,#20H;定時器1設為模式2 MOV TL1 , #0F3H;定時器初值 MOV TH1 ,#0F3H;8位重裝值
SETB TR1;啟動定時器1 MOV SCON ,#50H;設置為方式1,;REN=1 MOV R0 ,#20H;發送數據區首址 MOV R1 ,#40H;接收數據取首址 ACALL SOUT;先輸出一個字符 SETB ES SETB EA SJMP $;等待中斷 中斷服
ORG 0023H;串行口中斷入口
AJMP SBR1;轉至中斷服務程序 ORG 0100H SBR1: JNB RI ,SEND;TI=1,為發送中斷 ACALL SIN;RI=1,為接收中斷 SJMP NEXT;轉至統一的出口 SEND: ACALL SOUT;調用發送子程序 NEXT: RETI;中斷返回
發送子程序
SOUT: CLR TI MOV A ,@R0;取發送數據到A MOV C ,P;奇偶標識賦予C CPL C;奇校驗
INC R0;修改發送數據指針 MOV SBUF ,A;發送ASCII碼 RET;返回 接收子程序 SIN: CLR RI MOV A ,SBUF;讀出接收緩沖區內容 MOV C ,P;取出校驗位 CPL C;奇校驗
ANL A ,#7FH;刪去校驗位
MOV @R1 ,A;讀入接收緩沖區
INC RI;修改接收數據指針 RET;返回
在主程序中已初始化REN=1,則允許接收。以上程序基本上具備了全雙工通信的能力,但不能說很完善。例如,再接收子程序中,雖然檢驗了奇偶校驗位,但沒有進行出錯處理;另外,發送和接收數據區的范圍都很有限,也不能滿足實際需要。但有了一個基本的框架之后,逐漸完善還是可以做到的。
例7-5:采用查詢方式由串行口發送帶奇偶校驗位的數據塊。
解:本理由內部RAM單元20H-3FH取出ASCII碼數據,在最高位上加奇偶校驗位后由串行口發出。采用8位異步通信方式,波特率為1200b/s,fosc=11.059MHz。
由要求可知,應把串行口設置為方式1,采用定時器1模式2作為波特率發生器,預置值(TH1)=0E8H。
程序清單: 主程序;
MOV TMOD ,#20H;設置定時器1為模式2 MOV TL1 ,#0E8H;初值,波特率為1200b/s MOV TH1 ,#0E8H SETB TR1;啟動T1運行
MOV SCON ,#01000000B;設置串行口為方式1 MOV R0 ,#20H MOV R7 ,#32;數據塊長度 LOOP: MOV A ,@R0 ACALL SP-OUT JNB P ,ERROR;傳輸出錯處理,由SP-OUT中“CPL C”結果決定
INC R0 DJNZ R7 ,LOOP ??
串行口發送子程序(奇校驗);
SP-OUT: MOV C ,PSW.0;設置奇校驗位,校驗位P=1為奇校驗
CPL C;奇校驗(無此指令位偶校驗)MOV ACC.7 ,C;ACC.7補0或1 MOV SBUF ,A;啟動串行口發送過程
CLR TI;清TI標志,允許在發送 RET ERROR:(略)
例7-6:由串行口接收帶奇偶校驗位的數據塊。
解:采用查詢方式,本例與上例相呼應,接收器把接收到的32B數據存放在20H-30H單元內,波特率同上,若奇偶校驗出錯則置進位位為1。
程序清單: 主程序;
MOV SCON ,#01010000B;設串口方式1,允許接收
MOV TMOD ,#20H;設置定時器T1為模式2 MOV TL1 ,#0E8H;初值,波特率為1200b/s MOV TH1 ,#0E8H SETB TR1;啟動T1運行
MOV R0 ,#20H MOV R7 ,#32;數據塊長度 LOOP: ACALL SP-IN;調接收一幀子程序
JC ERROR;由SP-IN中“CPL C”結果決定 MOV @R0 ,A;存放接收的數據 INC R0 DJNZ R7 ,LOOP ??
接收一幀子程序;
SP-IN: JNB RI ,$;RI由硬件置位
CLR RI;軟件清除RI
MOV A ,SBUF
MOV C ,P;檢查奇校驗位
CPL C;置C為主程序“JC ERROR”用
ANL A ,#7FH;去掉奇校驗位
RET ERROR:(略)
例7-7:利用串行口和堆棧技術發送字符串常量。解:
上面兩個例子中,發送和接收的都是一些變量數據,且存放在內部RAM單元中。現說明如何利用堆棧技術發送存放在程序存儲器內的字符串常量。
下面的例子中,這些字符串是發送給CRT終端的,以回車符(CR)和換行符(LF)開始,以換碼符(ESC)為結尾。下面是程序片斷:
CR EQU 0DH;ASCII回車符 LF EQU 0AH;ASCII換行符 ESC EQU 1BH;ASCII換碼符 ??
MOV TMOD ,#20H;設置定時器T1為模式2 18 MOV TL1 ,#0FDH;設波特率位9600b/s ;(fosc=11.059MHz)MOV TH1 ,#0FDH SETB TR1;啟動T1運行 MOV SCON ,#01000000B;設置串行口方式1 ACALL XSTRING DB CR ,LF DB ‘NU&BIAA’;字符串常量 DB ESC ??
XSTRING: POP DPH;把第1個字符的地址裝入DPTR POP DPL XSTR-1: CLR A;設偏移量為零 MOVC A ,@A+DPTR;取第1個字符 XSTR-2: MOV SBUF ,A;啟動一幀發送過程 JNB TI ,$;等待發送一幀完 CLR TI INC DPTR;指向下一字符 CLR A;偏移量為0 MOVC A ,@A+DPTR;取下一字符
CJNE A ,#ESC ,XSTR-2;讀到ESC符時,;停止發送 MOV A ,#1 JMP @A+DPTR;返回執行ESC符后 ;的一條指令,即接著
;執行背景程序
2、串行口方式1的發送和接收
說明:程序中采用了“ACALL XSTRING”指令,而實際上由XSTRING開始的程序段形式上并不構成一個子程序,因為子程序,因為子程序應由RET作為結尾。
采用ACALL指令的目的在于利用子程序調用協議,即執行調用指令后,把一個單元(存放常量CR)的地址壓入了堆棧。
這樣,XSTRING段的第1,2條指令執行后,就把放置字符常量CR的單元地址置入DPTR了。ESC后一個單元應是背景程序中送完字符串后要執行的那條指令,故執行完XSTRING程序段的最后2條指令,將繼續執行背景程序。
3、串行口方式
2、方式3的發送和接收
串行口方式 2與方式 3基本一樣(只是波特率設置不同),接收/發送 11位信息:開始為l位起始位(0),中間8位數據位,數據位之后為1位程控位(由用戶置SCON的TB8決定),最后是1位停止位(1)。只比方式l多了一位程控位。
例7-8:用第9個數據位作奇偶校驗位,編制串行口方式2的發送程序。解:設計一個發送程序,將片內RAM 50H~5FH中的數據串行發送;串行口設定為方式2狀態,TB8作奇偶校驗位。在數據寫入發送緩沖器之前,先將數據的奇偶位P寫入TB8,這時,第9位數據作奇偶校驗用。
方式2發送程序流程圖如圖7-19所示。
程序清單如下:
TRT: MOV SCON ,#80H;方式2設定
MOV PCON ,#80H;取波特率為fosc/32 MOV R7 ,#10H;數據長度10H→R7 LOOP: MOV A ,@R0;取數據→A MOV C ,PSW.0;P→TB8 MOV TB8 ,C MOV SBUF ,A;數據→SBUF,啟動發送 WAIT: JBC TI ,CONT;判斷發送中斷標志
SJMP WAIT CONT: INC R0 DJNZ R7 ,LOOP RET 例7-9 編制一個串行口方式2接收程序,并核對奇偶校驗位。
解:根據上面介紹的特點,在方式
2、方式3的發送過程中,將數據和附加在TB8中的奇偶位一塊發向對方。因此,作為接收的一方應設法取出該奇偶位進行核對,相應的接收程序段為:
RRR: MOV SCON ,#90H;選方式2,并允許接收(REN=1)LOOP: JBC RI ,RECEIV;等待接收數據并清RI SJMP LOOP RECEIV: MOV A ,SBUF;將接收到的字符取出后,送到ACC。注意,;傳送指令影響PSW,產生接收端的奇偶值 JB PSW.0 ,ONE;判斷接收端的奇偶值
JB RB8 ,ERR;判斷發送端的奇偶值
SJMP RIGHT ONE: JB RB8 ,ERR RIGHT: ??;接收正確
??
ERR: ?? ;接收有錯
當接收到一個字符時,從SBUF轉移到ACC中時會產生接收端的奇偶值,而保存在RB8中的值為發送端的奇偶值,兩個奇偶值應相等,否則接收字符有錯。發現錯誤要及時通知對方重發。
例7-10:編制一個發送程序,將片內RAM中50H—5FH的數據串行發送。串行口設定為工作方式2,TB8作奇偶校驗位。
解:在數據寫入發送SBUF之前,先將數據的奇偶標志P寫入TB8,此時,第9位數據便可作奇偶校驗用。可采用查詢和中斷兩種方式發送。
(1)采用查詢方式的程序段
ORG 0000H AJMP MAIN;上電,轉向主程序
ORG 0100H;主程序
MAIN: MOV SCON ,#80H;設工作方式2 MOV PCON ,#80H;取波特率為fosc/32 MOV R0 ,#50H;首址50H送R0 MOV R7 ,#10H;數值長度送R7 LOOP: MOV A ,@R0;取數據
MOV C ,PSW.0;P→C MOV TB8 ,C;奇偶標志送TB8 MOV SBUF ,A;發送數據 WAIT: JBC TI ,CONT AJMP WAIT;等待中斷標志TI=1 CONT: INC R0 DJNZ R7 ,LOOP;數值尚未發送完,繼續發送下一個數據
SJMP $ END(2)采用中斷方式的程序段 ORG 0000H AJMP MAIN;上電,轉向主程序 ORG 0023H;串行口的中斷入口地址 AJMP SERVE;轉向中斷服務程序 ORG 0100H;主程序 MAIN: MOV SCON ,#80H MOV PCON ,#80H MOV R0 ,#50H MOV R7 ,#0FH SETB ES;允許串行口中斷 SETB EA;CPU允許中斷 MOV A ,@R0 MOV C ,PSW.0;P→C MOV TB8 ,C MOV SBUF ,A;發送第一個數據 SJMP $ SERVE: CLR TI;清除發送中斷標志 INC R0;修改數據地址 MOV A ,@R0 MOV C ,PSW.0;P→C MOV TB8 ,C MOV SBUF ,A;發送數據
DJNZ R7 ,ENDT;判斷數據塊發送完否
;若未發 送完,則轉ENDT CLR ES;若發送完,則禁止串行口中斷 ENDT: RETI;中斷返回 END 例7-11:編制一個接收程序,將接收的16B數據送入片內RAM的5OH—5FH單元中。設串行口工作于方式 3,波特率為2400b/s。
解:方式3為11位異步通信方式,波特率取決于TI的溢出率。查 表7-2可知,當晶振為11.059MHz,波特率為2400b/s時,可取SMOD=0。
源程序如下:
MAIN: MOV TMOD ,#20H;設TI工作于模式2 MOV TH1 ,#0F4H;賦循環計數初值 MOV TL1 ,#0F4H;賦計數值
SETB TR1;啟動定時器TI MOV R0 ,#50H;首地址送R0 MOV R7 ,#10H;數據長度送R7 MOV SCON ,#0D0H;串行口工作與方式3,可接收 MOV PCON ,#00H;設SMOD=0 WAIT: JBC RI ,PR1;接收完一幀數據,清RI,轉PR1 SJMP WAIT;否則等待 PR1: MOV A ,SBUF;讀入數據 JNB P ,PNP;P=0,轉PNP JNB RB8 ,PER;P=1,RB8=0,轉出錯處理 SJMP RIGHT PNP: JB RB8 ,PER;P=0,RB8=1,轉出錯處理 RIGHT: MOV @R0 ,A;數據送內存
INC R0;修改地址指針
DJNZ R7 ,WAIT;數據未接收完,繼續接收下一個數據 CLR PSW.5;置正確接收完畢標志F0=0 RET PER: SETB PSW.5 RET 22 7.3 RS-232C標準接口總線及串行通信硬件設計
前面介紹了有關串行通信的基本知識及單片機的串行口結構。下面介紹PC機與單片機間串行通信的硬件和軟件設計。
在工業自動控制、智能儀器儀表中,單片機的應用越來越廣泛。隨著應用范圍的擴大以及根據解決問題的需要,對某些數據要做較復雜的處理。由于單片機的運算功能較差,對數據進行較復雜的處理時,往往需要借助計算機系統。因此,單片機與PC機進行遠程通信更具有實際意義。利用89C51單片機的串行口與PC機的串行口COM1或COM2進行串行通信,將單片機采集的數據傳送到PC機中,由PC機的高級語言或數據庫語言對數據進行整理及統計等復雜處理;或者實現PC機對遠程前沿單片機進行控制。
在實現計算機與計算機、計算機與外設間的串行通信時,通常采用標準通信接口、這樣就能很方便地把各種計算機、外部設備、測量儀器等有機地連接起來,進行串行通信。RS-232C是由美國電子工業協會(EIA)正式公布的,在異步串行通信中應用最廣的標準總線(C表示此標準修改了三次)。它包括了按位串行傳輸的電氣和機械方面的規定,適用于短距離或帶調制解調器的通信場合。為了提高數據傳輸率和通信距離,EIA又公布了RS-422,RS-423和RS-485串行總線接口作準。
7.3.1 RS-232C標準接口總線
ELA RS-232C是目前最常用的串行接口標準,用于實現計算機與計算機之間、計算機與外設之間的數據通信。
該標準的目的是定義數據終端設備(DTE)之間接口的電氣特性。一般的串行通信系統是指微機和調制解調器(modem),如圖7-20。調制解調器叫數據電路終端設備(簡稱DCE)。RS-232C提供了單片機與單片機、單片機與PC機間串行數據通信的標準接口。通信距離可達到 15 m。
RS-232C接口的具體規定如下:
(l)范圍
RS-232C標準適用于DCE和 DTE間的串行二進制通信,最高的數據速率為 19.2 kb/s。如果不增加其他設備的話,RS-232C標準的電纜長度最大為15 m。
RS-232C不適于接口兩邊設備間要求絕緣的情況。(2)RS-232C的信號特性
為了保證二進制數據能夠正確傳送,設備控制準確完成,有必要使所用的信號電平保持一致。為滿足此要求,RS-232C標準規定了數據和控制信號的電壓范圍。由于RS-232C是在TTL集成電路之前研制的,所以它的電平不是+5V和地,而是采用負邏輯,規定+3V—15V之間的任意電壓表示邏輯0電平,-3V—15V之間的任意電壓表示邏輯1電平。(3)RS-232C接口信號及引腳說明
表7-3給出了RS-232C串行標準接口信號的定義以及信號分類。串行通信信號引腳分為兩類: 一類為基本的數據傳送信號引腳,另一類是用于MODEM控制的信號引腳。
①基本的數據傳送信號
基本的數據傳送信號引腳有TXD,RXD,GND 3個。
TXD為數據發送信號引腳。數據由該腳發出,送上通信線,在不傳送數據時,異步串行通信接口維持該腳為邏輯1。
RXD為數據接收信號引腳。來自通信線的數據從該引腳進入。在無接收信號時,異步串行通信接口維持該腳為邏輯1。
GDN為地信號引腳。GND是其他引腳信號的參考電位信號。
“在零調制解調器”連接中,最簡單的形式就是只使用上述3個引腳,如圖7-21。其中,收發端的TXD與RXD交錯相連,GND與GND相連。
②MODEM控制(握手)信號引腳
從計算機到MODEM的信號引腳包括DTR和RTS兩個: DTR信號引腳用于通知MODEM,計算機已經準備好。RTS信號引腳用于通知MODEM,計算機請求發送數據。
從MODEM到計算機的信號包括DSR,CTS,DCD,RI共4個。DSR信號引腳用于通知計算機,MODEM已經準備好。
CTS信號引腳用于通知計算機,MODEM可以接收傳送數據。DCD信號引腳用于通知計算機,MODEM已與電話線路連接好。RI信號引腳為振鈴指示,用于通知計算機有來自電話網的信號。近年的RS-232C接口都是采用9針的連接器,(25針中有很多引腳是無意義的),如圖7-22所示。
7.3.2信號電氣特性與電平轉換
1.電氣特性
為了增加信號在線路上的傳輸距離和提高抗干擾能力,RS-232C提高了信號的傳輸電平。該接口采用雙極性信號、公共地線和負邏輯。
使用RS-232C,數據通信的波傳率允許范圍為0b/s—20kb/s。在使用 19200b/s進行通信時,最大傳送距離在 20 m之內。降低彼特率可以增加傳輸距離。
2.電平轉換
RS-232C規定的邏輯電平與一般微處理器、單片機的邏輯電平是不一致的。因此,在實際應用的,必須把微處理器的信號電平(TTL電平)轉換為RS-232C電平,或者對兩者進行逆轉換。這兩種轉換是通過專用電平轉換芯片實現的。
MAX232、MAX202和早期的MC1488,75188等芯片可實現TTL→RS-232C的電平轉換;MC1489,75189等芯片可實現RS-232C→TTL的電平轉換。
MC1488,MC1489的電路結構與引腳排列見圖7-23。
圖7-23 MC1488,MC1489的電路結構與引腳排列
MC1488由3個“與非”門和1個反相器構成。Vcc可接+15V或+12V,VEE可接-15V或-12V,輸入為TTL電平,輸出為RS-232C電平。
MC1489由4個反相器組成。Vcc接+5V,每個反相器都有一個控制端,它可接到電源電壓上,用以調整輸入的門限特性,也可通過一濾波電容接地。
單片機的串行口通過電平轉換芯片所組成的RS-232C標準接口電路如圖7-24所示。
圖7-24 RS-232C標準接口電路 7.3.3單片機與PC機通信的接口電路
利用PC機配置的異步通信適配器,可以很方便地完成IBM-PC系列機與MCS-51單片機的數據通信。
PC機與89C51單片機最簡單的連接是零調制三線經濟型,這是進行全雙工通信所必須的最少數目的線路。
由于89C51單片機輸入、輸出電平為TTL電平,而IBM-PC機配置的是RS-232C標準串行接口,二者的電氣規范不一致,因此,要完成PC機與單片機的數據通信,必須進行電平轉換。1.MAX232芯片簡介
MAX232芯片是MAXIM公司生產的、包含兩路接收器和驅動器的IC芯片,適用于各種EIA-232C和V.28/V.24的通信接口。MAX232芯片內部有一個電源電壓變換器,可以把輸入的+5V電源電壓變換成為RS-232C輸出電平所需的+10V電壓。所以,采用此芯片接口的串行通信 25 系統只需單一的+5V電源就可以了。對于沒有+12V電源的場合,其適應性更強。加之其價格適中,硬件接口簡單,所以被廣泛采用。
MAX232芯片的引腳結構如圖7-25所示。
圖7-25 MAX232芯片引腳圖
MAX232芯片的典型工作電路如圖7-26所示。
圖7-26 MAX232典型工作電路圖
圖7-26中上半部分電容C1,C2,C3,C4及V+,V-是電源變換電路部分。
在實際應用中,器件對電源噪聲很敏感。因此,VCC必須要對地加去耦電容C5,其值為0.lμF。電容C1,C2,C3,C4取同樣數值的鉭電解電容1.0μF/16V,用以提高抗干擾能力,在連接時必須盡量靠近器件。
下半部分為發送和接收部分。實際應用中,T1IN,T2IN可直接接TTL/CMOS電平的MCS-51單片機的串行發送端 TXD;R1OUT,R2OUT可直接接TTL/CMOS電平的MCS-51單片機的串行接收端RXD;T1OUT,T2OUT可直接接PC機的 RS-232串口的接收端RXD;R1IN,R2IN可直接接PC機的RS-232串口的發送端TXD。
2.采用 MAX232芯片接口的 PC機與 MCS-5l單片機串行通信接口電路
現從MAX232芯片中兩路發送接收中任選一路作為接口。要注意其發送、接收的引腳要對應。如使T1IN接單片機 的發送端TXD,則PC機的RS-232的接收端RXD一定要對應接T1OUT引腳。同時,R1OUT接單片機的RXD引腳,PC機的 RS-232的發送端TXD對應接R1IN引腳。其接口電路如圖7-27所示。
圖7-27采用 MAX232接口串行通信電路
7.4 89C51與89C51點對點異步通信
7.4.1通信協議
要想保證通信成功,通信雙方必須有一系列的約定,比如:
作為發送方,必須知道什么時候發送信息,發什么,對方是否收到,收到的內容有沒有錯,要不要重發,怎樣 通知對方結束等等。作為接收方,必須知道對方是否發送了信息,發的是什么,收到的信息是否有錯,如果有錯怎 樣通知對方重發,怎樣判斷結束等。
這種約定就叫做通信規程或協議,它必須在編程之前確定下來。要想使通信雙方能夠正確交換信息和數據,在 協議中對什么時候開始通信,什么時候結束通信,何時交換信息等等都必須作出明確的規定。只有雙方遵守這些規 定才能順利地進行通信。
7.4.2波特率設置
在串行通信中,一個重要的指標是波恃率,它反映了串行通信的速率,也反映了對于傳輸通道的要求。波特率越高,要求傳輸通道的頻帶越寬。一般異步通信的波特率在 50 b/s—600 b/s之間。
由于異步通信雙方各用自己的時鐘源,要保證捕捉到的信號正確,最好采用較高頻率的時鐘。一般選擇時鐘頻率比波特率高16倍或64倍。若是時鐘頻率等于波特率,則頻率稍有偏差便會產生接收錯誤。
在異步通信中,收、發雙方必須事先規定兩件事:
一是字符格式,即規定字符各部分所占的位數是否采用奇偶校驗以及校驗的方式(偶校驗還是奇校驗)等通信協議;
二是采用的波特率以及時鐘頻率和波特率的比例關系。
89C51的串行通信的波特率(由圖7-16可知)由定時器T1的溢出率獲得(僅指串行口方式
1、方式3時),當串行口工作于方式1或方式3時,波特率為
其中,k為定時器1的位數
定時器模式0,k=13;
定時器模式1,k=16;
定時器模式2和摸式3.k=8。
若定時器T1工作于模式1,采用11.059MHz的晶振,要求利用定時器1產生1200b/s的波特率,則
令SMOD=0,可算得初值為
那么,TH1的初值為0FFH,TL1的初值為0E8H。有關的程序如下:
MAIN: SETB PT1;設定T1為高中斷優先級
SETB EA;開放CPU中斷
SETB ET1;開放定時器T1中斷
MOV TMOD ,#01H;置定時器T1為莫時1 MOV TL1 ,#0E8H;裝入初值
MOV TH1 ,#0FFH MOV PCON ,#00H;SMOD=0
SETB TR1;啟動T1運行
??
如果串行口工作于方式1,T1作為波特率發生器,需在T1溢出中斷服務程序中重裝初值。T1溢出中斷服程序:
MOV TL1 ,#0E8H;重新裝入初值 MOV TH1 ,#0FFH RETI;中斷返回
由于T1模式2是定時器自動重裝載的操作模式,當定時器T1工作于模式2時,可直接用作串行口的波特率發生器。
與上例相同,算得重裝載值
有關程序為:
MOV TMOD ,#20H;置T1為模式2 MOV TL1 ,#0E8H;裝入初值 MOV TH1 ,#0E8H MOV PCON ,#00H;SMOD=0 SETB TR1;啟動T1運行
MOV SCON ,#01000000B;設置串行口為方式1 ??
除非波特率很低,一般都采用T1模式2。因為當T1溢出后,參數自動裝入,可避免不必要的中斷請求。
在第二節中,表7-2給出了晶振fosc=6MHz或12MHz時,常用波特率和定時器的初裝值。但要注意,表中的初裝值和波特率之間是有一定誤差的。
若晶指fosc=11.095MHz,設置波特率為9600b/s,則定時器T1的初裝值為0FDH。設定時器操作于模式2,SMOD=0。
若要求比較準確的波特率,只能靠調整單片機的時鐘頻率fosc來得到。
7.4.3通信程序舉例
例7-12:設甲機發送,乙機接收。串行接口工作于方式3(每幀數據為11位,第9位用于奇偶校驗),兩機均選用 6.0000MHz的振蕩頻率,波特率為 24O0 b/s。通信的功能為:
甲機:將片外數據存儲器4000H—407FH單元的內容向乙機發送,每發送一幀信息,乙機對接收的信息進行奇偶校驗。此例對發送的數據作偶校驗,將P位值放在TB8中。若校驗正確,則乙機向甲機回發“數據發送正確”的信號(例中以00H作為應答信號)。甲機收到乙機“正確”的應答信號后再發送下一個字節。若奇偶校驗有錯,則乙機發出“數據發送不正確”的信號(例中以FFH作為應答信號)。甲機接收到“不正確”應答信號后,重新發送原數據,直至發送正確。甲機將該數據塊發送完畢后停止發送。
乙機:接收甲機發送的數據,并寫入以4000H為首址的片外數據存儲器中。每接收一幀數據,乙機對所接收的數據進行奇、偶校驗,并發出相應的應答信號,直至接收完所有數據。解:
(1)計算定時器計數初值X 29 將已知數據fosc=6MHZ,波特率=2400b/s代人,得
取SMOD=0時,X=249.49。因取整數誤差過大,故設SMOD=1,則X=242.98≈243=F3H。因此,實際波特率=2403.85 b/S。
(2)能實現上述通信要求的甲、乙機的流程圖如圖7-28,圖7-29所示。
圖7-28 甲機發送流程
圖7-29 已機發送流程
(3)源程序
①甲機 主程序 ORG 0000H LJMP MAIN;上電,轉向主程序 ORG 0023H;串行口的中斷入口地址 LJMP SERVE1;轉向甲機中斷服務程序 ORG 2000H;主程序
MAIN: MOV TMOD ,#20H;設T1工作與模式2 MOV TH1 ,#0F3H;賦計數初值 MOV TL1 ,#0F3H;賦計數值
SETB TR1;啟動定時器T1 MOV PCON ,#80H;設SMOD=1 MOV SCON ,#0D0H;置串行口方式3,允許接收 MOV DPTR ,#4000H;置數據塊首址 MOV R0 ,#80H;置發送字節數初值 SETB ES;允許串行口中斷 SETB EA;CPU開中斷
MOVX A ,@DPTR;取第一個數據發送 MOV C ,P MOV TB8 ,C;奇偶標志送TB8 MOV SBUF ,A;發送數據 SJMP $;等待中斷 中斷服務程序
SERVE1: JBC RI ,LOOP;是接收中斷,清除RI,轉入接收
;乙機的應答信息
CLR TI;是發送中斷,清除此中斷標志 SJMP ENDT LOOP: MOV A ,SBUF;取乙機的應答信息 CLR C SUBB A ,#01H;判應答信號是#00嗎? JC LOOP1;是#00H,發送正確
;(#00H-#01H),C=1,轉LOOP1 MOVX A ,@DPTR;否則甲機重發 MOV C ,P MOV TB8 ,C MOV SBUF ,A;甲機重發原數據 SJMP ENDT LOOP1: INC DPTR;修改地址指針,準備發送下 一個數據 MOVX A ,@DPTR MOV C ,P MOV TB8 ,C MOV SBUF ,A;發送
DJNZ R0 ,ENDT;數據塊未發送完,返回繼續發送 CLR ES;全部發送完,禁止串行口中斷 ENDT: RETI;中斷返回 END ①乙機主程序;
ORG 0000H LJMP MAIN;上電,轉向主程序 ORG 0023H;串行口的中斷入口地址 LJMP SERVE2;轉向乙機中斷服務程序 ORG 2000H;主程序
MAIN: MOV TMOD ,#20H;設T1工作與模式2 MOV TH1 ,#0F3H;賦計數初值 MOV TL1 ,#0F3H;賦計數值
SETB TR1;啟動定時器T1 MOV PCON ,#80H;設SMOD=1 MOV SCON ,#0D0H;置串行口方式3,允許接收 MOV DPTR ,#4000H;置數據區首址 MOV R0 ,#80H;置接收字節數初值 SETB ES;允許串行口中斷 SETB EA;CPU開中斷 SJMP $;等待中斷 中斷服務程序:
SERVE2: JBC RI ,LOOP;是接收中斷,清除此中斷 標志,轉LOOP(接收)CLR TI;是發送中斷,清除此中斷 標志,中斷返回 SJMP ENDT LOOP: MOV A ,SBUF;接收(讀入)數據 MOV C ,P;奇偶標志送C 32 JC LOOP1;為奇數,轉LOOP1 ORL C ,RB8;為偶數,檢測RB8 JC LOOP2;奇偶校驗錯,轉LOOP2 SJMP LOOP3 LOOP1: ANL C ,RB8;檢測RB8 JC LOOP3;奇偶校驗正確,轉LOOP3 LOOP2: MOV A ,#0FFH MOV SBUF ,A;發送“不正確”應答信號 SJMP ENDT LOOP3: MOVX @DPTR ,A;存放接收數據 MOV A ,#00H MOV SBUF ,A;INC DPTR;DJNZ R0 ,ENDT;CLR ES;ENDT: RETI;END 發送“正確”應答信號 修改數據區指針
數據塊未接收完,返回
所有數據接收完畢,禁止串行口中斷中斷返回 33
7.5 89C51與PC機間通信軟件的設計
將一臺IBM-PC機和若干臺89C51單片機構成小型分散控制或測量系統,是目前微計算機應用的一大趨勢。
在這樣的系統中,以89C51芯片為核心的智能式測控儀表(作為從機)既能完成數據采集、處理和各種控制任務,又可將數據傳送給PC機(作為主機),PC機將這些數據進行加工處理或顯示、打印,同時將各種控制命令送給各個從機,以實現集中管理和最優控制。顯然,要組成這樣的系統,首先要解決PC機與各單片機之間的數據通信問題,這是一個多機通信問題。在解決該問題之前,先來討論一下PC機與一臺89C51之間點對點(亦即雙機)通信的軟件設計。
7.5.1 PC機通信軟件設計
1.通信協議
波特率:1200b/s;
信息格式:8位數據位,1位停止位,無奇偶檢驗;
傳送方式:PC機采用查詢方式收發數據;89C51采用中斷方式接收,查詢方式發送; 校驗方式:累加和校驗;
握手信號:采用 軟件握手。發送方在發送之前先發一聯絡信號(用“?”號的ASCII碼,接收方接到“?”號后回送一個“·”號作為應答信號),隨后依次發送數據塊長度(字節數),發送數據,最后發送校驗和。收方在收到發送方發過來的校驗和后與自己所累加的校驗和相比較,相同則回送一個“0”,表示正確傳送并結束本次的通信過程;若不相同則回送一個“F”,并使發送方重新發送數據,直到接收正確為止。2.PC機發送文件子程序
首先介紹通過串口發送一個文件的函數sendf()。規定欲發送的這個文件存在當前盤上,并且為了便于說明問題,只傳送總字節小于256個字符的文件。
sendf()函數程序流程圖如圖7-30所示。
圖7-30 PC機發送文件子函數sendf()流程圖 PC機發送文件子函數sendf()程序清單如下:
3、PC機接收文件子程序
接收函數receivef()采用查詢方式從串口接收一個總字節數小于256個字符的文件,接收的文件也存于當前盤上。
接收文件子函數receivef()的程序流程圖如圖7-31所示。
圖7-31 PC機接收文件子函數receivef()流程圖
4、PC機主程序(函數)
在有了上述發送和接收文件兩個子函數之后,主函數的編寫就非常簡單了。主函數的工作只是在完成串口初始化后,根據鍵入的命令來決定是發送文件還是接收文件。
主函數流程圖如圖7-32所示。
圖7-32 PC機主函數流程圖
PC機主函數如下:
這里采用的是帶參主函數main(int argc,char *argv[ ])。其中,argc是一個整型變量,argv[ ]是一個字符型指針數組。利用main函數的參數可以使主程序從系統得到所需數據(也就是說帶參函數可直接從DOS命令行中得到參數值,當然,這些值是字符串)。當程序運行時(在DOS下執行.EXE文件),可以根據輸入的命令行參數進行相應的處理。
例如,執行程序mypro時,若要從當前盤上將名為f1.c的文件從串口發送出去,需鍵入下述命令:
mypro s f1.c 其中,mypro是源文件mypro.c經編譯連接后生成的可執行文件 mypro.exe。鍵入命令:
mypro r f2.c 可以從串口接收若干字符,并寫入當前盤上名為f2.c的文件中去。
7.5.2 89C51通信軟件設計
1、單片機查詢發送子程序
本程序將片外RAM從1000H開始的小于256B的數據從串行口發送出去,發送的數據字節數在R7中,用R6作累加和寄存器。程序流程圖如圖7-33所示。
圖7-33 單片機查詢發送子程序流程圖
單片機查詢發送子程序如下:
SEND: MOV A,#3FH MOV SBUF,A JNB TI,$ 37 CLR TI;發‘?’號,即3FH JNB RI,$ CLR RI MOV A,SBUF CJNE A,#2EH,SEND;應答信號是‘.’,即
; 2EH,則發字節數 MOV A,R7 MOV R3,A;暫存總字節數 MOV SBUF,A JNB TI,$ CLR TI MOV R6,#00H MOV DPTR,#1000H SEND1: MOVX A,@DPTR MOV SBUF,A;發送一個字符 JNB TI,$ CLR TI ADD A,R6;計算校驗和 MOV R6,A INC DPTR DJNZ R7,SEND1;計數器(R7)不為零則轉SEND1 MOV A,R6 MOV SBUF,A JNB TI,$ CLR TI;發送校驗和 MOV A,SBUF CJNE A,#46H,SEND2;如收到應答是‘F’,即
;46H,則重發數據 RET SEND2: MOV DPTR,#1000H MOV R6,#00H MOV A,R3 MOV R7,A AJMP SEND1
2、單片即接收中斷服務子程序
在中斷服務子程序中,為了區別所接收的信號是聯絡信號還是字節數、是數據還是校驗和,需要設立不同的標志位,為此在可位尋址的RAM中設定:
位地址
00H 接收聯絡信號標志位 01H 接收字節數標志位 02H 接收數據標志位 03H 接收文件結束標志位
在初始化時,這些位均為0。程序流程圖如圖7-34所示。
圖7-34 單片機接收中斷服務子程序流程圖
在中斷服務子程序中,將接收到的字節數存入R7中,接收的數據存入片外RAM從1000H開始的單元中。
單片機接收中斷服務子程序如下: RECE: CLR ES CLR RI JB 00H,RECE1 MOV A,SBUF CJNE A,#3FH,RECE2;收的不是‘?’號則 退出 MOV A,#2EH MOV SBUF,A JNB TI,$ CLR TI;發送應答信號‘.’, 即2EH SETB 00H SETB ES 39 RETI RECE2: MOV A,#24H MOV SBUF,A JNB TI,$ CLR TI;發送應答信號‘$’,即24H SETB ES RETI RECE1: JB 01H,RECE4 MOV A,SBUF;接收字節數 MOV R7,A MOV R3,A;暫存總字節數 SETB 01H SETB ES RETI RECE4: JB 02H,RECE5 MOV A,SBUF;接收一字符 MOVX @DPTR,A;存入外RAM中 ADD A,R6 MOV R6,A INC DPTR DJNZ R7,RECE7 SETB 02H RECE7: SETB ES RETI RECE5: MOV A,SBUF CJNE A,06H,RECE8;06H為R6的字節地址 MOV A,#4FH;校驗和不正確,重發 數據 MOV SBUF,A JNB TI,$ CLR TI;校驗正確發‘0’,即4FH SETB 03H SETB ES RETI RECE8: MOV DPTR,#1000H MOV R6,#00H MOV A,R3 MOV R7,A MOV A,#46H MOV SBUF,A JNB TI,$ CLR TI;校驗不正確,發‘F’,即46H CLR 02H SETB ES RETI
3、單片機主程序
主程序流程圖如圖7-35所示。
圖7-35 單片機的主程序流程圖
單片機主程序如下: ORG 0000H AJMP MAIN ORG 0023H AJMP RECE ORG 0040H MAIN: MOV SP,#60H MOV SCON,#50H;串口初始化 MOV TMOD,#20H MOV TH1,#0F3H MOV TL1,#0F3H MOV PCON,#00H;設置波特率 SETB TR1;啟動定時器1 SETB EA;開放中斷 SETB ES;開放串行中斷 L3: CLR 00H CLR 01H CLR 02H CLR 03H MOV R6,#00H MOV DPTR,#1000H L2: JB 03H,L1 SJMP L2 L1: ACALL SEND AJMP L3 41
7.6 PC機與多個單片機間通信
應用IBM-PC系列微機和多個單片機構成小型分布系統在一定范圍內是最經濟可行的方案,已被廣泛采用。這種分布系統在許多實時工業控制和數據采集系統中,充分發揮了單片機功能強、抗干擾性能好、溫限寬、面向控制等優點,同時又可以利用PC機彌補單片機在數據處理及交互性等方面的不足。在應用系統中,一般是以IBM-PC系列微機作為主機,定時掃描以單片機為核心的智能化控制器(即從機作為前沿機)以便采集數據或發送控制信息。在這樣的系統中,智能化控制器既能獨立完成數據處理和控制任務,又可以將數據傳送給PC機。PC機則將這些數據形象地顯示在 CRT上或通過打印機打印成各種報表,并將控制命令傳送給各個前沿單片機,以實現集中管理和最優控制。下面將討論PC機與多個單片機之間的通信問題。
7.6.1采用RS-232C標準總線通信
1、采用MAX232芯片的RS-232C接口的通信電路
PC機與多個單片機通信接口電路如圖7-36所示。整個通信系統的硬件結構設計為主從式串行總線型。PC機串口給出的已是標準的RS-232C電平,而單片機則為TTL/CMOS電平。采用單一電源的MAX232芯片就可實現電平的轉換和驅動。
圖7-36多個單片機與PC機通信電路
2、多個單片機與PC機通信協議的約定
PC機和89C51單片機雙向傳送數據代碼和功能代碼。數據代碼是通信過程必須傳送的目的代碼;功能代碼是應答信號(如PC機要向單片機發數據,PC機允許單片機發數據,有誤碼重發等)以及表征數據特 征和數量的代碼。
通信程序除具備前述的通信協議約定以外,還必須具有以下功能:(1)幀格式
PC機必須能夠向單片機發送被尋呼的單片機站號(地址)、命令、字段、數據首地址長度、數據塊及各種核驗值。單片機必須能夠向PC機發進自身站號(地址)、國據長度、國據塊及校驗值。
(2)差錯檢測
通信線的傳輸差錯是不可避免的,通信系統必須具有識別這種差錯的能力。例如,可以采用數據位累加法,即統計信息位中1的個數來進行差錯檢測,也可采用累加和校驗法。(3)差錯處理
每發送一數據塊,僅當數據塊接收正確時,才會發送一個響應幀;否則,回送出錯信息,要求重發該數據塊,直至被正確接收為止。為了防止系統出錯引起撍浪鴶,最多只允許重發三次,否則轉出錯處理程序,顯示系統出錯。
我們把通信協議分為三段,即主機與從機的連接掛鉤、握手階段,發送(接收)階段以及結束階段。連接階段主要是完成通信聯絡任務,主機發送從機的地址信號,從機接收到后如果與本機地址相符,回送應答信號,置SM2=0;否則不予理睬(SM2仍為1),實現主機與從機間的點對點通信。然后便可以開始發送或接收數據。在發送或接收數據過程中,選擇校驗方法,對數據的傳輸進行校驗。結束階段則是當通信系統出錯或誤碼次數越限時宣告通信失敗而結束 42 通信。
PC機的通信軟件必須包括如下內容:
①根據用戶的要求和通信協議規定,對 8250初始化,即設置波特率(1200 b/s)、數據位數(8位)、奇偶類型和停止位位數(l位)。需要指出的是,這里的奇偶校驗位用作發送地址碼或數據的特征值,而數據通信的校核采用累加和校驗方法。
②確定數據傳送方式。采用查詢方式發送和接收。在發送地址或數據時,首先由輸入指令檢查發送保持寄存器是否為空,若空,則由輸出指令將一個數據輸出給8250,8250會自動依據初始化設置的要求把二進制數串行發送到串行通信線上。
在接收數據時,8250把串行數據轉換成并行數據送到接收器的數據寄存器中,并把“接收數據準備好”信號放入狀態寄存器中。計算機讀到這個信號后,就可以用輸入指令從接收器的數據寄存器中讀入一個數據了。
③確定PC機為主機,所有單片機為從機。從機的地址碼為0F1H—0F4H。下面給出查詢方式的PC機通信主程序框圖。如圖7-37所示。
圖7-37多個單片機與PC機通信主程序框圖
PC機開始設置為地址傳送方式。從0F1H地址碼開始發送,然后接收地址回送碼,如回送地址等于發送地址碼,則說明與1號從機握手成功。繼而可以設置為數據傳送方式,開始與1號從機交換數據。傳送數據結束后,又開始與2號從機(地址碼0F2H)聯絡。如PC機發送從機地址后,接收回送地址碼與發送地址碼不等,則與此地址碼的從機握手失敗。繼續與其他從機聯絡??
④為了避免出現死循環,設置了按PC機任意鍵退出的功能。
4、單片機的通信軟件
單片機的波特率要與PC機一致。定時器T1作為波特率發生器,設置為工作模式2。串口設置為工作方式3,數據的傳送格式為11位,即1位起始位、8位數據位、1位停止位和作為數據/地址控制位的第9位。采用查詢方式發送和接收數據。單片機在通信開始階段,首先設置為傳送地址方式,等待接收地址,只有當接收到本機的地址碼時,才回送本機地址給PC機,以作為應答信號。
然后設置為傳送數據方式,以便開始傳送救據。其通信數據的約定要與PC機一致,即以什么樣的數據為結束標志,多少位數據為一個數據塊或多少位數據進行一次累加和校驗。校驗回送碼為00H時表示發進正確,0FFH為錯誤,需要重發。重發的次數也要與PC機取得一致,不超過三次。
下面給出單片機查詢方式通信的主程序。其程序框圖如圖7-38所示。4臺從機的通信程序基本相同,不同之處只是地址碼不同。
圖7-38單片機查詢方式通信的主程序
7.6.2采用RS-422A標準總線的通信系統
RS-422A標準是美國電氣工業協會(EIA)公布的“平衡電壓數字接口電路的電氣特性”標準,是為改善RS-232C標準的電氣特性,又考慮與RS-232C兼容而制定的。
RS-422A比RS-232C傳輸信號距離長、速度快,傳輸率最大為 10 Mb/s,在此速率下,電纜允許長度為 120 m;如采用較低傳輸速率,如在 90000 b/s時,最大距離可達1200 m。
RS-422A每個通道要用二相信號線,如果其中一根是邏輯1狀態,另一根就為邏輯0。RS-422A電路由發送路、平衡連接電纜、電纜終端負載、接收器幾部分組成。規定電路中只允許有一個發送器,可有多個接收器。因此,通常采用點對點通信方式。該標準允許驅動器輸出為±(2V—6V),接收器可以檢測到的輸入信號電平可低到200mV。
目前,RS-422與TTL的電平轉換最常用的芯片是傳輸線驅動器SN75174或MC3487和傳輸線接收器SN75175或MC3486,其內部結構及引腳如圖7-39所示。
圖7-39 RS-422電平轉換芯片SN75174和SN75175 SN75174是具有三態輸出的單片4差分線驅動器,其設計符合EIA標準RS-422A規范,適用于噪聲環境中長總線線路的多點傳輸,采用+5V電源供電,功能上可與MC3487互換。
SN75175是具有三態輸出的單片4差分接收器,其設計符合EIA標準RS-422A規范,適用于噪聲環境中長總線線路上的多點總線傳輸,該片采用+5V電源供電,功能上可與MC3486互換。
這里主要討論采用RS-422A標準總線實現上位機與多臺前沿下位控制機之間的遠距離通信。
分布式通信系統網絡采用了主從式串行總線結構,如圖7-40所示。所有下位控制機全部掛在上位PC機的串行通信RS-422A標準總線上,下位控制機之間不進行通信,只在上位機和下位機之間進行主從方式通信。
圖7-40 控制網絡系統結構圖
PC機中一般都有一塊RS-232串行通信板,該板完成串行數據轉換和串行數據接收、發送的任務,采用RS-232C通信標準。這塊板使用簡單,不加調制解調器時,只用三條線即可完成通信功能。其不足之處是帶負載能力差、通信范圍小——不超過十幾米,很難滿足一般集散控 45 制系統的需要。
為了充分利用這塊現有的串行接口板,并且進一步擴大通信范圍,可制作一塊RS-232/RS-422通信轉接板,接在PC機RS-232串行總線和通信線路之間,這樣就把通信標準從 RS-232C標準變成了RS-422A標準。RS-232/RS-422通信轉接板電路如圖7-40中虛線框內部分所示。
轉接板中的MC1488和MC1489是實現RS-232標準通信的一對芯片。前者發送,完成TTL電平到RS-232標推電平的轉換;后者接收,完成從RS-232標準電平到TTL電平的轉換。MC3487和MC3486是實功RS-422標準通信的一對芯片。前者發送,把TTL電平變成RS-422標準電平;后者接收,將RS-422標準電平變成TTL電平。
通信標準改變以后,采用了平衡傳輸方式,帶負載能力和抗干擾能力大大提高,通信距離可以達到 1200m以上,完全可以滿足一般集散控制系統多機通信的要求。通信軟件與前例大同小異。
一個實際的PC機RS-232/RS-422接口轉接板電路如圖7-41所示。
圖7-41 PC機RS-232/RS-422接口轉接板電路
當PC機發送數據時,首先由RS-232口的請求發送信號RTS的1電平經MC1489→74LS05→光電隔離器到達75174的三態控制端,打開75174的三態門;發送的數據由TXD經MC1489→74LS05→光電隔離器到75174的輸入端,經75174輸出轉換成雙端輸出的RS-422標準電平信號,從而完成了RS-232到RS-422的轉換。
當PC及接收數據時,75175的三態控制端接高電平,三態門是常開的,75175雙端輸入(RXD+和RXD-)的信號變成單端輸出到達74LS05→光電隔離器→MC1488輸入給PC機RS-232口的RXD端,從而完成了RS-422標準的轉換。
第三篇:單片機原理及接口技術課程設計指導書
長 沙學院
課程設計指導書(部)
業
級單片機原理及接口技術機電工程系機械設計制造及其自動化
年月日 課程設計名稱系專班
課程名稱:《單片機原理及接口技術》課程設計
課程編號:JX010146
主 筆 人:程立志
主 審 人:許焰
1、課程設計的目的通過《單片機原理及接口技術》課程設計,使學生初步具備以下能力:
1.1、加深對《單片機原理及接口技術》所學知識的理解;
1.2、掌握單片機內部資源的使用方法和步驟;
1.3、掌握單片機應用的環節和步驟;
1.4、進一步熟悉在proteus軟件里進行硬件設計和編程調試;
1.5、能使用匯編語言或C語言編程環境Keil編寫程序、編譯、仿真和修改程序;
1.6、能初步判斷分析單片機系統的簡單故障;
1.7、能對自己的實踐工作進行總結,具備編寫實習報告書能力;
1.8、初步具備辯證思維和邏輯分析的能力;
1.9、培養學生熱愛科學,實事求是的學風和創新意識、精神,合作精神。
2、課程設計的題目
單片機的應用領域非常廣泛,就其基本的控制原理和實現方法無外乎是對一些常見的如:距離或位移(米)、重量(千克)、時間(秒)、電流或電壓(安培)、溫度(開爾文)、等物理量進行測量控制,鑒于單片機當前的應用狀態和學員對其應掌握的程度,本次課程設計題目的設定主要是以貼近現實生活為主,提出了一些在教學、工業控制和科研等領域基本常見的課題,其目的是要讓學員們拓寬視野,著重體會其學習基本的原理及控制編程基礎的重要性,以期達到培養學員們的興趣和今后再學習的愿望。
2.1、;LED流水燈控制設計:
拓展:廣告燈的左移右移控制設計;汽車尾燈模擬控制設計;城市景觀燈的控制設計;…
2.2、電子日歷、數字鐘設計:
拓展:智能晨起系統控制設計;智能全自動洗衣機控制設計;秒表/時鐘計時器控制設計;…
2.3、數字溫度計的控制設計:
拓展:新生兒恒溫箱監控系統設計;多點溫度的控制設計;傳導系數測量儀的應用設計;…
2.4、16×16 點陣LED漢字顯示設計:
拓展:機場、車站、碼頭、商場、銀行、政務等公共服務場所信息指示牌設計;…
2.5、1602液晶顯示屏顯示設計:
拓展:機場、車站、碼頭、商場、銀行、政務等公共服務場所信息指示牌設計;…
2.6、128×64點陣LED漢字顯示設計:
拓展:機場、車站、碼頭、商場、銀行、政務等公共服務場所信息指示牌設計;…
2.7、直流電機控制設計:
拓展:傳送帶單控與順序控制設計;電子裝配生產線部件移動控制設計;多層電梯控制設計;…
2.8、步進電機控制設計:
拓展:機械手動作行程控制設計;安防監控自動尋跡云臺的控制設計;條碼打印機的控制設計;…
2.9、AD/DA轉換控制設計:
拓展:簡易數字電壓表設計;簡易數字壓力計設計;吊車懸臂角度的控制設計;超聲波測距器的設計…
2.10、邏輯算法控制設計:
拓展:搶答器控制設計;交通燈設計;多層電梯控制設計;4×4 矩陣鍵盤計算器設計…
2.11、遙控設計:
拓展:無線電遙控升降系統控制設計、紅外遙控升降系統控制設計、紅外遙控多路開關控制設計;…
2.12、PWM方式控制設計:
拓展:直流電機調速控制設計;城市立交橋景觀帶的控制設計;…
2.14、電子琴設計;
拓展:報警發生器控制設計;函數信號發生器的設計;
3、課程設計內容(主要技術關鍵的分析、解決思路和方案比較等)
要求學生根據所選課題,結合實際工程應用情況參照以下幾例給出的具體實現功能和控制參數完成課題的設計任務書。
3.1、簡易數字電壓表的設計
利用MCS-51系列單片機設計簡易數字電壓表測量0~5v的8路輸入電壓值,并在四位LED數碼管上輪流顯示或單路選擇顯示。測量最小分辨率為0.019V,測量誤差約為±0.02V
3.2、秒表/時鐘計時器的設計
秒表/時鐘計時器要求使用六位LED數碼顯示管顯示時、分、秒,以24(小時)計時方式。使用按鍵開關可實現時分調整、秒表/時鐘功能轉換功能。
3.3、電子日歷的設計
電子日歷上能顯示陽歷年,月,日,星期,時,分,秒和陰歷年、月,使用按鍵開關可實現調整。
3.4、超聲波測距器的設計
設計一個超聲波測距器,可以應用于汽車倒車、建筑施工工地以及一些工業現場的位置監控,也可用于如液位、井深、管道長度的測量等場合。要求測量范圍在0.10-4.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩定地顯示測量結果。
3.5、DS18B20數字溫度計的設計
利用89C51單片機、DS18B20溫度傳感器,制作數字溫度計。要求測溫范圍為-50~110℃,精度誤差在0.1℃以內,LED數碼管直接顯示測量溫度值。
3.6、1602液晶顯示屏設計
設計一個室內用1602液晶顯示屏,要求在目測條件下LED顯示屏個點亮度均勻、充足,可顯示圖形和文字,顯示圖形或文字應穩定、清晰無串擾。圖形或文字顯示有靜止、移入移出等顯示方式。
3.7、六路數字搶答器的設計
1)、搶答器同時供6名選手或6個代表隊比賽,分別用6個按鈕S0 ~ S5表示。
2)、設置一個系統清除和搶答控制開關S,該開關由主持人控制。
3)、搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應的編號,并在LED數碼管上顯示,同時揚聲器發出報警聲響提示。選手搶答實行優先鎖存,優先搶答選手的編號一直保持到主持人將系統清除為止。
4)、搶答器具有定時搶答功能,且一次搶答的時間由主持人設定(如30秒)。當主持人啟動“開始”鍵后,定時器進行減計時,同時揚聲器發出短暫的聲響,聲響持續的時間0.5秒左右。
5)、參賽選手在設定的時間內進行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統清除為止。
6)、如果定時時間已到,無人搶答,本次搶答無效,系統報警并禁止搶答,定時顯示器上顯示00。
3.8、機械手動作行程控制
1)、設“單步”、“單程”、“往返”、“連續”4個按鈕及4個鍵值燈;
2)、設“左上”、“左下”、“右上”、“右下”4個電磁位置開關及4個指示燈。
3)、設“左上”為初始位置,根據不同的選擇按鈕,驅動相應的(3臺)直流電機正反轉,完成相應的行程動作。
3.9、三層樓電梯呼叫控制
1)、第一層只設“上”、第二層設“上”、“下”、第三層只設“下”共四個按鈕;
2)、每層都設一個電磁位置開關,轎廂上下指示燈;共享一臺直流電機正反轉。
3)、電梯轎廂內設“1”、“2”、“3”三個樓層鍵及鍵位指示燈,轎廂上下指示燈,開關門指示燈,電梯根據當前層位和樓層選擇按鈕的先后順序,決定向上或向下,電機以正反轉時延2秒完成層間動作。
3.10、16×16 點陣LED漢字顯示設計。
1)、點陣顯示漢字“長沙大學機電系”;
2)、實現自定義滾動效果,如左滾屏,有滾屏,上、下卷簾等。
單片機的應用系統隨著用途不同,它們的硬件和軟件結構差別很大,但系統設計的方法和步驟基本上是相同的。一般包括總體設計、硬件設計、軟件設計、仿真調試、固化程序、應用系統獨立運行等步驟。
課程設計由于時間安排、學生水平、實驗條件等諸方面的限制,僅要求學生完成仿真調試即可,同時根據實際情況,在試驗箱上調試通過。
由于設計時間緊迫,不要在完成全部設計后再編寫設計說明書。而應在設計過程中逐步完成。一開始不可能設計出滿意的主程序框圖。因此,總體設計部分在完成全部設計任務后再寫。而硬件部分和軟件部分可以在設計過程同步完成。
4、注意事項
4.1、充分調研相關文獻,針對課題需要進行系統詳細的論證,不能盲目生搬硬套,嚴謹抄襲;
4.2、以小組為單位(原則上是3人一組),小組內成員分工明確,各司其職,按照所分配的任務在規定的時間內合理的完成好。
4.3、課程設計報告要包括:設計功能要求,設計控制參數,硬件電路設計(元件選型,硬件電路布局),系統程序的設計(注意總結出現的問題、疑難以及解決的方法和思路,對以后的借鑒作用等),調試及性能分析,課程設計小結、控制源程序清單等;圖包括設計方案框圖、硬件原理圖(要求有描述)、程序流程圖等。
第四篇:《單片機原理與接口技術》課程設計教學大綱
《單片機原理與接口技術》課程設計教學大綱
課程編號:
課程英文名稱:Course Design of Micro-controller Principle and Interface Technology 學時數:18
學分數:1 使用層次和專業:本科
電氣工程及其自動化、電子信息工程、機械設計制造及其自動化等專業
一、課程設計的性質、目的
《單片機原理及接口技術》課程設計是在基本學完該課程之后,綜合運用所學單片機知識,完成一個單片機應用系統設計,從而加深對單片機軟硬知識的理解,獲得初步的應用經驗,為走出校門從事單片機應用的相關工作打下基礎。
通過該課程設計,主要達到以下目的:
1、鞏固和加深對單片機原理和接口技術知識的理解,使學生增進對單片機系統的感性認識,加深對單片機理論方面的理解,為順利完成畢業設計打下基礎。
2、使學生掌握對單片機的內部功能模塊的應用,如定時器/計數器、中斷、片內外存貯器、I/O口和串行口通訊等,進一步深化和鞏固所學基礎理論、專業知識及實驗技能,培養學生綜合運用所學專業知識分析問題和解決問題的能力。
3、培養學生根據課題需要選學參考書籍、查閱手冊和文獻資料的能力,了解與課題有關的硬件元器件的工程規范,能按課程設計任務書的要求編寫課程設計說明書,學會方案論證的比較方法,初步掌握工程設計的基本方法,能正確反映設計和實驗成果,能用計算機繪制電路圖和流程圖。使學生了解和掌握單片機應用系統的軟、硬件設計過程、方法及實現,提高學生的技術應用能力,為以后設計和實現單片機應用系統打下良好基礎。
4、這一環節對掌握常用儀器、儀表的正確使用方法,學會軟、硬件的設計和調試方法,掌握單片機技術在生產實踐中的應用,提高學生的工程實踐能力、動手能力、創新能力,使學生樹立正確的人生觀,養成嚴謹、踏實的工作作風。
二、課程設計的內容
課程設計主要內容包括:理論設計、調試及寫出總結報告等,其中理論設計又包括選擇總體方案、硬件系統設計和軟件系統設計。硬件設計包括單元電路、選擇元器件及計算參數等;軟件設計包括模塊化層次結構圖、程序流程圖等。程序設計是課程設計的關鍵環節,通過調試,進一步完善程序設計,使之達到課題所要求的指標,使理論設計更接近于 1
實際產品。課程設計的最后要寫出設計總結報告,把理論設計內容,調試的過程及性能指標的測試結果進行全面的總結,把實踐內容上升到理論高度。
以下8個設計題目每組學生可任選一項: 題目一 智能交通燈控制系統設計
1、設計要求
(1)用發光二極管模擬交通信號燈,用按鍵開關模擬車輛檢測信號。
(2)A、B兩車道交叉組成十字路口,A是主車道,B是支道。正常情況下,A、B兩車道輪流放行,A放行50s,B放行30s,各含5s警告時間。
(3)交通繁忙時,該系統應有手受控開關緩解交通擁擠狀況,其中一車道放行期間,另一車道繁忙,可通過開關獲得15s放行時間。
(4)有緊急車輛通過時,另需一開關設置兩車道均禁止通行20s。
2、主要功能模塊
智能交通燈控制系統主要功能模塊包括電源電路、單片機主控電路、按鍵控制電路和道路顯示電路組成。根據具體情況選擇合適型號的單片機,發光二極管,開關等硬件設備進行設計。
題目二 溫度控制系統設計
1、設計要求
(1)用單片機控制一個由1kw電爐加熱的電烤箱,最高溫度不超過120℃。(2)電烤過程恒溫控制,溫度可通過系統設置,誤差不超過±2℃。(3)實時顯示溫度和設置溫度,顯示精確為1℃。
(4)溫度超出設置溫度±5℃時發超限報警,對升溫和降溫過程不作要求。
2、主要功能模塊
溫度控制系統的主要功能模塊包括溫度測量(溫度傳感器、放大器、ADC轉換器)、溫度控制(光電隔離、驅動電路、可控硅電路、電爐)、溫度給定(按鍵)、溫度顯示和報警等幾部分。根據具體情況選擇合適型號的單片機,溫度傳感器、ADC轉換器等硬件設備進行設計。
題目三 點陣LED電子顯示屏的設計(第8章)
1、設計要求
(1)設計4個16×16的LED電子顯示屏,能穩定、清晰地顯示圖形或文字。(2)圖形或文字顯示通過編程能實現靜止、左移和右移等多種顯示方式。
(3)采用動態掃描方式,保證在目測條件LED顯示屏可亮度均勻地顯示圖形和文字,并且穩定、清晰、無串擾。
2、主要功能模塊
LED電子顯示屏系統的主要功能模塊包括單片機主控模塊、16×16的點陣顯示、行驅動電路、列驅動電路、譯碼電路幾部分。根據具體情況選擇合適型號的單片機等硬件設備進行設計。題目四 密碼鎖設計
1、設計要求
(1)要求密碼鎖可以設置8位密碼,每位密碼值范圍為1~8,用戶可以自行設定和修改密碼。
(2)若輸入的8位開鎖密碼不正確,則報警5s,連續錯3次要報警1分鐘,報警期間輸入密碼無效;輸入的8位開鎖密碼完全正確才能開鎖,開鎖時有1s提示音
(3)鎖內有備用電池,內部上電復位時才能設置或修改密碼;電磁鎖的電磁線圈每次通電5s,然后恢復初態;密碼鍵盤上只允許有8個密碼按鍵,密碼設定完畢后要有2s的提示音。
2、主要功能模塊
密碼鎖系統主要功能模塊包括主控模塊、按鍵掃描模塊、蜂鳴器、電源電路、復位電路、晶振電路、驅動電路幾部分。根據具體情況選擇合適型號的單片機,三極管等硬件設備進行設計。
題目五 LED點陣顯示電子鐘設計
1、設計要求
(1)時鐘的顯示由LED點陣構成。
(2)能正確顯示時間,上電顯示為12點,時間能夠由按鍵調整。(3)誤差小于1s。
2、主要功能模塊
LED點陣顯示電子鐘系統主要功能模塊包括主控模塊、LED點陣掃描模塊、電子鐘模塊組成。其中電子鐘由顯示電路、行驅動電路、列驅動電路、按鍵電路和復位電路、晶振電路、驅動電路幾部分組成。根據具體情況選擇合適型號的單片機,鎖存驅動器、譯碼器等硬件設備進行設計。題目六 智能搶答器設計
1、設計要求
(1)設計一個智力競賽搶答器,可同時供8名選手或8個代表隊參加比賽,分別使用一個按鈕,編號從0~7。
(2)設置一個控制開關,用來控制系統的清零和搶答開始。
(3)搶答器具有數據鎖存功能、顯示功能和聲音提示功能。搶答開始后,有選手按動搶答按鈕,鎖存對應編號,并在LED數碼管上顯示選手的編號,同時燈亮且伴隨聲音提示。同時鎖存電路,禁止其他選手搶答,顯示編號一直保持到系統清零。
2、主要功能模塊
智能搶答器系統主要功能模塊包括主控模塊、復位電路、電源電路、選手按鍵、控制開關按鈕,聲音提示和數碼顯示等部分組成。根據具體情況選擇合適型號的單片機,蜂鳴器、數碼管等硬件設備進行設計。題目七 比賽記分牌設計
1、設計要求
(1)啟動時顯示為0分,計分范圍為0~100分。(2)得分時加上相應的分數,失分時剪去相應的分數。(3)刷新分數的按鍵按下時,伴隨提示音。
2、主要功能模塊
比賽記分牌系統主要功能模塊包括單片機主控模塊、顯示模塊、按鍵模塊、電源模塊等部分組成。根據具體情況選擇合適型號的單片機,蜂鳴器、數碼管等硬件設備進行設計。題目八 學習型紅外線遙控器設計
1、設計要求
(1)適用于編碼式紅外線遙控型家用電器。(2)可遙控多臺家用電器。(3)具有一個學習/控制復用鍵。
(4)可通過一個設備選擇鍵和各個功能控制鍵實現對多臺設備的常用功能的學習和控制。(5)成本低,抗干擾能力強。
2、主要功能模塊
學習型紅外線遙控器控制系統主要功能模塊包括單片機主控模塊、紅外接收及發射電路、復位電路、按鍵及狀態指示電路等部分組成。根據具體情況選擇合適型號的單片機、一體化紅外遙控接收器等硬件設備進行設計。
三、課程設計的要求
1、課程設計的組織形式:將班級分成若干組,每組3~5人,自行分工完成一個題目。
2、課程設計流程:
(1)審題、查閱相關資料,確定系統總體方案;
(2)完成硬件設計,畫出硬件設計原理圖(包括設備模塊選擇、搭接線路、計算參數等)
(3)根據所完成的任務、硬件原理圖繪制系統軟件框圖,編制程序;
(4)系統調試,認真客觀地記錄和觀察實驗結果,對實驗結果進行深入的分析,寫出實驗心得;
(5)撰寫課程設計報告及答辯。
3、課程設計報告的編寫要求:(1)設計任務書一份;
(2)硬件設計原理圖一份(A4圖紙);(3)設計模塊說明;(4)軟件調試說明;
(5)實驗結果分析(包括硬件設計和軟件調試分析)。
四、成績考核方式
1、硬件設計成績(20%);
2、軟件設計成績(20%);
3、實驗調試(40%);
4、實驗報告和平時成績(20%)。
五、教材和參考文獻
1、推薦教材
[1]楊居義.單片機課程設計指導.清華大學出版社.2009年9月.[2]李海濱.單片機技術課程設計與項目實例.中國電力出版社.2009年10月.2、教學參考書
[1]付家才.單片機實驗與實踐.高等教育出版社.2006年3月.[2]李廣第.單片機基礎.北京航空航天大學出版社.2005年9.[3]朱珍.單片機原理.石油工業出版社.2001年6.[4]胡錦.單片機技術實用教程.高等教育出版社
2004.6.[5]薛鈞義.微機控制系統及應用.西安交通大學出版社.2003年2.[6]彭介華.電子技術課程設計指導.高等教育出版社.1999年10月.大綱制定人:李娜、吳澤、趙忠彪
大綱審定人:白政民
修訂日期:2012.3
第五篇:單片機原理與接口技術教案
《單片機原理與接口技術》教案
班級:05電子(1)(2)
日期:2007.3.8
課題:單片機硬件系統 教學目的:使學生理解單片機的結構、硬件原理和工作特性等基礎知識 重點難點:單片機硬件組成和數據存儲區分配
第一章 單片機硬件系統一、概述
(一)單片機及單片機應用系統
單片機應用系統是以單片機為核心,配以輸入、輸出、顯示、控制等外圍電路和軟件,能實現一種或多種功能的實用系統。
(二)MCS-51單片機系列
二、MCS-51單片機結構和原理
(一)單片機的內部組成及信號引腳
組成:CPU、內部RAM、內部ROM、定時/計數器、并行I/O口、串行口、中斷系統、時鐘電路等。
(二)內部數據存儲器 1.寄存器區 2.位尋址區 3.用戶RAM區
4.特殊功能寄存器區
(三)內部程序存儲器
三、并行輸入/輸出口電路結構
組成結構:P0口、P1口、P2口、P3口
四、時鐘電路與復位電路
常用晶體振蕩器時鐘電路(最大12MHz)、復位電路(RST引腳高電平產生復位)。
小結:單片機硬件電路和工作原理是學好本課的基礎。
班級:05電子(1)(2)
日期:2007.3.22
課題:單片機開發系統 教學目的:使學生理解單片機硬件和軟件調試的方法 重點難點:單片機開發軟件的應用
第二章 單片機開發系統一、開發系統的功能
在線仿真、輔助調試、輔助設計、程序固化。
二、單片機應用系統的調試
調試方法:單步、跟蹤、全速運行、設置斷點
小結:調試方法和調試軟件是單片機系統設計的必要工具。班級:05電子(1)(2)
日期:2007.3.28
課題:單片機指令系統 教學目的:使學生掌握單片機指令的含義和使用方法 重點難點:邏輯和位操作指令
第三章 MCS-51單片機指令系統一、尋址方式
包括:寄存器尋址、直接尋址、立即數尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。
二、指令系統
共111條指令。
數據傳送指令(29條)
算術運算指令(24條)
邏輯運算指令(24條)
控制轉移指令(17條)位操作指令(17條)
三、常用偽指令
包括:定位偽指令、定義字節偽指令、定義空間偽指令、定義符號偽指令、數據賦值偽指令、數據地址賦值偽指令、匯編結束偽指令。
小結:本章是整個課程的重點,應將使用方法以舉例的方式詳細講解。
作業:3.3~3.16
班級:05電子(1)(2)
日期:2007.4.11
課題:單片機編程方法 教學目的:使學生掌握單片機匯編語言的編程方法 重點難點:分支程序、循環程序和子程序設計
第四章 MCS-51單片機匯編語言程序設計
一、簡單程序設計
順序控制程序。編程前,要分配內存工作區及有關端口地址。
二、分支程序設計
分支程序就是按照分支條件,判斷程序流向,并執行。1.兩分支程序設計(單入口、兩出口)2.三分支程序設計
3.多分支程序設計(散轉程序)
三、循環程序設計
1.單重循環程序設計
2.雙重循環程序設計(延時程序設計)3.數據傳送程序
4.循環程序結構(初始化、循環體、循環控制)
四、查表程序(主要用于數碼管顯示子程序)
表格是預先定義在程序的數據區中,然后和程序一起固化在ROM中的一串常數。
五、子程序設計與堆棧技術
1.子程序調用和返回過程 2.子程序嵌套
3.參數傳遞與現場保護和恢復
4.子程序結構(子程序名、子程序功能、入口參數、出口參數、占用資源)5.堆棧操作與堆棧功能
6.堆棧操作與RAM操作的比較
六、實用子程序舉例
1.代碼轉換(二進制數轉換為BCD碼)2.算術運算(雙字節無符號數乘法)3.查找、排序程序(冒泡排序法)
小結:匯編語言程序設計基本結構包括順序結構、分支結構、循環結構和子程序結構等。
作業:4.1~4.16
班級:05電子(1)(2)
日期:2007.4.12
課題:定時與中斷系統 教學目的:使學生掌握單片機定時/計數器與外部中斷的工作原理和編程方法 重點難點:定時工作方式與中斷系統原理
第五章 定時與中斷系統一、定時/計數器
1.定時/計數器的結構 2.定時/計數器工作原理
3.定時/計數器的方式寄存器和控制寄存器
二、定時/計數器的工作方式
共4種定時工作方式:方式0、方式
1、方式
2、方式3。
三、定時/計數器的編程和應用
定時初值的計算方法、方式設置、控制方式設置
四、中斷系統
1.中斷的概念和特點 2.中斷系統的結構框圖 3.中斷源和中斷標志 4.中斷處理過程
五、中斷系統的應用
1.中斷系統的功能(中斷響應、中斷處理、中斷返回)2.中斷請求的撤除、中斷響應時間 3.外部中斷源的擴展
4.定時中斷控制信號燈閃爍功能的應用實例
小結:定時中斷在單片機程序控制中,是很有用的,但中斷的概念對初學者比較難理解,需細講。
作業:5.4、5.5
班級:05電子(1)(2)
日期:2007.4.25
課題:單片機系統擴展 教學目的:使學生掌握單片機系統擴展的原理和相關集成電路的使用方法 重點難點:擴展電路接口與地址的控制方法
第六章 單片機系統擴展
一、程序存儲器擴展
1.單片機程序存儲器概述 2.EPROM程序存儲器擴展實例(2732)
3.常用程序存儲器類型(2716、27128、2864A)
二、數據存儲器擴展
1.單片機RAM概述
2.SRAM擴展(以一片2KB靜態6116為例)
三、并行I/O口擴展
1.MCS-51內部并行I/O口及其作用
單片機內部,P0口分時作為低8位地址線和數據線,P2口作為高8位地址線。2.簡單的I/O口擴展
以74LS244和74LS273分別作為擴展輸入和輸出端口,其地址的計算方法。3.采用8255擴展I/O口
8255的結構、8255的控制字、8255與單片機的接口 4.采用8155擴展I/O口
8155的結構、I/O口的工作方式、作外部RAM的使用方法、與單片機的接口
小結:本章的重點是學習對不同擴展電路,其地址的計算方法。但要首先了解相關控制的工作原理和控制方法,據此計算地址就容易很多。
班級:05電子(1)(2)
日期:2007.5.14
課題:單片機接口技術 教學目的:使學生掌握單片機系統常用外圍電路的接口技術和使用方法 重點難點:數碼管顯示、D/A、A/D轉換接口與編程
第七章 單片機接口技術
一、單片機與鍵盤接口
1.鍵盤的工作原理(鍵輸入原理、按鍵消抖的方法、按鍵編碼方法)2.獨立式按鍵(硬件結構和軟件編程)
3.矩陣式按鍵(矩陣式鍵盤的結構、按鍵識別方法、鍵盤編碼、鍵盤掃描的工作方式)
二、單片機與數碼管顯示器的接口
1.8段碼數碼管工作原理
2.數碼管字形編碼方法(共陰極與共陽極兩種情況)3.靜態顯示接口(原理和編程方法)4.動態顯示接口(原理和編程方法)
三、D/A轉換器接口
1.D/A轉換器的技術性能指標(分辨率、建立時間、接口形式)2.典型D/A轉換器芯片DAC0832 3.單緩沖方式的接口與應用 4.雙緩沖方式的接口與應用
四、A/D轉換器接口
1.A/D轉換的工作原理
2.典型A/D轉換器芯片ADC0809 3.單片機與ADC0809接口 4.編程方法
小結:按鍵、LED數碼管顯示、A/D、D/A是單片機系統的常用外設電路,本章的學習對于提高單片機系統的設計水平很有幫助。
大作業:7.6
班級:05電子(1)(2)
日期:2007.6.20
課題:串行口通信技術 教學目的:使學生掌握單片機串行通信技術的原理和編程方法 重點難點:串行接口、程序設計
第八章 串行口通信技術
一、串行通信基礎
1.串行通信的分類
(1)異步通信(字符幀、波特率)(2)同步通信
2.串行通信的制式(單工、半雙工、全雙工)3.串行通信的接口電路
二、串行通信總線標準及其接口
1.RS-232C接口
2.RS-449、RS-422A、RS-423A標準接口 3.20mA電流環路串行接口
三、MCS-51的串行接口
51系列單片機內部有一個可編程全雙工串行通信接口,它具有UART的全部功能,該串行口有4種工作方式,幀格式有8位、10位和11位,并能設置各種波特率。
1.MCS-51串行口結構(SBUF、SCON、PCON控制字的定義)2.串行工作方式(方式0、1、2、3)3.串行口的波特率
四、MCS-51單片機之間的通信
1.雙機通信硬件電路(RXD、TXD、公共地線)2.雙機通信軟件編程(查詢方式、中斷方式)3.多機通信
五、PC機和單片機之間的通信(接口設計、軟件編程)
小結:串行通信在現代社會應用廣泛,單片機串行通信是通信技術的基礎。
作業:8.4
班級:05電子(1)(2)
日期:2007.7.4
課題:單片機應用系統的設計與開發 教學目的:使學生從總體上了解單片機應用系統的設計方法 重點難點:溫度控制系統的設計
第九章 單片機應用系統的設計與開發
一、單片機溫度控制系統的設計
二、單片機應用系統開發的一般方法
1.確定任務指標和目標
2.總體設計(選型、軟硬件分工)
3.硬件設計(程序存儲器、數據存儲器和I/O口、地址譯碼電路、總線驅動能力、系統速度匹配、抗干擾措施)
4.軟件設計(監控程序、功能程序)
5.系統調試(軟件調試、硬件調試、聯機調試)
三、單片機應用系統實用技術
1.低功耗設計
2.加密技術(硬件加密、軟件加密)
四、抗干擾設計
1.電源、地線、傳輸干擾及其對策
2.硬件抗干擾措施(隔離技術、系統監控技術)
3.軟件抗干擾措施(數字濾波提高數據采集的可靠性、控制狀態失常的軟件抗干擾措施、程序運行失常的軟件抗干擾措施)
小結:單片機應用系統的設計方法,應采取軟件和硬件相結合的方法,硬件設計、軟件設計與調試是對系統進行完善的關鍵。