欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      第4章 單片機(jī)原理及接口技術(shù)講稿(第三版)-李朝青(范文大全)

      時間:2019-05-14 17:36:47下載本文作者:會員上傳
      簡介:寫寫幫文庫小編為你整理了多篇相關(guān)的《第4章 單片機(jī)原理及接口技術(shù)講稿(第三版)-李朝青》,但愿對你工作學(xué)習(xí)有幫助,當(dāng)然你在寫寫幫文庫還可以找到更多《第4章 單片機(jī)原理及接口技術(shù)講稿(第三版)-李朝青》。

      第一篇:第4章 單片機(jī)原理及接口技術(shù)講稿(第三版)-李朝青

      第4章

      匯編語言程序設(shè)計及知識

      §4.1 編程的步驟、方法和技巧

      §4.1.1 編程的步驟

      一、分析問題

      對需要解決的問題進(jìn)行分析,以求對問題由正確的理解。如,? 解決問題的任務(wù)是什么? ? 工作過程?

      ? 現(xiàn)有的條件,已知數(shù)據(jù),對運(yùn)算的精度和速度方面的要求? ? 設(shè)計的硬件結(jié)構(gòu)是否方便編程?

      二、確定算法

      算法是如何將實(shí)際問題轉(zhuǎn)化成程序模塊來處理。

      在編程以前,先要對幾種不同的算法進(jìn)行分析、比較,找出最適宜的算法

      三、畫程序流程圖

      程序流程圖是使用各種圖形、符號、有向線段等來說明程序設(shè)計過程的一種直觀的表示。流程圖步驟分得越細(xì)致,編寫程序是也越方便。畫流程圖是程序結(jié)構(gòu)設(shè)計是采用的一種重要手段。

      一個系統(tǒng)軟件有總的流程圖(主程序框圖)和局部的流程圖。流程圖常采用的圖形和符號。

      四、編寫程序

      用89C51匯編語言編寫的源程序行(一條語句)包括四個部分,也叫四個字段: 〔標(biāo)號:〕〔操作碼〕〔操作數(shù)〕;〔注釋〕

      每個字段之間要用分隔符分隔,而每個字段內(nèi)部不能使用分隔符??梢杂米鞣指舴姆枺嚎崭瘛?/p>

      ”、冒號“:”、、逗號“,”、分號“;”等。

      例:LOOP:MOV A,#00H;立即數(shù)00H→A ? 標(biāo)號

      標(biāo)號是用戶定義的符號地址。

      一條指令的標(biāo)號是該條指令的符號名字,標(biāo)號的值是匯編這條指令時指令的地址。標(biāo)號由以英文字母開始的1~8個字母或數(shù)字組成,以冒號“:”結(jié)尾。

      標(biāo)號可以由賦值偽指令賦值,如果沒有賦值,匯編程序把存放該指令目標(biāo)碼第一字節(jié)的存儲單元的地址賦給該標(biāo)號,所以,標(biāo)號又叫指令標(biāo)號。

      ? 操作碼

      操作碼是必不可少的。

      它用一組字母符號表示指令的操作碼。在89C51中,由89C51的指令助記符組成。? 操作數(shù)

      匯編語言指令可能要求或不要求操作數(shù),所以這一字段可能有也可能沒有。若有兩個操作數(shù),操作數(shù)之間用逗號“,”分開。操作數(shù)包括的內(nèi)容有:

      (1)工作寄存器:由PSW.3和PSW.4規(guī)定的當(dāng)前工作寄存器區(qū)中的R0~R7。(2)特殊功能寄存器:21個SFR的名字。

      (3)標(biāo)號名:賦值標(biāo)號—由匯編指令EQU等賦值的標(biāo)號;指令標(biāo)號—指令標(biāo)號指示的指令的第一字節(jié)地址是該標(biāo)號的值。

      (4)常數(shù):可用二進(jìn)制(B)、十進(jìn)制、十六進(jìn)制(H),若常數(shù)以字符開頭,前面加0。(5)$:用來表示程序計數(shù)器的當(dāng)前值。

      1(6)表達(dá)式:匯編時,計算出表達(dá)式的值填入目標(biāo)碼。? 注釋

      注釋部分不是匯編語言的功能部分,只是用語增加程序的可讀性。良好的注釋是匯編語言程序編寫中的重要組成部分。

      §4.1.2 編程的方法和技巧

      一、模塊化的程序設(shè)計方法

      1、程序功能模塊化的優(yōu)點(diǎn)

      單個模塊結(jié)構(gòu)的程序功能單一,易于編寫、調(diào)試和修改。

      便于分工,從而可使多個程序員同時進(jìn)行程序的編寫和調(diào)試工作,加快軟件研制進(jìn)度。程序可讀性好,便于功能擴(kuò)充和版本升級。

      對程序的修改可局部進(jìn)行,其它部分可以保持不變。

      對于使用頻繁的子程序可以建立子程序庫,便于多個模塊調(diào)用。

      2、劃分模塊的原則

      每個模塊應(yīng)具有獨(dú)立的功能,能產(chǎn)生一個明確的結(jié)果,即單模塊的功能高內(nèi)聚性。

      模塊之間的控制耦合應(yīng)盡量簡單,數(shù)據(jù)耦合應(yīng)盡量少,即模塊間的低耦合性??刂岂詈鲜侵改K進(jìn)入和退出的條件及方式,數(shù)據(jù)耦合是指模塊間的信息交換方式、交換量的多少及交換頻繁程度。

      模塊長度適中。20條~100條的范圍較合適。

      二、編程技巧

      1、盡量采用循環(huán)結(jié)構(gòu)和子程序。

      2、盡量少用無條件轉(zhuǎn)移指令。

      3、對于通用的子程序,考慮到其通用性,除了用于存放子程序入口參數(shù)的寄存器外,子程序中用到的其他寄存器的內(nèi)容應(yīng)壓入堆棧(返回前再彈出),即保護(hù)現(xiàn)場。

      4、在中斷處理程序中,除了要保護(hù)處理程序中用到的寄存器外,還要保護(hù)標(biāo)志寄存器。

      5、用累加器傳遞入口參數(shù)或返回參數(shù)比較方便,在子程序中,一般不必把累加器內(nèi)容壓入堆棧。

      §4.1.3 匯編語言程序的基本結(jié)構(gòu)

      一、順序程序

      順序程序是最簡單的程序結(jié)構(gòu),即順序結(jié)構(gòu)。程序按順序一條一條地執(zhí)行指令。

      二、分支程序

      程序分支是通過條件轉(zhuǎn)移指令實(shí)現(xiàn)的,即根據(jù)條件對程序的執(zhí)行進(jìn)行判斷、滿足條件則進(jìn)行程序轉(zhuǎn)移,不滿足條件就順序執(zhí)行程序。

      分支程序又分為單分支和多分支結(jié)構(gòu)。

      多分支程序是首先把分支程序按序號排列,然后按序號值進(jìn)行轉(zhuǎn)移。

      在MCS-51指令系統(tǒng)中,通過條件判斷實(shí)現(xiàn)單分支程序轉(zhuǎn)移的指令有:JZ、JNZ、CJNE、DJNZ等。此外還有以位狀態(tài)作為條件進(jìn)行程序分支的指令,如JC、JNC、JB、JNB、JBC等。使用這些指令可以完成0、1、正、負(fù),以及相等、不相等作為各種條件判斷依據(jù)的程序轉(zhuǎn)移。

      結(jié)構(gòu)如圖4-1所示。

      例4-1: 128種分支轉(zhuǎn)移程序。

      功能:根據(jù)入口條件轉(zhuǎn)移到128個目的地址。入口:(R3)=轉(zhuǎn)移目的地址的序號00H~7FH。出口:轉(zhuǎn)移到相應(yīng)子程序入口。JMP_128:MOV

      A,R3

      RL

      A

      MOV

      DPTR,#JMPTAB

      JMP

      @A+DPTR JMPTAB:AJMP

      ROUT00

      AJMP

      ROUT01

      AJMP

      ROUT7F

      說明:此程序要求128個轉(zhuǎn)移目的地址(ROUT00 ~ROUT7FH)必須駐留在與絕對轉(zhuǎn)移指令A(yù)JMP相同的一個2KB存儲區(qū)內(nèi)。

      RL指令對變址部分乘以2,因?yàn)槊織lAJMP指令占兩個字節(jié)。

      三、循環(huán)程序

      在程序運(yùn)行時,有時需要連續(xù)重復(fù)執(zhí)行某段程序,可以使用循環(huán)程序。其結(jié)構(gòu)包括四部分:

      1、置循環(huán)初值

      2、循環(huán)體(循環(huán)工作部分)

      3、修改控制變量

      4、循環(huán)控制部分 其組織方式如圖4-2所示。

      1、置循環(huán)初值

      對于循環(huán)程序中所使用的工作單元,在循環(huán)開始時應(yīng)置初值。

      例如,工作寄存器設(shè)置計數(shù)初值,累加器A清0,以及設(shè)置地址指針、長度等。

      2、循環(huán)體(循環(huán)工作部分)

      重復(fù)執(zhí)行的程序段部分,分為循環(huán)工作部分和循環(huán)控制部分。

      循環(huán)控制部分每循環(huán)一次,檢查結(jié)束條件,當(dāng)滿足條件時,就停止循環(huán),往下繼續(xù)執(zhí)行其他程序

      3、修改控制變量

      在循環(huán)程序中,不許給出循環(huán)結(jié)束條件。

      常見的是計數(shù)循環(huán),當(dāng)循環(huán)了一定的次數(shù)后,就停止循環(huán)。

      在單片機(jī)中,一般用一個工作寄存器Rn作為計數(shù)器,對該計數(shù)器賦初值作為循環(huán)次數(shù)。每循環(huán)一次,計數(shù)器的值減1,即修改循環(huán)控制變量,當(dāng)計數(shù)器的置件為0時,就停止循環(huán)。

      4、循環(huán)控制部分

      根據(jù)循環(huán)結(jié)束條件,判斷是否結(jié)束循環(huán)。

      89C51可采用DJNZ指令來自動修改控制變量并能結(jié)束循環(huán)。

      §4.2 匯編語言源程序的編輯和匯編

      §4.2.1 源程序編輯

      在微型計算機(jī)上,借助編輯軟件,編寫或修改匯編語言源程序。如行編輯或屏幕編輯軟件。

      §4.2.2 源程序的匯編

      匯編:將匯編語言源程序轉(zhuǎn)換為機(jī)器碼表示的目標(biāo)程序的過程。對單片機(jī)有:

      一、手工匯編

      二、機(jī)器匯編

      三、反匯編

      一、手工匯編

      通過手工方式查指令編碼表,逐個把助記符指令“翻譯”成機(jī)器碼,然后把得到的機(jī)器碼程序鍵入單片機(jī),進(jìn)行調(diào)試和運(yùn)行。

      手工匯編的缺點(diǎn):

      1、偏移量的計算容易出錯

      2、程序的修改會引起后面指令地址的變化,轉(zhuǎn)移指令的偏移量也要重新計算。

      二、機(jī)器匯編

      機(jī)器匯編是在計算機(jī)上使用交叉匯編程序進(jìn)行源程序的匯編。匯編工作由機(jī)器自動完成,最后得到以機(jī)器碼表示的目標(biāo)程序。

      三、反匯編

      將二進(jìn)制機(jī)器語言程序翻譯成匯編語言程序的過程稱反匯編。匯編和反匯編的過程如圖4-3所示。

      圖4-3

      匯編和反匯編過程

      §4.2.3 偽指令

      偽指令不是真正的指令,無對應(yīng)的機(jī)器碼,在匯編時不產(chǎn)生目標(biāo)程序,只是用來對匯編過程進(jìn)行某種控制。

      ? ORG 匯編起始命令 格式:ORG

      16位地址

      功能:規(guī)定該偽指令后面程序的匯編地址,即匯編后生成目標(biāo)程序存放的起始地址。例如:

      ORG

      2000H START:MOV

      A,#64H

      規(guī)定了START的地址是2000H,又規(guī)定了匯編后的第一條指令碼從2000H開始存放。? END 匯編結(jié)束指令 格式:END 功能:通知匯編程序結(jié)束匯編。在END之后所有的匯編指令均不予以處理。

      ? EQU 賦值命令

      格式:字符名稱

      EQU 項(xiàng)(數(shù)或匯編符號)功能:把“項(xiàng)”賦給“字符名稱”。

      注意:字符名稱不等于標(biāo)號(其后沒有冒號);其中的項(xiàng),可以是數(shù),也可以是匯編符號。EQU賦值過的符號名可以用作數(shù)據(jù)、代碼地址、位地址或一個立即數(shù)??梢允?位的,也可以是16位的。

      例如: 例1:

      AA

      EQU

      R1

      MOV A,AA;AA代表工作寄存器R1 例2:

      A10

      EQU

      DELY

      EQU

      07EBH

      MOV

      A,A10;A10作為片內(nèi)的一個直接地址

      LCALL

      DELY;DELY作為一個16位子程序的入口地址 ? DATA

      數(shù)據(jù)地址賦值命令

      格式:字符名稱

      DATA

      表達(dá)式 功能:與EQU類似,但有以下差別:

      1、EQU定義的字符名必須先定義后使用,而DATA定義的字符名可以后定義先使用。

      2、用EQU偽指令可以把一個匯編符號賦給一個名字,而DATA只能把數(shù)據(jù)賦給字符名。

      3、DATA語句可以把一個表達(dá)式的值賦給字符名稱,其中的表達(dá)式應(yīng)是可求值的。DATA偽指令在程序中用來定義數(shù)據(jù)地址

      ? DB 定義字節(jié)命令 格式:DB(項(xiàng)或項(xiàng)表)

      功能:通知匯編程序從當(dāng)前ROM地址開始,保留一個字或字節(jié)串的存儲單元,并存入DB后的數(shù)據(jù)。

      注意:項(xiàng)或項(xiàng)表可以是一個字節(jié),用逗號隔開的字節(jié)串或括在單引號中的ASCII字符串。例如:

      ORG

      2000H

      DB

      0A3H LIST:DB

      26H,03H STR:DB

      ‘ABC’

      經(jīng)匯編后(2000H)=A3H,(2001H)=26H,(2002H)=03H,(2003H)=41H,(2004H)=42H,(2005H)=43H,(41H,42H,43H分別為A,B,C的ASCII碼)? DW 定義字命令

      格式:DW

      16位數(shù)據(jù)項(xiàng)或項(xiàng)表

      功能:把DW后的16位數(shù)據(jù)項(xiàng)或項(xiàng)表從當(dāng)前地址連續(xù)存放。每項(xiàng)數(shù)值為16位二進(jìn)制數(shù),高8位先放,低8位后存放。DW用于定義一個地址表。

      例如:

      ORG

      1500H TABLE:DW

      7234H,8AH,10H

      經(jīng)匯編后(1500H)=72H,(1501H)=34H,(1502H)=00H,(1503H)=8AH,(1504H)=00H,(1505H)=10H,? DS 定義存儲空間命令 格式:DS

      表達(dá)式

      功能:在匯編時,從指定地址開始保留DS之后表達(dá)式的值所規(guī)定的存儲單元以備后用。例如:

      ORG

      1000H DS

      08H DB

      30H,8AH 匯編后,從1000H保留8個單元,然后從1008H按DB命令給內(nèi)存賦值,即(1008H)=30H

      (1009H)=8AH ? BIT 位地址符號命令 格式:字符名

      BIT

      位地址

      功能:把BIT后的位地址值賦給字符名。其中字符名不是標(biāo)號,其后沒有冒號,但字符名是必須的。

      例如:

      A1

      BIT

      P1.0 A2

      BIT

      02H 匯編后,P1口第0位的位地址90H就賦給了A1,而A2的值則為02H。

      第二篇:第7章 單片機(jī)原理及接口技術(shù)講稿(第三版)-李朝青

      第7章

      89C51串行口及串行通信技術(shù)

      本書前幾章涉及的數(shù)據(jù)傳送都是采用并行方式,如8051與存儲器,存儲器與存儲器,8051與并行打印機(jī)之間的通信。89C51處理8位數(shù)據(jù),若以并行傳送方式一次傳送一個字節(jié)的數(shù)據(jù),至少需要8條數(shù)據(jù)線。當(dāng)89C51與打印機(jī)連接時,除8條數(shù)據(jù)線外,還需要狀態(tài)、應(yīng)答等控制線。一些微機(jī)系統(tǒng),如IBM-PC系列機(jī),由于磁盤機(jī)、CRT、打印機(jī)與主機(jī)系統(tǒng)的距離有限,所以,使用多條電纜線以提高數(shù)據(jù)傳送速度還是合算的。但是,計算機(jī)之間、計算機(jī)與其終端之間的距離有時非常遠(yuǎn),此時,電纜線過多是不經(jīng)濟(jì)的

      串行通信只用一位數(shù)據(jù)線傳送數(shù)據(jù)的位信號,即使加上幾條通信聯(lián)絡(luò)控制線,也用不了很多電纜線。因此,串行通信適合遠(yuǎn)距離數(shù)據(jù)傳送,如大型主機(jī)與其遠(yuǎn)程終端之間、處于兩地的計算機(jī)之間采用串行通信就非常經(jīng)濟(jì)。當(dāng)然,串行通信要求有轉(zhuǎn)換數(shù)據(jù)格式、時間控制等邏輯電路,這些電路目前已被集成在大規(guī)模集成電路中(稱為可編程串行通信控制器),使用很方便。

      本章將介紹89C51串行口的結(jié)構(gòu)及應(yīng)用,PC機(jī)與89C51間的雙機(jī)通信,一臺PC機(jī)控制多臺89C51前沿機(jī)的分布式系統(tǒng),以及通信接口電路和軟件設(shè)計,并給出設(shè)計實(shí)例,包括接口電路、程序框圖、主程序和接收/發(fā)送子程序。

      7.1 串行通信基本知識

      7.1.1數(shù)據(jù)通信

      在實(shí)際工作中,計算機(jī)的CPU與外部設(shè)備之間常常要進(jìn)行信息交換,一臺計算機(jī)與其他計算機(jī)之間也往往要交換信息,所有這些信息交換均可稱為通信。

      通信方式有兩種,即并行通信和串行通信。

      通常根據(jù)信息傳送的距離決定采用哪種通信方式。

      例如,在IBM-PC機(jī)與外部設(shè)備(如打印機(jī)等)通信時,如果距離小于30m,可采用并行通信方式;當(dāng)距離大于30m時,則要采用串行通信方式。89C51單片機(jī)具有并行和串行二種基本通信方式。

      并行通信是指數(shù)據(jù)的各位同時進(jìn)行傳送(發(fā)送或接收)的通信方式。其優(yōu)點(diǎn)是傳送速度快;

      缺點(diǎn)是數(shù)據(jù)有多少位,就需要多少根傳送線。

      例如,89C51單片機(jī)與打印機(jī)之間的數(shù)據(jù)傳送就屬于并行通信。

      圖7-1(a)所示為89C51與外設(shè)間8位數(shù)據(jù)并行通信的連接方法。并行通信在位數(shù)多、傳送距離又遠(yuǎn)時就不太合適了。

      串行通信指數(shù)據(jù)是一位一位按順序傳送的通信方式。

      它的突出優(yōu)點(diǎn)是只需一對傳輸線(利用電話線就可作為傳輸線),這樣就大大降低了傳送成本,特別適用于遠(yuǎn)距離通信;

      其缺點(diǎn)是傳送速度較低。假設(shè)并行傳送N位數(shù)據(jù)所需時間位T,那么串行傳送的時間至少為NT,實(shí)際上總是大于NT的。

      圖7-1(b)所示為串行通信方式的連接方法。

      7.1.2串行通信的傳輸方式

      串行通信的傳送方向通常有三種:

      單向(或單工)配置,只允許數(shù)據(jù)向一個方向傳送;

      半雙向(或半雙工)配置,允許數(shù)據(jù)向兩個方向中的任一方向傳送,但每次只能有一個站點(diǎn)發(fā)送;

      全雙向(全雙工)配置,允許同時雙向傳送數(shù)據(jù),因此,全雙工配置是一對單向配置,它要求兩端的通信設(shè)備都具有完整和獨(dú)立的發(fā)送和接受能力。圖7-2所示為串行通信中的數(shù)據(jù)傳送方式。

      圖7-2 串行通信中的數(shù)據(jù)傳送方式

      7.1.3異步通信和同步通信

      串行通信有兩種基本通信方式,即異步通信和同步通信。

      1、異步通信

      在異步通信中,數(shù)據(jù)是一幀一幀(包括一個字符代碼或一字節(jié)數(shù)據(jù))傳送的,每一幀的數(shù)據(jù)格式如圖7-3所示

      圖7-3 異步通信數(shù)據(jù)格式

      在幀格式中,一個字符由四個部分組成:起始位、數(shù)據(jù)位、奇偶校驗(yàn)位和停止位。首先是一個起始為(0),然后是5位--8位數(shù)據(jù)(規(guī)定低位在前,高位在后),接下來是奇偶校驗(yàn)位(可省略),最后是停止位(1)。

      始位(0)信號只占用一位,用來通知接收設(shè)備一個待接收的字符開始到達(dá)。線路上在不傳送字符時應(yīng)保持為1。接收端不斷檢測線路的狀態(tài),若連續(xù)為1以后又測到一個0,就知道發(fā)來一個新字符,應(yīng)馬上準(zhǔn)備接收。字符的起始位還被用作同步接收端的時鐘,以保證以后的接收能正確進(jìn)行。

      起始位后面緊接著是數(shù)據(jù)位,它可以是5位(D0--D4)、6位、7位或8位(D0--D7)。奇偶校驗(yàn)(D8)只占一位,但在字符中也可以規(guī)定不用奇偶校驗(yàn)位,則這一位就可省去。也可用這一位(1/0)來確定這一幀中的字符所代表信息的性質(zhì)(地址/數(shù)據(jù)等)。

      停止位用來表征字符的結(jié)束,它一定是高電位(邏輯1)。停止位可以是1位、1.5位或2位。接收端收到停止位后,知道上一字符已傳送完畢,同時,也為接收下一個字符做好準(zhǔn)備--只要再接收到0,就是新的字符的起始位。若停止位以后不是緊接著傳送下一個字符,則使線路電平保持為高電平(邏輯1)。

      圖7-3(a)表示一個字符緊接一個字符傳送的情況,上一個字符的停止位和下一個字符的起始位是緊鄰的;

      圖7-3(b)則是兩個字符間有空閑位的情況,空閑位為1,線路處于等待狀態(tài)。存在空閑位正是異步通信的特征之一。

      例如,規(guī)定用ASCII編碼,字符為七位,加一個奇偶校驗(yàn)位、一個起始位、一個停止位,則一幀共十位。

      2、同步通信

      同步通信中,在數(shù)據(jù)開始傳送前用同步字符來指示(常約定1個--2個),并由時鐘來實(shí)現(xiàn)發(fā)送端和接收端同步,即檢測到規(guī)定的同步字符后,下面就連續(xù)按順序傳送數(shù)據(jù),直到通信告一段落。

      同步傳送時,字符與字符之間沒有間隙,也不用起始位和停止位,僅在數(shù)據(jù)塊開始時用同步字符SYNC來指示,其數(shù)據(jù)格式如圖7-4所示。

      同步字符的插入可以是單同步字符方式或雙同步字符方式,如圖7-4所示,然后是連續(xù)的數(shù)據(jù)塊。同步字符可以由用戶約定,當(dāng)然也可以采用ASCII碼中規(guī)定的SYNC代碼,即16H。按同步方式通信時,先發(fā)送同步字符,接收方檢測到同步字符后,即準(zhǔn)備接收數(shù)據(jù)。

      在同步傳送時,要求用時鐘來實(shí)現(xiàn)發(fā)送端與接收端之間的同步。為了保證接收正確無誤,發(fā)送方除了傳送數(shù)據(jù)外,還要同時傳送時鐘信號。

      同步傳送可以提高傳輸速率(達(dá)56kb/s或更高),但硬件比較復(fù)雜。

      3、波特率(Baud rate)

      波特率,即數(shù)據(jù)傳送速率,表示每秒鐘傳送二進(jìn)制代碼的位數(shù),它的單位是b/s。波特率對于CPU與外界的通信是很重要的。

      假設(shè)數(shù)據(jù)傳送速率是120字符/s,而每個字符格式包含1個代碼位(1個起始位、1個終止位、8個數(shù)據(jù)位)。這時,傳送的波特率為:

      10b/字符×120字符/s=1200b/s 每一位代碼的傳送時間Td為波特率的倒數(shù)。Td=1b/(1200bs-1)=0.833ms 異步通信的傳送速率在50b/s--19200b/s之間,常用于計算機(jī)到終端機(jī)和打印機(jī)之間的通信、直通電報以及無線電通信的數(shù)據(jù)發(fā)送等。

      7.1.4串行通信的過程及通信協(xié)議

      1、串←→并轉(zhuǎn)換與設(shè)備同步

      兩個通信設(shè)備在串行線路上成功地實(shí)現(xiàn)通信必須解決兩個問題:

      一是串←→并轉(zhuǎn)換,即如何把要發(fā)送的并行數(shù)據(jù)串行化,把接收的串行數(shù)據(jù)并行化;

      二是設(shè)備同步,即同步發(fā)送設(shè)備與接收設(shè)備的工作節(jié)拍,以確保發(fā)送數(shù)據(jù)在接收端被正確讀出。

      (1)串←→并轉(zhuǎn)換

      串行通信是將計算機(jī)內(nèi)部的并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù),將其通過一根通信線傳送;并將接收的串行數(shù)據(jù)再轉(zhuǎn)換成并行數(shù)據(jù)送到計算機(jī)中。

      在計算機(jī)串行發(fā)送數(shù)據(jù)之前,計算機(jī)內(nèi)部的并行數(shù)據(jù)被送入移位寄存器并一位一位地輸出,將并行數(shù)據(jù)轉(zhuǎn)換成串行數(shù)據(jù)。如圖7-5所示。

      在接收數(shù)據(jù)時,來自通信線路的串行數(shù)據(jù)被壓入移位寄存器,滿8位后并行送到計算機(jī)內(nèi)部。如圖7-6所示。

      在串行通信控制電路中,串--并、并--串轉(zhuǎn)換邏輯被集成在串行異步通信控制器芯片中。89C51單片機(jī)的串行口和IBM-PC相同。(2)設(shè)備同步

      進(jìn)行串行通信的兩臺設(shè)備必須同步工作才能有效地檢測通信線路上的信號變化,從而采樣傳送數(shù)據(jù)脈沖。

      設(shè)備同步對通信雙方有兩個共同要求: 一是通信雙方必須采用統(tǒng)一的編碼方法; 二是通信雙方必須能產(chǎn)生相同的傳送速率。

      采用統(tǒng)一的編碼方法確定了一個字符二進(jìn)制表示值的位發(fā)送順序和位串長度,當(dāng)然還包括統(tǒng)一的邏輯電平規(guī)定,即電平信號高低與邏輯1和邏輯0的固定對應(yīng)關(guān)系。

      通信雙方只有產(chǎn)生相同的傳送速率,才能確保設(shè)備同步,這就要求發(fā)送設(shè)備和接收設(shè)備采用相同頻率的時鐘。發(fā)送設(shè)備在統(tǒng)一的時鐘脈沖上發(fā)出數(shù)據(jù),接收設(shè)備才能正確檢測出與時鐘脈沖同步的數(shù)據(jù)信息。

      2、串行通信協(xié)議

      通信協(xié)議是對數(shù)據(jù)傳送方式的規(guī)定,包括數(shù)據(jù)格式定義和數(shù)據(jù)位定義等。

      通信雙方必須遵守統(tǒng)一的通信協(xié)議。串行通信協(xié)議包括同步協(xié)議和異步協(xié)議兩種。在此只討論異步串行通信協(xié)議和異步串性協(xié)議規(guī)定的字符數(shù)據(jù)的傳送格式。(1)起始位

      通信線上沒有數(shù)據(jù)被傳送時處于邏輯1狀態(tài)。

      當(dāng)發(fā)送設(shè)備要發(fā)送一個字符數(shù)據(jù)時,首先發(fā)出一個邏輯0信號,這個邏輯低電平就是起始位。

      起始位通過通信線傳向接收設(shè)備,接收設(shè)備檢測到這個邏輯低電平后,就開始準(zhǔn)備接收數(shù)據(jù)位信號。

      起始位所起的作用就是設(shè)備同步,通信雙方必須在傳送數(shù)據(jù)位前協(xié)調(diào)同步。(2)數(shù)據(jù)位

      當(dāng)接收設(shè)備收到起始位后,緊接著就會收到數(shù)據(jù)位。數(shù)據(jù)位的個數(shù)可以是5、6、7或8。IBM-PC中經(jīng)常采用7位或8位數(shù)據(jù)傳送,89C51串行口采用8位或9位數(shù)據(jù)傳送。這些數(shù)據(jù)位被接收到移位寄存器中,構(gòu)成傳送數(shù)據(jù)字符。在字符數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開始發(fā)送,依次順序在接收設(shè)備中被轉(zhuǎn)換為并行數(shù)據(jù)。(3)奇偶校驗(yàn)位

      數(shù)據(jù)位發(fā)送完之后,可以發(fā)送奇偶校驗(yàn)位。奇偶校驗(yàn)用于有限差錯檢測,通信雙方需約定已知的奇偶校驗(yàn)方式。如果選擇偶校驗(yàn),那么組成數(shù)據(jù)位和奇偶位的邏輯1的個數(shù)必須是偶數(shù);如果選擇奇校驗(yàn),那么邏輯1的個數(shù)必須是奇數(shù)。(4)停止位約定

      在奇偶位或數(shù)據(jù)位(當(dāng)無奇偶校驗(yàn)時)之后發(fā)送的是停止位。停止位是一個字符數(shù)據(jù)的結(jié)束標(biāo)志,可以是1位,1.5位或2位的高電平。接收設(shè)備收到停止位之后,通信線路上便又恢復(fù)邏輯1狀態(tài),直至下一個字符數(shù)據(jù)的起始位到來。(5)波特率設(shè)置

      通信線上傳送的所有位信號都保持一致的信號持續(xù)時間,每一位的信號持續(xù)時間都由數(shù)據(jù)傳送速度確定,而傳送速度是以每秒多少個二進(jìn)制位來衡量的,這個速度叫波特率。如果數(shù)據(jù)以300個二進(jìn)制位每秒在通信線上傳送,那么傳送速度為300波特,通常記為300b/s。(6)掛鉤(握手)信號約定

      (見本章7.4節(jié)實(shí)例)

      7.2 串行口及應(yīng)用

      89C51單片機(jī)除具有4個8位并行口外,還具有串行接口。

      此串行接口是一個全雙工串行通信接口,即能同時進(jìn)行串行發(fā)送和接收數(shù)據(jù)。它可以作UATR(通用異步接收和發(fā)送器)用,也可以作同步移位寄存器用。

      使用串行接口可以實(shí)現(xiàn)89C51單片機(jī)系統(tǒng)之間點(diǎn)對點(diǎn)的單機(jī)通信和89C51與系統(tǒng)機(jī)(如IBM-PC機(jī)等)的單機(jī)或多機(jī)通信。

      7.2.1 89C51串行口

      1、結(jié) 構(gòu)

      89C51通過引腳RXD(P3.0,串行數(shù)據(jù)接收端)和引腳TXD(P3.1,串行數(shù)據(jù)發(fā)送端)與外界進(jìn)行通信。其內(nèi)部結(jié)構(gòu)簡化示意圖如圖7-7所示。圖中有兩個物理獨(dú)立的接收、發(fā)送緩沖器SBUF,它們占用同一低值99H,可同時發(fā)送、接收數(shù)據(jù)。發(fā)送緩沖器只能寫入,不能讀出;接收緩沖器只能讀出,不能寫入。

      串行發(fā)送與接收的速率與移位時鐘同步。89C51用定時器T1作為串行通信的波特率發(fā)生器,T1溢出率經(jīng)2分頻(或不分頻)后又經(jīng)16分頻作為串行發(fā)送或接收的移位脈沖。移位脈沖的速率即是波特率。

      圖7-7 串行口內(nèi)部結(jié)構(gòu)示意簡圖

      從圖中可看出,接收器是雙緩沖結(jié)構(gòu),在前一個字節(jié)被從接收緩沖器SBUF讀出之前,第二個字節(jié)即開始被接收(串行輸入至移位寄存器),但是,在第二個字節(jié)接收完畢而前一個字節(jié)CPU未讀取時,會丟失前一個字節(jié)。

      串行口的發(fā)送和接收都是以特殊功能寄存器SBUF的名義進(jìn)行讀或?qū)懙?。?dāng)向SBUF發(fā)“寫”命令時(執(zhí)行“MOV SBUF,A”指令),即是向發(fā)送緩沖器SBUF裝載并開始由TXD引腳向外發(fā)送一幀數(shù)據(jù),發(fā)送完便使發(fā)送中斷標(biāo)志位TI=1。

      在滿足串行口接收中斷標(biāo)志位RI(SCON.0)=0的條件下,置允許接收位REN(SCON.4)=1就會接收一幀數(shù)據(jù)進(jìn)入移位寄存器,并裝載到接收SBUF中,同時使RI=1。當(dāng)發(fā)讀SBUF命令時(執(zhí)行“MOV A,SBUF”命令),便由接收緩沖器(SBUF)取出信息通過89C51內(nèi)部總線送CPU。

      對于發(fā)送緩沖器,因?yàn)榘l(fā)送時CPU是主動的,不會產(chǎn)生重疊錯誤,一般不需要用雙緩沖器結(jié)構(gòu)來保持最大傳送速率。

      2、串行口控制字及控制寄存器

      89C51串行口是可編程接口,對它初始化編程只用兩個控制字分別寫入特殊功能寄存器SCON(98H)和電源控制寄存器PCON(87H)中即可。(1)SCON(98H)

      89C51串行通信的方式選擇、接收和發(fā)送控制以及串行口的狀態(tài)標(biāo)志等均由特殊功能寄存器SCON控制和指示,其控制字格式如圖7-8所示。

      圖7-8 串行口控制寄存器SCON ①SM0和SM1(SCON.7,SCON.6)?a?a串行口工作方式選擇位。兩個選擇位對應(yīng)4種通信方式,如表7-1所示。其中,fosc是振蕩頻率。

      ②SM2(SCON.5)——多機(jī)通信控制位,主要用于方式2和方式3。

      若置SM2=1,則允許多機(jī)通信。當(dāng)一片89C51(主機(jī))與多片89C51(從機(jī))通信時,所有從機(jī)的SM2位都置1。主機(jī)首先發(fā)送的一幀數(shù)據(jù)為地址,即從機(jī)機(jī)號,其中第9位為1,所有的從機(jī)接收到數(shù)據(jù)后,將其中第9位裝入RB8中。

      各個從機(jī)根據(jù)收到的第9位數(shù)據(jù)(RB8中)的值來決定從機(jī)可否再接收主機(jī)的信息。若(RB8)=0,說明是數(shù)據(jù)幀,則使接收中斷標(biāo)志位RI=0,信息丟失;若(RB8)=1,說明是地址幀,數(shù)據(jù)裝入SBUF并置RI=1,中斷所有從機(jī),被尋址的目標(biāo)從機(jī)清除SM2以接收主機(jī)發(fā)來的一幀數(shù)據(jù)。其他從機(jī)仍然保持SM2=1。

      若SM2=0,即不屬于多機(jī)通信情況,則接收一貞數(shù)據(jù)后,不管第九位數(shù)據(jù)是0還是1,都制RI=1,接收到的數(shù)據(jù)裝入SBUF。

      根據(jù)SM2這個功能,可實(shí)現(xiàn)多個89C51應(yīng)用系統(tǒng)的串行通信。

      在方式1時,若SM2=1,則只有接收到有效停止位時,RI才制1,以便接收下一貞數(shù)據(jù)。在方式0時,SM2必須是0。

      ③REN(SCON.4)——允許接收控制位。

      由軟件置1或清0,只有當(dāng)REN=1時才允許接收,相當(dāng)于串行接收的開關(guān);若REN=0,則禁止接收。

      在串行通信接收控制過程中,如果滿足RI=0和REN=1(允許接收)的條件,就允許接收,一幀數(shù)據(jù)就裝載入接收SBUF中。

      ④TB8(SCON.3)——發(fā)送數(shù)據(jù)的第9位(D8)裝入TB8中。

      在方式2或方式3中,根據(jù)發(fā)送數(shù)據(jù)的需要由軟件置位或復(fù)位。在許多通信協(xié)議中可用作奇偶校驗(yàn)位,也可在多機(jī)通信中作為發(fā)送地址幀或數(shù)據(jù)幀的標(biāo)志位。對于后者,TB8=1,說明該幀數(shù)據(jù)為地址;TB8=0,說明該幀數(shù)據(jù)為數(shù)據(jù)字節(jié)。在方式0或方式1中,該為未用。⑤RB8(SCON.2)——接收數(shù)據(jù)的第9位。

      在方式2或方式3中,接收到的第9位數(shù)據(jù)放在RB8位。它或是約定的奇/偶校驗(yàn)位,或是約定的地址/數(shù)據(jù)標(biāo)識位。在方式2和方式3多機(jī)通信中,若SM2=1,如果RB8=1,說明收到 7 的數(shù)據(jù)為地址幀。

      在方式1中,若SM2=0(即不是多機(jī)通信情況),RB8中存放的是已接收到的停止位。在方式0中,該位未用。

      ⑥TI(SCON.1)——發(fā)送中斷標(biāo)志。

      在一幀數(shù)據(jù)發(fā)送完時被置位。在方式0串行發(fā)送第8位結(jié)束或其他方式串行發(fā)送到停止位的開始時由硬件置位,可用軟件查詢。它同時也申請中斷,TI置位意味著向CPU提供“發(fā)送緩沖器SBUF已空”的信息,CPU可以準(zhǔn)備發(fā)送下一幀數(shù)據(jù)。串行口發(fā)送中斷被響應(yīng)后,TI不會自動清0,必須由軟件清0。

      ⑦RI(SCON.0)——接收中斷標(biāo)志。

      在節(jié)收到一幀有效數(shù)據(jù)后由硬件置位。在方式0中,第8位數(shù)據(jù)發(fā)送結(jié)束時,由硬件置位;在其他三種方式中,當(dāng)接收到停止位中間時由硬件置位。RI=1,申請中斷,表示一幀數(shù)據(jù)接收結(jié)束,并已裝入接收SBUF中,要求CPU取走數(shù)據(jù)。CPU響應(yīng)中斷,取走數(shù)據(jù)。RI也必須由軟件清0,清除中斷申請,并準(zhǔn)備接收下一幀數(shù)據(jù)。

      串行發(fā)送中斷標(biāo)志TI和接收中斷標(biāo)志RI是同一個中斷源,CPU事先不知道是發(fā)送中斷TI還是接收中斷RI產(chǎn)生的中斷請求,所以,在全雙工通信時,必須由軟件來判別。

      復(fù)位時,SCON所有位均清0。(2)PCON(87H)

      電源控制寄存器PCON中只有SMOD位與串行口工作有關(guān),如圖7-9所示。

      圖7-9 電源控制寄存器PCON SMOD(PCON.7)——波特率倍增位。

      在串行口方式

      1、方式2和方式3時,波特率和SMOD成正比,亦即當(dāng)SMOD=1時,波特率提高一倍。

      復(fù)位時,SMOD=0。

      3、串行通信工作方式

      根據(jù)實(shí)際需要,89C51串行口可設(shè)置4種工作方式,可有8位、10位或11位幀格式。方式0以8位數(shù)據(jù)為一幀,不設(shè)起始位和停止位,先發(fā)送或接收最低位。其幀格式如下:

      方式1以10位為一幀傳輸,設(shè)有1個起始位(0),8個數(shù)據(jù)位和1個停止位(1)。其幀格式為:

      方式2和方式3以11位為1幀傳輸,設(shè)有1個起始位(0),8個數(shù)據(jù)位,1個附加第9位和1個停止位(1)。其幀格式為:

      附加第9位(D8)由軟件置1或清0。發(fā)送時在TB8中,接收時送RB8中。(1)串行口方式0 方式0為同步移位寄存器輸入/輸出方式,常用于擴(kuò)展I/O口。

      串行數(shù)據(jù)通過RXD輸入或輸出,而TXD用于輸出移位時鐘,作為外接部件的同步信號。

      這種方式不適用于兩個89C51之間的直接數(shù)據(jù)通信,但可以通過外接移位寄存器來實(shí)現(xiàn)單片機(jī)的接口擴(kuò)展。

      圖7-10 方式0發(fā)送電路及時序

      圖7-11 方式0接收電路及時序

      例如,74LS164可用于擴(kuò)展并行輸出口,74LS165可用于擴(kuò)展輸入口。

      在這種方式下,收/發(fā)的數(shù)據(jù)為8位,低位在前,無起始位、奇偶校驗(yàn)位及停止位,波特率是固定的。

      發(fā)送過程中,當(dāng)執(zhí)行一條將數(shù)據(jù)寫入發(fā)送緩沖器SBUF(99H)的指令時,串行口把SBUF中8位數(shù)據(jù)以fosc/12的波特率從RXD(P3.0)端輸出,發(fā)送完畢置中斷標(biāo)志TI=1。方式0發(fā)送 9 時序如圖7-10(b)所示。寫SBUF指令在S6P1處產(chǎn)生一個正脈沖,在下一個機(jī)器周期的S6P2處數(shù)據(jù)的最低位輸出到RXD(P3.0)腳上;再在下一個機(jī)器周期的S3,S4,S5輸出移位時鐘為低電平,而在S6級下一個機(jī)器周期的S1,S2為高電平,就這樣講8位數(shù)據(jù)由低位至高位一位一位順序通過RXD線輸出,并在TXD腳上輸出fosc/12的移位時鐘,在“寫SBUF”有效后的第10個機(jī)器周期的S1P1將發(fā)送中斷標(biāo)志TI置位。圖中,74LS164是TTL“串入并出”移位寄存器。

      接收時,用軟件置REN=1(同時,RI=0),即開始接收。接收時序如圖7-11(b)所示。當(dāng)使SCON中的REN=1(RI=0)時,產(chǎn)生一個正脈沖,在下一個機(jī)器周期的S3P1~S5P2,從TXD(P3.1)腳上輸出低電平的移位時鐘,在此機(jī)器周期的S5P2對P3.0腳采樣,并在本機(jī)器周期的S6P2通過串行口內(nèi)的輸入移位寄存器將采樣值移位接收;在同一個機(jī)器的S6P1到下一個機(jī)器周期的S2P2,輸出移位時鐘為高電平。于是,講述句字節(jié)從地位至高位一位一位地接收下來病狀如SBUF中,在啟動接收過程(即寫SCON,清RI位)將SCON中的RI清0之后的第10個機(jī)器周期的S1P1,RI被置位。這一幀數(shù)據(jù)接收完畢,可進(jìn)行下一幀接收。圖7-11(b)中,74LS165是TTL“并入串出”移位寄存器,QH端為74LS165的串行輸出端,經(jīng)P3.0輸入至89C51。(2)串行口方式1 方式1真正用于串行發(fā)送或接收,為10位通用異步接口。TXD與RXD分別用于發(fā)送與接收數(shù)據(jù)。

      收發(fā)一幀數(shù)據(jù)的格式為1位起始位、8位數(shù)據(jù)位(低位在前)、1位停止位,共10位。在接收時,停止位進(jìn)入SCON的RB8,此方式的傳送波特率可調(diào)。串行口方式1的發(fā)送和接收時序如圖7-12(a)和(b)所示

      圖7-12 方式1發(fā)送和接收時序

      方式1發(fā)送時,數(shù)據(jù)從引腳TXD(P3.1)端輸出。當(dāng)執(zhí)行數(shù)據(jù)寫入發(fā)送緩沖器SBUF的命令時,就啟動了發(fā)送器開始發(fā)送。發(fā)送時的定時信號,也就是發(fā)送移位時鐘(TX時鐘),是由定時器T1(見圖7-7)送來的溢出信號經(jīng)過16分頻或32分頻(取決于SMOD的值)而得到的,TX時鐘就是發(fā)送波特率??梢?,方式1的波特率是可變的。發(fā)送開始的同時,SEND變?yōu)橛行В瑢⑵鹗嘉幌騎XD輸出;此后每經(jīng)過一個TX時鐘周期(16分頻計數(shù)器溢出一次為一個時鐘周期,因此,TX時鐘頻率由波特率決定。)產(chǎn)生一個移位脈沖,并由TXD輸出一個數(shù)據(jù)位;8位數(shù)據(jù)位全部發(fā)送完后,置為位TI,并申請中斷置TXD為1作為停止位,再經(jīng)一個時鐘周期,SEND失效。

      方式1接收時,數(shù)據(jù)從引腳RXD(P3.0)端輸入。接收是在SCON寄存器中REN位置1的前提下,并檢測到起始位(RXD上檢測到1→0的跳變,即起始位)而開始的。接收時,定時信號有兩種(如圖7-12(b)所示):一種是接收移位時鐘(RX時鐘),它的頻率和傳送波特率相同,也是由定時器T1的溢出信號經(jīng)過16或32分頻而得到的;另一種是位檢測器采樣脈沖,它的頻率是RX時鐘的16倍,亦即在一位數(shù)據(jù)期間有16位檢測器采樣脈沖,為完成檢測,以16倍于波特率的速率對RXD進(jìn)行采樣。

      為了接受準(zhǔn)確無誤,在正式接受數(shù)據(jù)之前,還必須判定這個1→0跳變是否是干擾引起的。為此,在這位中間(即一位時間分成16等份,在第7,第8及第9等份)連續(xù)對RXD采樣三次,取其中兩次相同的值進(jìn)行判斷。這樣能較好地消除干擾的影響。當(dāng)確認(rèn)是真正的起始位(0)后,就開始接受一幀數(shù)據(jù)。當(dāng)一幀數(shù)據(jù)接受完畢后,必須同時滿足以下兩個條件,這次接受才真正有效。

      ①RI=0,即上一幀數(shù)據(jù)接收完成時,RI=1發(fā)出的中斷請求已被響應(yīng),SBUF中數(shù)據(jù)已被取走。由軟件使RI=0,以便提供“接收SBUF已空”的信息。

      ②SM2=0或收到的停止位為1(方式1時,停止位進(jìn)入RB8),則將接收到的數(shù)據(jù)裝入串行口的SBUF和RB8(RB8裝入停止位),并置位RI;如果不滿足,接收到的數(shù)據(jù)不能裝入SBUF,這意味著該幀信息將會丟失。

      值得注意的是,在整個接收過程中,保證REN=1是一個先決條件。只有當(dāng)REN=1時,才能對RXD進(jìn)行檢測。

      (3)串行口方式2和方式3 串行口工作在方式2和方式3均為每幀11位異步通信格式,由TXD和RXD發(fā)送與接收(兩種方式操作是完全一樣的,所不同的只是波特率)。

      每幀11位,即1位起始位,8位數(shù)據(jù)位(低位在前),1位可編程的第9數(shù)據(jù)位和1位停止位。發(fā)送時,第9數(shù)據(jù)位(TB8)可以設(shè)置為1或0,也可將奇偶位裝入TB8,從而進(jìn)行奇偶校驗(yàn);接收時,第9數(shù)據(jù)位進(jìn)入SCON的RB8。

      方式2和方式3的發(fā)送、接收時序如圖7-13所示。其操作與方式1類似。

      圖7-13 方式

      2、方式3發(fā)送和接收時序

      發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置TB8(如作奇偶校驗(yàn)位或地址/數(shù)據(jù)標(biāo)志位),然后將要發(fā)送的數(shù)據(jù)寫入SBUF,即可啟動發(fā)送過程。串行口能自動把TB8取出,并裝入到第9位數(shù)據(jù)位的位置,再逐一發(fā)送出去。發(fā)送完畢,使TI=1。

      接收時,使SCON中的REN=1,允許接收。當(dāng)檢測到RXD(P3.0)端有1→0的跳變(起始位)時,開始接收9位數(shù)據(jù),送入移位寄存器(9位)。當(dāng)滿足RI=0且SM2=0,或接收到的第9位數(shù) 11 據(jù)為1時,前8位數(shù)據(jù)送入SBUF,附加的第9位數(shù)據(jù)送入SCON中的RB8,置RI為1;否則,這次接收無效,也不置位RI。

      4、波特率設(shè)計

      在串行通信中,收發(fā)雙方對發(fā)送或接收的數(shù)據(jù)速率有一定的約定,通過軟件對89C51串行口編程可約定四種工作方式。其中,方式0和方式2的波特率是固定的;而方式1和方式3的波特率是可變的,由定時器T1的溢出率來決定。

      串行口的四種工作方式對應(yīng)著三種波特率。由于輸入的移位時鐘來源不同,因此,各種方式的波特率計算公式也不同。(1)方式0的波特率

      由圖7-14可見,方式0時,發(fā)送或接收一位數(shù)據(jù)的移位時鐘脈沖由S6(即第6個狀態(tài)周期,第12個節(jié)拍)給出,即每個機(jī)器周期產(chǎn)生一個移位時鐘,發(fā)送或接收一位數(shù)據(jù)。因此,波特率固定為振蕩頻率的1/12,并不受PCON寄存器中SMOD位的影響。

      圖7-14 串行口方式0波特率的產(chǎn)生

      方式0波特率 ≌ fosc / 12 注意,符號“≌”表示左面的表達(dá)式只是引擁右面表達(dá)式的數(shù)值,即右面的表達(dá)式是提供了一種計算的方法。(2)方式2的波特率

      串行口方式2波特率的產(chǎn)生與方式0不同,即輸入的時鐘源不同,其時鐘輸入部分入圖7-15所示。

      圖7-15 串行口方式2波特率的產(chǎn)生

      控制接收與發(fā)送的移位時鐘由振蕩頻率fosc的第二節(jié)拍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波特率的產(chǎn)生

      當(dāng)SMOD=0時,n=32;SMOD=1時,n=16。所以,可用下式確定方式1和方式3的波特率: 方式

      1、方式3波特率≌2SMOD/32×(T1溢出速率)其中,T1溢出速率取決于T1的計數(shù)速率(計數(shù)速率≌fosc/12)和T1預(yù)置的處置。若定時器T1采用模式1時,波特率公式如下:

      串行方式

      1、方式3波特率≌2SMOD/32×(fosc/12)/(216-初值)表7-2列出了串行口方式

      1、方式3常用波特率及其初值。

      表7-2 常用波特率與其他參數(shù)選取關(guān)系

      定時器T1用作波特率發(fā)生器時,通常選用定時器模式2(自動重裝初值定時器)比較實(shí)用。要設(shè)置定時器T1為定時方式(使C/T=0),讓T1計數(shù)內(nèi)部振蕩脈沖,即計數(shù)速率為fosc/12(注意應(yīng)禁止T1中斷,以免溢出而產(chǎn)生不必要的中斷)。先設(shè)定TH1和TL1定時即輸初值為X,那么每過“28-X”個機(jī)器周期,定時器T1就會產(chǎn)生一次溢出。

      4、波特率設(shè)計

      因此,T1溢出速率為

      T1溢出速率≌(fosc/12)/(28-X)13

      于是,可得出定時器T1模式2的初始值X:

      例7-1:89C51單片機(jī)時鐘振蕩頻率為11.0592MHz,選用定時器T1工作模式2作為波特率發(fā)生器,波特率為2400b/s,求初值。

      解:設(shè)置波特率控制為(SMOD)=0

      所以,(TH1)=(TL1)=F4H。

      系統(tǒng)晶體振蕩頻率選為11.0592MHz就是為了使初值為整數(shù),從而產(chǎn)生精確的波特率。如果串行通信選用很低的波特率,可將定時器T1置于模式0或模式1,即13位或16位定時方式;但在這種情況下,T1溢出時,需要中斷服務(wù)程序重裝初值。中斷響應(yīng)時間和執(zhí)行指令時間會使波特率產(chǎn)生一定的誤差,可用改變初值的辦法加以調(diào)整。

      7.2.2 89C51串行口的工作方式及應(yīng)用

      如前所述,89C51串行口的工作主要受串行口控制寄存器SCON的控制,另外,也和電源控制寄存器PCON有些關(guān)系。SCON寄存器用來控制串行口的工作方式,還有一些其他的控制作用。

      89C51單片機(jī)串行口的四種工作方式傳送的數(shù)據(jù)位數(shù)敘述如下:

      ①方式0:移位寄存器輸入/輸出方式。串行數(shù)據(jù)通過RXD線輸入或輸出,而TXD線專用于輸出時鐘脈沖給外部移位寄存器。方式0可用來同步輸出或接收8位數(shù)據(jù)(最低位首先輸出),波特率固定為fosc/12,其中,fosc為單片機(jī)的時鐘頻率。

      ②方式1:10位異步接收/發(fā)送方式。一幀數(shù)據(jù)包括1位起始位(0),8位數(shù)據(jù)位和1位停止位(1)。串行接口電路在發(fā)送時能自動插入起始位和停止位;在接收時,停止位進(jìn)入特殊功能寄存器SCON的RB8位。方式1的傳送波特率是可變的,可通過改變內(nèi)部定時器的定時值來改變波特率。

      ③方式2:11位異步接收/發(fā)送方式。除了1位起始位、8位數(shù)據(jù)位、1位停止位之外,還可以插入第9位數(shù)據(jù)位。

      ④方式3:同方式2,只是波特率可變。

      1、串行口方式0的應(yīng)用

      89C51單片機(jī)串行口基本上是異步通信接口,但在方式0時是同步操作。外接串入——并出或并入——串出器件,可實(shí)現(xiàn)I/O的擴(kuò)展。

      串行口方式0的數(shù)據(jù)傳送可以采用中斷方式,也可以采用查詢方式。無論哪種方式,都要借助于TI或RI標(biāo)志。

      在串行口發(fā)送時,或者靠TI置位后引起中斷申請,在中斷服務(wù)程序中發(fā)送下一組數(shù)據(jù);或者通過查詢TI的值,只要TI為0就繼續(xù)查詢,直到TI為1后結(jié)束查詢,進(jìn)入下一個字符的發(fā)送。

      在串行口接收時,由RI引起中斷或?qū)I查詢來決定何時接收下一個字符。無論采用什么方式,在開始串行通信前,都要先對SCON寄存器初始化,進(jìn)行工作方式的設(shè)置。在方式0中,SCON寄存器的初始化只是簡單地把00H送入SCON就可以了。

      例7-2:用89C51串行口外接164串入——并出移位寄存器擴(kuò)展8位并行口;8位并行口的每位都接一個發(fā)光二極管,要求發(fā)光二極管從左到右以一定延遲輪流顯示,并不斷循環(huán)。設(shè)發(fā)光二極管為共陰極接法,如圖7-17所示。

      解:設(shè)數(shù)據(jù)串行發(fā)送采用中斷方式,顯示的延遲通過調(diào)用延遲程序DELAY來實(shí)現(xiàn)。程序清單:

      ORG 0023H;串行口中斷入口

      AJMP SBR;轉(zhuǎn)入串行口中斷服務(wù)程序

      ORG 2000H;主程序起始地址

      MOV SCON ,#00H;串行口方式0初始化

      MOV A ,#88H;最左一位發(fā)光二極管先亮

      CLR P1.0;關(guān)閉并行輸出

      MOV SBUF,A;開始串行輸出 LOOP : SJMP $;等待中斷 SBR : SETB P1.0;啟動并行輸出

      ACALL DELAY;顯示延遲一段時間

      CLR TI;清發(fā)送中斷標(biāo)志

      RR A;準(zhǔn)備右邊一位顯示

      CLR P1.0;關(guān)閉并行輸出

      MOV SBUF , A;再一次串行輸出

      RETI;中斷返回

      用方式0外加移位寄存器來擴(kuò)展8位輸出口時,要求移位寄存器帶有輸出控制,否則串行移位過程也會反映到并行輸出口;另外,輸出口最好再接一個寄存器或鎖存器,以免在輸出門關(guān)閉使(STB=0)輸出又發(fā)生變化。

      用方式0加上并入——串出移位寄存器可擴(kuò)展一個8位并行輸入口。移位寄存器必須帶有預(yù)置/移位的控制端,由單片機(jī)的一個輸出端子加以控制,以實(shí)現(xiàn)先由8位輸入口置數(shù)到移位寄存器,然后再串行移位從單片機(jī)的串行口輸入到接收緩沖器,最后再讀入到CPU中。

      例7-3:用89C51串行口外加移位寄存器165或166擴(kuò)展8位輸入口,輸入數(shù)據(jù)由8個開關(guān)提供,另有一個開關(guān)K提供聯(lián)絡(luò)信號。當(dāng)K=0時,表示要求輸入數(shù)據(jù),輸入的8位為開關(guān)量,提供邏輯模擬子程序的輸入信號。如圖7-18所示。

      解:串行口方式0的接收要用SCON寄存器中的REN位作為開關(guān)來控制。因此,初值化時,除了設(shè)置工作方式之外,還要使REN位為1,其余各位仍然為0。

      對RI采用查詢方式來編寫程序,當(dāng)然,先要查詢開關(guān)K是否閉合。程序清單:

      START: MOV SCON ,#10H;串行口方式0初始化

      JB P1.1 ,$;開關(guān)K未閉合,等待

      SETB P1.0;P/S=1,并行置入數(shù)據(jù)

      CLR P1.0;PS=0,開始串行移位

      JNB RI ,$;查詢RI

      CLR RI;查詢結(jié)束,清RI

      MOV A ,SBUF;讀數(shù)據(jù)到累加器

      ACALL LOGSIM;進(jìn)行邏輯模擬

      SJMP START;準(zhǔn)備下一次模擬

      2、串行口方式1的發(fā)送和接收

      例7-4:89C51串行口按雙工方式收發(fā)ASCII字符,最高位用來作奇偶校驗(yàn)位,采用可校驗(yàn)方式,要求傳送的波特率為1200b/s。編寫有關(guān)的通信程序。

      解:7位ASCII碼加1位奇校驗(yàn)共8位數(shù)據(jù),故可采用串行口方式1。

      89C51單片機(jī)的奇偶校驗(yàn)位P是當(dāng)累加器A中1的數(shù)目為奇數(shù)時,P=1。如果直接把P的值放入ASCII碼的最高位,恰好成了奇偶校驗(yàn),與要求不符。因此,要把P的值取反以后放入ASCII碼最高位,才是要求的奇校驗(yàn)。

      雙工通信要求收、發(fā)能同時進(jìn)行。實(shí)際上,收、發(fā)操作主要是在串行接口進(jìn)行,CPU只是把數(shù)據(jù)從接收緩沖器讀出和把數(shù)據(jù)寫入發(fā)送緩沖器。數(shù)據(jù)傳送用中斷方式進(jìn)行,響應(yīng)中斷以后,通過檢測是RI置位還是TI置位來決定CPU是進(jìn)行發(fā)送操作還是接收操作。發(fā)送和接收都通過調(diào)用子程序來完成,設(shè)發(fā)送數(shù)據(jù)區(qū)的首地址為20H,接收數(shù)據(jù)區(qū)的首地址為40H,fosc為6MHz,通過查波特率初值(表7-2)可知定時器的初裝值為F3H。定時器T1采用工作模式2,可以避免計數(shù)溢出后用軟件重裝定時初值的工作。

      程序清單: 主程序

      MOV TMOD ,#20H;定時器1設(shè)為模式2 MOV TL1 , #0F3H;定時器初值 MOV TH1 ,#0F3H;8位重裝值

      SETB TR1;啟動定時器1 MOV SCON ,#50H;設(shè)置為方式1,;REN=1 MOV R0 ,#20H;發(fā)送數(shù)據(jù)區(qū)首址 MOV R1 ,#40H;接收數(shù)據(jù)取首址 ACALL SOUT;先輸出一個字符 SETB ES SETB EA SJMP $;等待中斷 中斷服

      ORG 0023H;串行口中斷入口

      AJMP SBR1;轉(zhuǎn)至中斷服務(wù)程序 ORG 0100H SBR1: JNB RI ,SEND;TI=1,為發(fā)送中斷 ACALL SIN;RI=1,為接收中斷 SJMP NEXT;轉(zhuǎn)至統(tǒng)一的出口 SEND: ACALL SOUT;調(diào)用發(fā)送子程序 NEXT: RETI;中斷返回

      發(fā)送子程序

      SOUT: CLR TI MOV A ,@R0;取發(fā)送數(shù)據(jù)到A MOV C ,P;奇偶標(biāo)識賦予C CPL C;奇校驗(yàn)

      INC R0;修改發(fā)送數(shù)據(jù)指針 MOV SBUF ,A;發(fā)送ASCII碼 RET;返回 接收子程序 SIN: CLR RI MOV A ,SBUF;讀出接收緩沖區(qū)內(nèi)容 MOV C ,P;取出校驗(yàn)位 CPL C;奇校驗(yàn)

      ANL A ,#7FH;刪去校驗(yàn)位

      MOV @R1 ,A;讀入接收緩沖區(qū)

      INC RI;修改接收數(shù)據(jù)指針 RET;返回

      在主程序中已初始化REN=1,則允許接收。以上程序基本上具備了全雙工通信的能力,但不能說很完善。例如,再接收子程序中,雖然檢驗(yàn)了奇偶校驗(yàn)位,但沒有進(jìn)行出錯處理;另外,發(fā)送和接收數(shù)據(jù)區(qū)的范圍都很有限,也不能滿足實(shí)際需要。但有了一個基本的框架之后,逐漸完善還是可以做到的。

      例7-5:采用查詢方式由串行口發(fā)送帶奇偶校驗(yàn)位的數(shù)據(jù)塊。

      解:本理由內(nèi)部RAM單元20H-3FH取出ASCII碼數(shù)據(jù),在最高位上加奇偶校驗(yàn)位后由串行口發(fā)出。采用8位異步通信方式,波特率為1200b/s,fosc=11.059MHz。

      由要求可知,應(yīng)把串行口設(shè)置為方式1,采用定時器1模式2作為波特率發(fā)生器,預(yù)置值(TH1)=0E8H。

      程序清單: 主程序;

      MOV TMOD ,#20H;設(shè)置定時器1為模式2 MOV TL1 ,#0E8H;初值,波特率為1200b/s MOV TH1 ,#0E8H SETB TR1;啟動T1運(yùn)行

      MOV SCON ,#01000000B;設(shè)置串行口為方式1 MOV R0 ,#20H MOV R7 ,#32;數(shù)據(jù)塊長度 LOOP: MOV A ,@R0 ACALL SP-OUT JNB P ,ERROR;傳輸出錯處理,由SP-OUT中“CPL C”結(jié)果決定

      INC R0 DJNZ R7 ,LOOP ??

      串行口發(fā)送子程序(奇校驗(yàn));

      SP-OUT: MOV C ,PSW.0;設(shè)置奇校驗(yàn)位,校驗(yàn)位P=1為奇校驗(yàn)

      CPL C;奇校驗(yàn)(無此指令位偶校驗(yàn))MOV ACC.7 ,C;ACC.7補(bǔ)0或1 MOV SBUF ,A;啟動串行口發(fā)送過程

      CLR TI;清TI標(biāo)志,允許在發(fā)送 RET ERROR:(略)

      例7-6:由串行口接收帶奇偶校驗(yàn)位的數(shù)據(jù)塊。

      解:采用查詢方式,本例與上例相呼應(yīng),接收器把接收到的32B數(shù)據(jù)存放在20H-30H單元內(nèi),波特率同上,若奇偶校驗(yàn)出錯則置進(jìn)位位為1。

      程序清單: 主程序;

      MOV SCON ,#01010000B;設(shè)串口方式1,允許接收

      MOV TMOD ,#20H;設(shè)置定時器T1為模式2 MOV TL1 ,#0E8H;初值,波特率為1200b/s MOV TH1 ,#0E8H SETB TR1;啟動T1運(yùn)行

      MOV R0 ,#20H MOV R7 ,#32;數(shù)據(jù)塊長度 LOOP: ACALL SP-IN;調(diào)接收一幀子程序

      JC ERROR;由SP-IN中“CPL C”結(jié)果決定 MOV @R0 ,A;存放接收的數(shù)據(jù) INC R0 DJNZ R7 ,LOOP ??

      接收一幀子程序;

      SP-IN: JNB RI ,$;RI由硬件置位

      CLR RI;軟件清除RI

      MOV A ,SBUF

      MOV C ,P;檢查奇校驗(yàn)位

      CPL C;置C為主程序“JC ERROR”用

      ANL A ,#7FH;去掉奇校驗(yàn)位

      RET ERROR:(略)

      例7-7:利用串行口和堆棧技術(shù)發(fā)送字符串常量。解:

      上面兩個例子中,發(fā)送和接收的都是一些變量數(shù)據(jù),且存放在內(nèi)部RAM單元中?,F(xiàn)說明如何利用堆棧技術(shù)發(fā)送存放在程序存儲器內(nèi)的字符串常量。

      下面的例子中,這些字符串是發(fā)送給CRT終端的,以回車符(CR)和換行符(LF)開始,以換碼符(ESC)為結(jié)尾。下面是程序片斷:

      CR EQU 0DH;ASCII回車符 LF EQU 0AH;ASCII換行符 ESC EQU 1BH;ASCII換碼符 ??

      MOV TMOD ,#20H;設(shè)置定時器T1為模式2 18 MOV TL1 ,#0FDH;設(shè)波特率位9600b/s ;(fosc=11.059MHz)MOV TH1 ,#0FDH SETB TR1;啟動T1運(yùn)行 MOV SCON ,#01000000B;設(shè)置串行口方式1 ACALL XSTRING DB CR ,LF DB ‘NU&BIAA’;字符串常量 DB ESC ??

      XSTRING: POP DPH;把第1個字符的地址裝入DPTR POP DPL XSTR-1: CLR A;設(shè)偏移量為零 MOVC A ,@A+DPTR;取第1個字符 XSTR-2: MOV SBUF ,A;啟動一幀發(fā)送過程 JNB TI ,$;等待發(fā)送一幀完 CLR TI INC DPTR;指向下一字符 CLR A;偏移量為0 MOVC A ,@A+DPTR;取下一字符

      CJNE A ,#ESC ,XSTR-2;讀到ESC符時,;停止發(fā)送 MOV A ,#1 JMP @A+DPTR;返回執(zhí)行ESC符后 ;的一條指令,即接著

      ;執(zhí)行背景程序

      2、串行口方式1的發(fā)送和接收

      說明:程序中采用了“ACALL XSTRING”指令,而實(shí)際上由XSTRING開始的程序段形式上并不構(gòu)成一個子程序,因?yàn)樽映绦?,因?yàn)樽映绦驊?yīng)由RET作為結(jié)尾。

      采用ACALL指令的目的在于利用子程序調(diào)用協(xié)議,即執(zhí)行調(diào)用指令后,把一個單元(存放常量CR)的地址壓入了堆棧。

      這樣,XSTRING段的第1,2條指令執(zhí)行后,就把放置字符常量CR的單元地址置入DPTR了。ESC后一個單元應(yīng)是背景程序中送完字符串后要執(zhí)行的那條指令,故執(zhí)行完XSTRING程序段的最后2條指令,將繼續(xù)執(zhí)行背景程序。

      3、串行口方式

      2、方式3的發(fā)送和接收

      串行口方式 2與方式 3基本一樣(只是波特率設(shè)置不同),接收/發(fā)送 11位信息:開始為l位起始位(0),中間8位數(shù)據(jù)位,數(shù)據(jù)位之后為1位程控位(由用戶置SCON的TB8決定),最后是1位停止位(1)。只比方式l多了一位程控位。

      例7-8:用第9個數(shù)據(jù)位作奇偶校驗(yàn)位,編制串行口方式2的發(fā)送程序。解:設(shè)計一個發(fā)送程序,將片內(nèi)RAM 50H~5FH中的數(shù)據(jù)串行發(fā)送;串行口設(shè)定為方式2狀態(tài),TB8作奇偶校驗(yàn)位。在數(shù)據(jù)寫入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫入TB8,這時,第9位數(shù)據(jù)作奇偶校驗(yàn)用。

      方式2發(fā)送程序流程圖如圖7-19所示。

      程序清單如下:

      TRT: MOV SCON ,#80H;方式2設(shè)定

      MOV PCON ,#80H;取波特率為fosc/32 MOV R7 ,#10H;數(shù)據(jù)長度10H→R7 LOOP: MOV A ,@R0;取數(shù)據(jù)→A MOV C ,PSW.0;P→TB8 MOV TB8 ,C MOV SBUF ,A;數(shù)據(jù)→SBUF,啟動發(fā)送 WAIT: JBC TI ,CONT;判斷發(fā)送中斷標(biāo)志

      SJMP WAIT CONT: INC R0 DJNZ R7 ,LOOP RET 例7-9 編制一個串行口方式2接收程序,并核對奇偶校驗(yàn)位。

      解:根據(jù)上面介紹的特點(diǎn),在方式

      2、方式3的發(fā)送過程中,將數(shù)據(jù)和附加在TB8中的奇偶位一塊發(fā)向?qū)Ψ健R虼?,作為接收的一方?yīng)設(shè)法取出該奇偶位進(jìn)行核對,相應(yīng)的接收程序段為:

      RRR: MOV SCON ,#90H;選方式2,并允許接收(REN=1)LOOP: JBC RI ,RECEIV;等待接收數(shù)據(jù)并清RI SJMP LOOP RECEIV: MOV A ,SBUF;將接收到的字符取出后,送到ACC。注意,;傳送指令影響PSW,產(chǎn)生接收端的奇偶值 JB PSW.0 ,ONE;判斷接收端的奇偶值

      JB RB8 ,ERR;判斷發(fā)送端的奇偶值

      SJMP RIGHT ONE: JB RB8 ,ERR RIGHT: ??;接收正確

      ??

      ERR: ?? ;接收有錯

      當(dāng)接收到一個字符時,從SBUF轉(zhuǎn)移到ACC中時會產(chǎn)生接收端的奇偶值,而保存在RB8中的值為發(fā)送端的奇偶值,兩個奇偶值應(yīng)相等,否則接收字符有錯。發(fā)現(xiàn)錯誤要及時通知對方重發(fā)。

      例7-10:編制一個發(fā)送程序,將片內(nèi)RAM中50H—5FH的數(shù)據(jù)串行發(fā)送。串行口設(shè)定為工作方式2,TB8作奇偶校驗(yàn)位。

      解:在數(shù)據(jù)寫入發(fā)送SBUF之前,先將數(shù)據(jù)的奇偶標(biāo)志P寫入TB8,此時,第9位數(shù)據(jù)便可作奇偶校驗(yàn)用。可采用查詢和中斷兩種方式發(fā)送。

      (1)采用查詢方式的程序段

      ORG 0000H AJMP MAIN;上電,轉(zhuǎn)向主程序

      ORG 0100H;主程序

      MAIN: MOV SCON ,#80H;設(shè)工作方式2 MOV PCON ,#80H;取波特率為fosc/32 MOV R0 ,#50H;首址50H送R0 MOV R7 ,#10H;數(shù)值長度送R7 LOOP: MOV A ,@R0;取數(shù)據(jù)

      MOV C ,PSW.0;P→C MOV TB8 ,C;奇偶標(biāo)志送TB8 MOV SBUF ,A;發(fā)送數(shù)據(jù) WAIT: JBC TI ,CONT AJMP WAIT;等待中斷標(biāo)志TI=1 CONT: INC R0 DJNZ R7 ,LOOP;數(shù)值尚未發(fā)送完,繼續(xù)發(fā)送下一個數(shù)據(jù)

      SJMP $ END(2)采用中斷方式的程序段 ORG 0000H AJMP MAIN;上電,轉(zhuǎn)向主程序 ORG 0023H;串行口的中斷入口地址 AJMP SERVE;轉(zhuǎn)向中斷服務(wù)程序 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;發(fā)送第一個數(shù)據(jù) SJMP $ SERVE: CLR TI;清除發(fā)送中斷標(biāo)志 INC R0;修改數(shù)據(jù)地址 MOV A ,@R0 MOV C ,PSW.0;P→C MOV TB8 ,C MOV SBUF ,A;發(fā)送數(shù)據(jù)

      DJNZ R7 ,ENDT;判斷數(shù)據(jù)塊發(fā)送完否

      ;若未發(fā) 送完,則轉(zhuǎn)ENDT CLR ES;若發(fā)送完,則禁止串行口中斷 ENDT: RETI;中斷返回 END 例7-11:編制一個接收程序,將接收的16B數(shù)據(jù)送入片內(nèi)RAM的5OH—5FH單元中。設(shè)串行口工作于方式 3,波特率為2400b/s。

      解:方式3為11位異步通信方式,波特率取決于TI的溢出率。查 表7-2可知,當(dāng)晶振為11.059MHz,波特率為2400b/s時,可取SMOD=0。

      源程序如下:

      MAIN: MOV TMOD ,#20H;設(shè)TI工作于模式2 MOV TH1 ,#0F4H;賦循環(huán)計數(shù)初值 MOV TL1 ,#0F4H;賦計數(shù)值

      SETB TR1;啟動定時器TI MOV R0 ,#50H;首地址送R0 MOV R7 ,#10H;數(shù)據(jù)長度送R7 MOV SCON ,#0D0H;串行口工作與方式3,可接收 MOV PCON ,#00H;設(shè)SMOD=0 WAIT: JBC RI ,PR1;接收完一幀數(shù)據(jù),清RI,轉(zhuǎn)PR1 SJMP WAIT;否則等待 PR1: MOV A ,SBUF;讀入數(shù)據(jù) JNB P ,PNP;P=0,轉(zhuǎn)PNP JNB RB8 ,PER;P=1,RB8=0,轉(zhuǎn)出錯處理 SJMP RIGHT PNP: JB RB8 ,PER;P=0,RB8=1,轉(zhuǎn)出錯處理 RIGHT: MOV @R0 ,A;數(shù)據(jù)送內(nèi)存

      INC R0;修改地址指針

      DJNZ R7 ,WAIT;數(shù)據(jù)未接收完,繼續(xù)接收下一個數(shù)據(jù) CLR PSW.5;置正確接收完畢標(biāo)志F0=0 RET PER: SETB PSW.5 RET 22 7.3 RS-232C標(biāo)準(zhǔn)接口總線及串行通信硬件設(shè)計

      前面介紹了有關(guān)串行通信的基本知識及單片機(jī)的串行口結(jié)構(gòu)。下面介紹PC機(jī)與單片機(jī)間串行通信的硬件和軟件設(shè)計。

      在工業(yè)自動控制、智能儀器儀表中,單片機(jī)的應(yīng)用越來越廣泛。隨著應(yīng)用范圍的擴(kuò)大以及根據(jù)解決問題的需要,對某些數(shù)據(jù)要做較復(fù)雜的處理。由于單片機(jī)的運(yùn)算功能較差,對數(shù)據(jù)進(jìn)行較復(fù)雜的處理時,往往需要借助計算機(jī)系統(tǒng)。因此,單片機(jī)與PC機(jī)進(jìn)行遠(yuǎn)程通信更具有實(shí)際意義。利用89C51單片機(jī)的串行口與PC機(jī)的串行口COM1或COM2進(jìn)行串行通信,將單片機(jī)采集的數(shù)據(jù)傳送到PC機(jī)中,由PC機(jī)的高級語言或數(shù)據(jù)庫語言對數(shù)據(jù)進(jìn)行整理及統(tǒng)計等復(fù)雜處理;或者實(shí)現(xiàn)PC機(jī)對遠(yuǎn)程前沿單片機(jī)進(jìn)行控制。

      在實(shí)現(xiàn)計算機(jī)與計算機(jī)、計算機(jī)與外設(shè)間的串行通信時,通常采用標(biāo)準(zhǔn)通信接口、這樣就能很方便地把各種計算機(jī)、外部設(shè)備、測量儀器等有機(jī)地連接起來,進(jìn)行串行通信。RS-232C是由美國電子工業(yè)協(xié)會(EIA)正式公布的,在異步串行通信中應(yīng)用最廣的標(biāo)準(zhǔn)總線(C表示此標(biāo)準(zhǔn)修改了三次)。它包括了按位串行傳輸?shù)碾姎夂蜋C(jī)械方面的規(guī)定,適用于短距離或帶調(diào)制解調(diào)器的通信場合。為了提高數(shù)據(jù)傳輸率和通信距離,EIA又公布了RS-422,RS-423和RS-485串行總線接口作準(zhǔn)。

      7.3.1 RS-232C標(biāo)準(zhǔn)接口總線

      ELA RS-232C是目前最常用的串行接口標(biāo)準(zhǔn),用于實(shí)現(xiàn)計算機(jī)與計算機(jī)之間、計算機(jī)與外設(shè)之間的數(shù)據(jù)通信。

      該標(biāo)準(zhǔn)的目的是定義數(shù)據(jù)終端設(shè)備(DTE)之間接口的電氣特性。一般的串行通信系統(tǒng)是指微機(jī)和調(diào)制解調(diào)器(modem),如圖7-20。調(diào)制解調(diào)器叫數(shù)據(jù)電路終端設(shè)備(簡稱DCE)。RS-232C提供了單片機(jī)與單片機(jī)、單片機(jī)與PC機(jī)間串行數(shù)據(jù)通信的標(biāo)準(zhǔn)接口。通信距離可達(dá)到 15 m。

      RS-232C接口的具體規(guī)定如下:

      (l)范圍

      RS-232C標(biāo)準(zhǔn)適用于DCE和 DTE間的串行二進(jìn)制通信,最高的數(shù)據(jù)速率為 19.2 kb/s。如果不增加其他設(shè)備的話,RS-232C標(biāo)準(zhǔn)的電纜長度最大為15 m。

      RS-232C不適于接口兩邊設(shè)備間要求絕緣的情況。(2)RS-232C的信號特性

      為了保證二進(jìn)制數(shù)據(jù)能夠正確傳送,設(shè)備控制準(zhǔn)確完成,有必要使所用的信號電平保持一致。為滿足此要求,RS-232C標(biāo)準(zhǔn)規(guī)定了數(shù)據(jù)和控制信號的電壓范圍。由于RS-232C是在TTL集成電路之前研制的,所以它的電平不是+5V和地,而是采用負(fù)邏輯,規(guī)定+3V—15V之間的任意電壓表示邏輯0電平,-3V—15V之間的任意電壓表示邏輯1電平。(3)RS-232C接口信號及引腳說明

      表7-3給出了RS-232C串行標(biāo)準(zhǔn)接口信號的定義以及信號分類。串行通信信號引腳分為兩類: 一類為基本的數(shù)據(jù)傳送信號引腳,另一類是用于MODEM控制的信號引腳。

      ①基本的數(shù)據(jù)傳送信號

      基本的數(shù)據(jù)傳送信號引腳有TXD,RXD,GND 3個。

      TXD為數(shù)據(jù)發(fā)送信號引腳。數(shù)據(jù)由該腳發(fā)出,送上通信線,在不傳送數(shù)據(jù)時,異步串行通信接口維持該腳為邏輯1。

      RXD為數(shù)據(jù)接收信號引腳。來自通信線的數(shù)據(jù)從該引腳進(jìn)入。在無接收信號時,異步串行通信接口維持該腳為邏輯1。

      GDN為地信號引腳。GND是其他引腳信號的參考電位信號。

      “在零調(diào)制解調(diào)器”連接中,最簡單的形式就是只使用上述3個引腳,如圖7-21。其中,收發(fā)端的TXD與RXD交錯相連,GND與GND相連。

      ②MODEM控制(握手)信號引腳

      從計算機(jī)到MODEM的信號引腳包括DTR和RTS兩個: DTR信號引腳用于通知MODEM,計算機(jī)已經(jīng)準(zhǔn)備好。RTS信號引腳用于通知MODEM,計算機(jī)請求發(fā)送數(shù)據(jù)。

      從MODEM到計算機(jī)的信號包括DSR,CTS,DCD,RI共4個。DSR信號引腳用于通知計算機(jī),MODEM已經(jīng)準(zhǔn)備好。

      CTS信號引腳用于通知計算機(jī),MODEM可以接收傳送數(shù)據(jù)。DCD信號引腳用于通知計算機(jī),MODEM已與電話線路連接好。RI信號引腳為振鈴指示,用于通知計算機(jī)有來自電話網(wǎng)的信號。近年的RS-232C接口都是采用9針的連接器,(25針中有很多引腳是無意義的),如圖7-22所示。

      7.3.2信號電氣特性與電平轉(zhuǎn)換

      1.電氣特性

      為了增加信號在線路上的傳輸距離和提高抗干擾能力,RS-232C提高了信號的傳輸電平。該接口采用雙極性信號、公共地線和負(fù)邏輯。

      使用RS-232C,數(shù)據(jù)通信的波傳率允許范圍為0b/s—20kb/s。在使用 19200b/s進(jìn)行通信時,最大傳送距離在 20 m之內(nèi)。降低彼特率可以增加傳輸距離。

      2.電平轉(zhuǎn)換

      RS-232C規(guī)定的邏輯電平與一般微處理器、單片機(jī)的邏輯電平是不一致的。因此,在實(shí)際應(yīng)用的,必須把微處理器的信號電平(TTL電平)轉(zhuǎn)換為RS-232C電平,或者對兩者進(jìn)行逆轉(zhuǎn)換。這兩種轉(zhuǎn)換是通過專用電平轉(zhuǎn)換芯片實(shí)現(xiàn)的。

      MAX232、MAX202和早期的MC1488,75188等芯片可實(shí)現(xiàn)TTL→RS-232C的電平轉(zhuǎn)換;MC1489,75189等芯片可實(shí)現(xiàn)RS-232C→TTL的電平轉(zhuǎn)換。

      MC1488,MC1489的電路結(jié)構(gòu)與引腳排列見圖7-23。

      圖7-23 MC1488,MC1489的電路結(jié)構(gòu)與引腳排列

      MC1488由3個“與非”門和1個反相器構(gòu)成。Vcc可接+15V或+12V,VEE可接-15V或-12V,輸入為TTL電平,輸出為RS-232C電平。

      MC1489由4個反相器組成。Vcc接+5V,每個反相器都有一個控制端,它可接到電源電壓上,用以調(diào)整輸入的門限特性,也可通過一濾波電容接地。

      單片機(jī)的串行口通過電平轉(zhuǎn)換芯片所組成的RS-232C標(biāo)準(zhǔn)接口電路如圖7-24所示。

      圖7-24 RS-232C標(biāo)準(zhǔn)接口電路 7.3.3單片機(jī)與PC機(jī)通信的接口電路

      利用PC機(jī)配置的異步通信適配器,可以很方便地完成IBM-PC系列機(jī)與MCS-51單片機(jī)的數(shù)據(jù)通信。

      PC機(jī)與89C51單片機(jī)最簡單的連接是零調(diào)制三線經(jīng)濟(jì)型,這是進(jìn)行全雙工通信所必須的最少數(shù)目的線路。

      由于89C51單片機(jī)輸入、輸出電平為TTL電平,而IBM-PC機(jī)配置的是RS-232C標(biāo)準(zhǔn)串行接口,二者的電氣規(guī)范不一致,因此,要完成PC機(jī)與單片機(jī)的數(shù)據(jù)通信,必須進(jìn)行電平轉(zhuǎn)換。1.MAX232芯片簡介

      MAX232芯片是MAXIM公司生產(chǎn)的、包含兩路接收器和驅(qū)動器的IC芯片,適用于各種EIA-232C和V.28/V.24的通信接口。MAX232芯片內(nèi)部有一個電源電壓變換器,可以把輸入的+5V電源電壓變換成為RS-232C輸出電平所需的+10V電壓。所以,采用此芯片接口的串行通信 25 系統(tǒng)只需單一的+5V電源就可以了。對于沒有+12V電源的場合,其適應(yīng)性更強(qiáng)。加之其價格適中,硬件接口簡單,所以被廣泛采用。

      MAX232芯片的引腳結(jié)構(gòu)如圖7-25所示。

      圖7-25 MAX232芯片引腳圖

      MAX232芯片的典型工作電路如圖7-26所示。

      圖7-26 MAX232典型工作電路圖

      圖7-26中上半部分電容C1,C2,C3,C4及V+,V-是電源變換電路部分。

      在實(shí)際應(yīng)用中,器件對電源噪聲很敏感。因此,VCC必須要對地加去耦電容C5,其值為0.lμF。電容C1,C2,C3,C4取同樣數(shù)值的鉭電解電容1.0μF/16V,用以提高抗干擾能力,在連接時必須盡量靠近器件。

      下半部分為發(fā)送和接收部分。實(shí)際應(yīng)用中,T1IN,T2IN可直接接TTL/CMOS電平的MCS-51單片機(jī)的串行發(fā)送端 TXD;R1OUT,R2OUT可直接接TTL/CMOS電平的MCS-51單片機(jī)的串行接收端RXD;T1OUT,T2OUT可直接接PC機(jī)的 RS-232串口的接收端RXD;R1IN,R2IN可直接接PC機(jī)的RS-232串口的發(fā)送端TXD。

      2.采用 MAX232芯片接口的 PC機(jī)與 MCS-5l單片機(jī)串行通信接口電路

      現(xiàn)從MAX232芯片中兩路發(fā)送接收中任選一路作為接口。要注意其發(fā)送、接收的引腳要對應(yīng)。如使T1IN接單片機(jī) 的發(fā)送端TXD,則PC機(jī)的RS-232的接收端RXD一定要對應(yīng)接T1OUT引腳。同時,R1OUT接單片機(jī)的RXD引腳,PC機(jī)的 RS-232的發(fā)送端TXD對應(yīng)接R1IN引腳。其接口電路如圖7-27所示。

      圖7-27采用 MAX232接口串行通信電路

      7.4 89C51與89C51點(diǎn)對點(diǎn)異步通信

      7.4.1通信協(xié)議

      要想保證通信成功,通信雙方必須有一系列的約定,比如:

      作為發(fā)送方,必須知道什么時候發(fā)送信息,發(fā)什么,對方是否收到,收到的內(nèi)容有沒有錯,要不要重發(fā),怎樣 通知對方結(jié)束等等。作為接收方,必須知道對方是否發(fā)送了信息,發(fā)的是什么,收到的信息是否有錯,如果有錯怎 樣通知對方重發(fā),怎樣判斷結(jié)束等。

      這種約定就叫做通信規(guī)程或協(xié)議,它必須在編程之前確定下來。要想使通信雙方能夠正確交換信息和數(shù)據(jù),在 協(xié)議中對什么時候開始通信,什么時候結(jié)束通信,何時交換信息等等都必須作出明確的規(guī)定。只有雙方遵守這些規(guī) 定才能順利地進(jìn)行通信。

      7.4.2波特率設(shè)置

      在串行通信中,一個重要的指標(biāo)是波恃率,它反映了串行通信的速率,也反映了對于傳輸通道的要求。波特率越高,要求傳輸通道的頻帶越寬。一般異步通信的波特率在 50 b/s—600 b/s之間。

      由于異步通信雙方各用自己的時鐘源,要保證捕捉到的信號正確,最好采用較高頻率的時鐘。一般選擇時鐘頻率比波特率高16倍或64倍。若是時鐘頻率等于波特率,則頻率稍有偏差便會產(chǎn)生接收錯誤。

      在異步通信中,收、發(fā)雙方必須事先規(guī)定兩件事:

      一是字符格式,即規(guī)定字符各部分所占的位數(shù)是否采用奇偶校驗(yàn)以及校驗(yàn)的方式(偶校驗(yàn)還是奇校驗(yàn))等通信協(xié)議;

      二是采用的波特率以及時鐘頻率和波特率的比例關(guān)系。

      89C51的串行通信的波特率(由圖7-16可知)由定時器T1的溢出率獲得(僅指串行口方式

      1、方式3時),當(dāng)串行口工作于方式1或方式3時,波特率為

      其中,k為定時器1的位數(shù)

      定時器模式0,k=13;

      定時器模式1,k=16;

      定時器模式2和摸式3.k=8。

      若定時器T1工作于模式1,采用11.059MHz的晶振,要求利用定時器1產(chǎn)生1200b/s的波特率,則

      令SMOD=0,可算得初值為

      那么,TH1的初值為0FFH,TL1的初值為0E8H。有關(guān)的程序如下:

      MAIN: SETB PT1;設(shè)定T1為高中斷優(yōu)先級

      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運(yùn)行

      ??

      如果串行口工作于方式1,T1作為波特率發(fā)生器,需在T1溢出中斷服務(wù)程序中重裝初值。T1溢出中斷服程序:

      MOV TL1 ,#0E8H;重新裝入初值 MOV TH1 ,#0FFH RETI;中斷返回

      由于T1模式2是定時器自動重裝載的操作模式,當(dāng)定時器T1工作于模式2時,可直接用作串行口的波特率發(fā)生器。

      與上例相同,算得重裝載值

      有關(guān)程序?yàn)椋?/p>

      MOV TMOD ,#20H;置T1為模式2 MOV TL1 ,#0E8H;裝入初值 MOV TH1 ,#0E8H MOV PCON ,#00H;SMOD=0 SETB TR1;啟動T1運(yùn)行

      MOV SCON ,#01000000B;設(shè)置串行口為方式1 ??

      除非波特率很低,一般都采用T1模式2。因?yàn)楫?dāng)T1溢出后,參數(shù)自動裝入,可避免不必要的中斷請求。

      在第二節(jié)中,表7-2給出了晶振fosc=6MHz或12MHz時,常用波特率和定時器的初裝值。但要注意,表中的初裝值和波特率之間是有一定誤差的。

      若晶指fosc=11.095MHz,設(shè)置波特率為9600b/s,則定時器T1的初裝值為0FDH。設(shè)定時器操作于模式2,SMOD=0。

      若要求比較準(zhǔn)確的波特率,只能靠調(diào)整單片機(jī)的時鐘頻率fosc來得到。

      7.4.3通信程序舉例

      例7-12:設(shè)甲機(jī)發(fā)送,乙機(jī)接收。串行接口工作于方式3(每幀數(shù)據(jù)為11位,第9位用于奇偶校驗(yàn)),兩機(jī)均選用 6.0000MHz的振蕩頻率,波特率為 24O0 b/s。通信的功能為:

      甲機(jī):將片外數(shù)據(jù)存儲器4000H—407FH單元的內(nèi)容向乙機(jī)發(fā)送,每發(fā)送一幀信息,乙機(jī)對接收的信息進(jìn)行奇偶校驗(yàn)。此例對發(fā)送的數(shù)據(jù)作偶校驗(yàn),將P位值放在TB8中。若校驗(yàn)正確,則乙機(jī)向甲機(jī)回發(fā)“數(shù)據(jù)發(fā)送正確”的信號(例中以00H作為應(yīng)答信號)。甲機(jī)收到乙機(jī)“正確”的應(yīng)答信號后再發(fā)送下一個字節(jié)。若奇偶校驗(yàn)有錯,則乙機(jī)發(fā)出“數(shù)據(jù)發(fā)送不正確”的信號(例中以FFH作為應(yīng)答信號)。甲機(jī)接收到“不正確”應(yīng)答信號后,重新發(fā)送原數(shù)據(jù),直至發(fā)送正確。甲機(jī)將該數(shù)據(jù)塊發(fā)送完畢后停止發(fā)送。

      乙機(jī):接收甲機(jī)發(fā)送的數(shù)據(jù),并寫入以4000H為首址的片外數(shù)據(jù)存儲器中。每接收一幀數(shù)據(jù),乙機(jī)對所接收的數(shù)據(jù)進(jìn)行奇、偶校驗(yàn),并發(fā)出相應(yīng)的應(yīng)答信號,直至接收完所有數(shù)據(jù)。解:

      (1)計算定時器計數(shù)初值X 29 將已知數(shù)據(jù)fosc=6MHZ,波特率=2400b/s代人,得

      取SMOD=0時,X=249.49。因取整數(shù)誤差過大,故設(shè)SMOD=1,則X=242.98≈243=F3H。因此,實(shí)際波特率=2403.85 b/S。

      (2)能實(shí)現(xiàn)上述通信要求的甲、乙機(jī)的流程圖如圖7-28,圖7-29所示。

      圖7-28 甲機(jī)發(fā)送流程

      圖7-29 已機(jī)發(fā)送流程

      (3)源程序

      ①甲機(jī) 主程序 ORG 0000H LJMP MAIN;上電,轉(zhuǎn)向主程序 ORG 0023H;串行口的中斷入口地址 LJMP SERVE1;轉(zhuǎn)向甲機(jī)中斷服務(wù)程序 ORG 2000H;主程序

      MAIN: MOV TMOD ,#20H;設(shè)T1工作與模式2 MOV TH1 ,#0F3H;賦計數(shù)初值 MOV TL1 ,#0F3H;賦計數(shù)值

      SETB TR1;啟動定時器T1 MOV PCON ,#80H;設(shè)SMOD=1 MOV SCON ,#0D0H;置串行口方式3,允許接收 MOV DPTR ,#4000H;置數(shù)據(jù)塊首址 MOV R0 ,#80H;置發(fā)送字節(jié)數(shù)初值 SETB ES;允許串行口中斷 SETB EA;CPU開中斷

      MOVX A ,@DPTR;取第一個數(shù)據(jù)發(fā)送 MOV C ,P MOV TB8 ,C;奇偶標(biāo)志送TB8 MOV SBUF ,A;發(fā)送數(shù)據(jù) SJMP $;等待中斷 中斷服務(wù)程序

      SERVE1: JBC RI ,LOOP;是接收中斷,清除RI,轉(zhuǎn)入接收

      ;乙機(jī)的應(yīng)答信息

      CLR TI;是發(fā)送中斷,清除此中斷標(biāo)志 SJMP ENDT LOOP: MOV A ,SBUF;取乙機(jī)的應(yīng)答信息 CLR C SUBB A ,#01H;判應(yīng)答信號是#00嗎? JC LOOP1;是#00H,發(fā)送正確

      ;(#00H-#01H),C=1,轉(zhuǎn)LOOP1 MOVX A ,@DPTR;否則甲機(jī)重發(fā) MOV C ,P MOV TB8 ,C MOV SBUF ,A;甲機(jī)重發(fā)原數(shù)據(jù) SJMP ENDT LOOP1: INC DPTR;修改地址指針,準(zhǔn)備發(fā)送下 一個數(shù)據(jù) MOVX A ,@DPTR MOV C ,P MOV TB8 ,C MOV SBUF ,A;發(fā)送

      DJNZ R0 ,ENDT;數(shù)據(jù)塊未發(fā)送完,返回繼續(xù)發(fā)送 CLR ES;全部發(fā)送完,禁止串行口中斷 ENDT: RETI;中斷返回 END ①乙機(jī)主程序;

      ORG 0000H LJMP MAIN;上電,轉(zhuǎn)向主程序 ORG 0023H;串行口的中斷入口地址 LJMP SERVE2;轉(zhuǎn)向乙機(jī)中斷服務(wù)程序 ORG 2000H;主程序

      MAIN: MOV TMOD ,#20H;設(shè)T1工作與模式2 MOV TH1 ,#0F3H;賦計數(shù)初值 MOV TL1 ,#0F3H;賦計數(shù)值

      SETB TR1;啟動定時器T1 MOV PCON ,#80H;設(shè)SMOD=1 MOV SCON ,#0D0H;置串行口方式3,允許接收 MOV DPTR ,#4000H;置數(shù)據(jù)區(qū)首址 MOV R0 ,#80H;置接收字節(jié)數(shù)初值 SETB ES;允許串行口中斷 SETB EA;CPU開中斷 SJMP $;等待中斷 中斷服務(wù)程序:

      SERVE2: JBC RI ,LOOP;是接收中斷,清除此中斷 標(biāo)志,轉(zhuǎn)LOOP(接收)CLR TI;是發(fā)送中斷,清除此中斷 標(biāo)志,中斷返回 SJMP ENDT LOOP: MOV A ,SBUF;接收(讀入)數(shù)據(jù) MOV C ,P;奇偶標(biāo)志送C 32 JC LOOP1;為奇數(shù),轉(zhuǎn)LOOP1 ORL C ,RB8;為偶數(shù),檢測RB8 JC LOOP2;奇偶校驗(yàn)錯,轉(zhuǎn)LOOP2 SJMP LOOP3 LOOP1: ANL C ,RB8;檢測RB8 JC LOOP3;奇偶校驗(yàn)正確,轉(zhuǎn)LOOP3 LOOP2: MOV A ,#0FFH MOV SBUF ,A;發(fā)送“不正確”應(yīng)答信號 SJMP ENDT LOOP3: MOVX @DPTR ,A;存放接收數(shù)據(jù) MOV A ,#00H MOV SBUF ,A;INC DPTR;DJNZ R0 ,ENDT;CLR ES;ENDT: RETI;END 發(fā)送“正確”應(yīng)答信號 修改數(shù)據(jù)區(qū)指針

      數(shù)據(jù)塊未接收完,返回

      所有數(shù)據(jù)接收完畢,禁止串行口中斷中斷返回 33

      7.5 89C51與PC機(jī)間通信軟件的設(shè)計

      將一臺IBM-PC機(jī)和若干臺89C51單片機(jī)構(gòu)成小型分散控制或測量系統(tǒng),是目前微計算機(jī)應(yīng)用的一大趨勢。

      在這樣的系統(tǒng)中,以89C51芯片為核心的智能式測控儀表(作為從機(jī))既能完成數(shù)據(jù)采集、處理和各種控制任務(wù),又可將數(shù)據(jù)傳送給PC機(jī)(作為主機(jī)),PC機(jī)將這些數(shù)據(jù)進(jìn)行加工處理或顯示、打印,同時將各種控制命令送給各個從機(jī),以實(shí)現(xiàn)集中管理和最優(yōu)控制。顯然,要組成這樣的系統(tǒng),首先要解決PC機(jī)與各單片機(jī)之間的數(shù)據(jù)通信問題,這是一個多機(jī)通信問題。在解決該問題之前,先來討論一下PC機(jī)與一臺89C51之間點(diǎn)對點(diǎn)(亦即雙機(jī))通信的軟件設(shè)計。

      7.5.1 PC機(jī)通信軟件設(shè)計

      1.通信協(xié)議

      波特率:1200b/s;

      信息格式:8位數(shù)據(jù)位,1位停止位,無奇偶檢驗(yàn);

      傳送方式:PC機(jī)采用查詢方式收發(fā)數(shù)據(jù);89C51采用中斷方式接收,查詢方式發(fā)送; 校驗(yàn)方式:累加和校驗(yàn);

      握手信號:采用 軟件握手。發(fā)送方在發(fā)送之前先發(fā)一聯(lián)絡(luò)信號(用“?”號的ASCII碼,接收方接到“?”號后回送一個“·”號作為應(yīng)答信號),隨后依次發(fā)送數(shù)據(jù)塊長度(字節(jié)數(shù)),發(fā)送數(shù)據(jù),最后發(fā)送校驗(yàn)和。收方在收到發(fā)送方發(fā)過來的校驗(yàn)和后與自己所累加的校驗(yàn)和相比較,相同則回送一個“0”,表示正確傳送并結(jié)束本次的通信過程;若不相同則回送一個“F”,并使發(fā)送方重新發(fā)送數(shù)據(jù),直到接收正確為止。2.PC機(jī)發(fā)送文件子程序

      首先介紹通過串口發(fā)送一個文件的函數(shù)sendf()。規(guī)定欲發(fā)送的這個文件存在當(dāng)前盤上,并且為了便于說明問題,只傳送總字節(jié)小于256個字符的文件。

      sendf()函數(shù)程序流程圖如圖7-30所示。

      圖7-30 PC機(jī)發(fā)送文件子函數(shù)sendf()流程圖 PC機(jī)發(fā)送文件子函數(shù)sendf()程序清單如下:

      3、PC機(jī)接收文件子程序

      接收函數(shù)receivef()采用查詢方式從串口接收一個總字節(jié)數(shù)小于256個字符的文件,接收的文件也存于當(dāng)前盤上。

      接收文件子函數(shù)receivef()的程序流程圖如圖7-31所示。

      圖7-31 PC機(jī)接收文件子函數(shù)receivef()流程圖

      4、PC機(jī)主程序(函數(shù))

      在有了上述發(fā)送和接收文件兩個子函數(shù)之后,主函數(shù)的編寫就非常簡單了。主函數(shù)的工作只是在完成串口初始化后,根據(jù)鍵入的命令來決定是發(fā)送文件還是接收文件。

      主函數(shù)流程圖如圖7-32所示。

      圖7-32 PC機(jī)主函數(shù)流程圖

      PC機(jī)主函數(shù)如下:

      這里采用的是帶參主函數(shù)main(int argc,char *argv[ ])。其中,argc是一個整型變量,argv[ ]是一個字符型指針數(shù)組。利用main函數(shù)的參數(shù)可以使主程序從系統(tǒng)得到所需數(shù)據(jù)(也就是說帶參函數(shù)可直接從DOS命令行中得到參數(shù)值,當(dāng)然,這些值是字符串)。當(dāng)程序運(yùn)行時(在DOS下執(zhí)行.EXE文件),可以根據(jù)輸入的命令行參數(shù)進(jìn)行相應(yīng)的處理。

      例如,執(zhí)行程序mypro時,若要從當(dāng)前盤上將名為f1.c的文件從串口發(fā)送出去,需鍵入下述命令:

      mypro s f1.c 其中,mypro是源文件mypro.c經(jīng)編譯連接后生成的可執(zhí)行文件 mypro.exe。鍵入命令:

      mypro r f2.c 可以從串口接收若干字符,并寫入當(dāng)前盤上名為f2.c的文件中去。

      7.5.2 89C51通信軟件設(shè)計

      1、單片機(jī)查詢發(fā)送子程序

      本程序?qū)⑵釸AM從1000H開始的小于256B的數(shù)據(jù)從串行口發(fā)送出去,發(fā)送的數(shù)據(jù)字節(jié)數(shù)在R7中,用R6作累加和寄存器。程序流程圖如圖7-33所示。

      圖7-33 單片機(jī)查詢發(fā)送子程序流程圖

      單片機(jī)查詢發(fā)送子程序如下:

      SEND: MOV A,#3FH MOV SBUF,A JNB TI,$ 37 CLR TI;發(fā)‘?’號,即3FH JNB RI,$ CLR RI MOV A,SBUF CJNE A,#2EH,SEND;應(yīng)答信號是‘.’,即

      ; 2EH,則發(fā)字節(jié)數(shù) MOV A,R7 MOV R3,A;暫存總字節(jié)數(shù) MOV SBUF,A JNB TI,$ CLR TI MOV R6,#00H MOV DPTR,#1000H SEND1: MOVX A,@DPTR MOV SBUF,A;發(fā)送一個字符 JNB TI,$ CLR TI ADD A,R6;計算校驗(yàn)和 MOV R6,A INC DPTR DJNZ R7,SEND1;計數(shù)器(R7)不為零則轉(zhuǎn)SEND1 MOV A,R6 MOV SBUF,A JNB TI,$ CLR TI;發(fā)送校驗(yàn)和 MOV A,SBUF CJNE A,#46H,SEND2;如收到應(yīng)答是‘F’,即

      ;46H,則重發(fā)數(shù)據(jù) RET SEND2: MOV DPTR,#1000H MOV R6,#00H MOV A,R3 MOV R7,A AJMP SEND1

      2、單片即接收中斷服務(wù)子程序

      在中斷服務(wù)子程序中,為了區(qū)別所接收的信號是聯(lián)絡(luò)信號還是字節(jié)數(shù)、是數(shù)據(jù)還是校驗(yàn)和,需要設(shè)立不同的標(biāo)志位,為此在可位尋址的RAM中設(shè)定:

      位地址

      00H 接收聯(lián)絡(luò)信號標(biāo)志位 01H 接收字節(jié)數(shù)標(biāo)志位 02H 接收數(shù)據(jù)標(biāo)志位 03H 接收文件結(jié)束標(biāo)志位

      在初始化時,這些位均為0。程序流程圖如圖7-34所示。

      圖7-34 單片機(jī)接收中斷服務(wù)子程序流程圖

      在中斷服務(wù)子程序中,將接收到的字節(jié)數(shù)存入R7中,接收的數(shù)據(jù)存入片外RAM從1000H開始的單元中。

      單片機(jī)接收中斷服務(wù)子程序如下: 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;發(fā)送應(yīng)答信號‘.’, 即2EH SETB 00H SETB ES 39 RETI RECE2: MOV A,#24H MOV SBUF,A JNB TI,$ CLR TI;發(fā)送應(yīng)答信號‘$’,即24H SETB ES RETI RECE1: JB 01H,RECE4 MOV A,SBUF;接收字節(jié)數(shù) MOV R7,A MOV R3,A;暫存總字節(jié)數(shù) 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的字節(jié)地址 MOV A,#4FH;校驗(yàn)和不正確,重發(fā) 數(shù)據(jù) MOV SBUF,A JNB TI,$ CLR TI;校驗(yàn)正確發(fā)‘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;校驗(yàn)不正確,發(fā)‘F’,即46H CLR 02H SETB ES RETI

      3、單片機(jī)主程序

      主程序流程圖如圖7-35所示。

      圖7-35 單片機(jī)的主程序流程圖

      單片機(jī)主程序如下: 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;設(shè)置波特率 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機(jī)與多個單片機(jī)間通信

      應(yīng)用IBM-PC系列微機(jī)和多個單片機(jī)構(gòu)成小型分布系統(tǒng)在一定范圍內(nèi)是最經(jīng)濟(jì)可行的方案,已被廣泛采用。這種分布系統(tǒng)在許多實(shí)時工業(yè)控制和數(shù)據(jù)采集系統(tǒng)中,充分發(fā)揮了單片機(jī)功能強(qiáng)、抗干擾性能好、溫限寬、面向控制等優(yōu)點(diǎn),同時又可以利用PC機(jī)彌補(bǔ)單片機(jī)在數(shù)據(jù)處理及交互性等方面的不足。在應(yīng)用系統(tǒng)中,一般是以IBM-PC系列微機(jī)作為主機(jī),定時掃描以單片機(jī)為核心的智能化控制器(即從機(jī)作為前沿機(jī))以便采集數(shù)據(jù)或發(fā)送控制信息。在這樣的系統(tǒng)中,智能化控制器既能獨(dú)立完成數(shù)據(jù)處理和控制任務(wù),又可以將數(shù)據(jù)傳送給PC機(jī)。PC機(jī)則將這些數(shù)據(jù)形象地顯示在 CRT上或通過打印機(jī)打印成各種報表,并將控制命令傳送給各個前沿單片機(jī),以實(shí)現(xiàn)集中管理和最優(yōu)控制。下面將討論P(yáng)C機(jī)與多個單片機(jī)之間的通信問題。

      7.6.1采用RS-232C標(biāo)準(zhǔn)總線通信

      1、采用MAX232芯片的RS-232C接口的通信電路

      PC機(jī)與多個單片機(jī)通信接口電路如圖7-36所示。整個通信系統(tǒng)的硬件結(jié)構(gòu)設(shè)計為主從式串行總線型。PC機(jī)串口給出的已是標(biāo)準(zhǔn)的RS-232C電平,而單片機(jī)則為TTL/CMOS電平。采用單一電源的MAX232芯片就可實(shí)現(xiàn)電平的轉(zhuǎn)換和驅(qū)動。

      圖7-36多個單片機(jī)與PC機(jī)通信電路

      2、多個單片機(jī)與PC機(jī)通信協(xié)議的約定

      PC機(jī)和89C51單片機(jī)雙向傳送數(shù)據(jù)代碼和功能代碼。數(shù)據(jù)代碼是通信過程必須傳送的目的代碼;功能代碼是應(yīng)答信號(如PC機(jī)要向單片機(jī)發(fā)數(shù)據(jù),PC機(jī)允許單片機(jī)發(fā)數(shù)據(jù),有誤碼重發(fā)等)以及表征數(shù)據(jù)特 征和數(shù)量的代碼。

      通信程序除具備前述的通信協(xié)議約定以外,還必須具有以下功能:(1)幀格式

      PC機(jī)必須能夠向單片機(jī)發(fā)送被尋呼的單片機(jī)站號(地址)、命令、字段、數(shù)據(jù)首地址長度、數(shù)據(jù)塊及各種核驗(yàn)值。單片機(jī)必須能夠向PC機(jī)發(fā)進(jìn)自身站號(地址)、國據(jù)長度、國據(jù)塊及校驗(yàn)值。

      (2)差錯檢測

      通信線的傳輸差錯是不可避免的,通信系統(tǒng)必須具有識別這種差錯的能力。例如,可以采用數(shù)據(jù)位累加法,即統(tǒng)計信息位中1的個數(shù)來進(jìn)行差錯檢測,也可采用累加和校驗(yàn)法。(3)差錯處理

      每發(fā)送一數(shù)據(jù)塊,僅當(dāng)數(shù)據(jù)塊接收正確時,才會發(fā)送一個響應(yīng)幀;否則,回送出錯信息,要求重發(fā)該數(shù)據(jù)塊,直至被正確接收為止。為了防止系統(tǒng)出錯引起撍浪鴶,最多只允許重發(fā)三次,否則轉(zhuǎn)出錯處理程序,顯示系統(tǒng)出錯。

      我們把通信協(xié)議分為三段,即主機(jī)與從機(jī)的連接掛鉤、握手階段,發(fā)送(接收)階段以及結(jié)束階段。連接階段主要是完成通信聯(lián)絡(luò)任務(wù),主機(jī)發(fā)送從機(jī)的地址信號,從機(jī)接收到后如果與本機(jī)地址相符,回送應(yīng)答信號,置SM2=0;否則不予理睬(SM2仍為1),實(shí)現(xiàn)主機(jī)與從機(jī)間的點(diǎn)對點(diǎn)通信。然后便可以開始發(fā)送或接收數(shù)據(jù)。在發(fā)送或接收數(shù)據(jù)過程中,選擇校驗(yàn)方法,對數(shù)據(jù)的傳輸進(jìn)行校驗(yàn)。結(jié)束階段則是當(dāng)通信系統(tǒng)出錯或誤碼次數(shù)越限時宣告通信失敗而結(jié)束 42 通信。

      PC機(jī)的通信軟件必須包括如下內(nèi)容:

      ①根據(jù)用戶的要求和通信協(xié)議規(guī)定,對 8250初始化,即設(shè)置波特率(1200 b/s)、數(shù)據(jù)位數(shù)(8位)、奇偶類型和停止位位數(shù)(l位)。需要指出的是,這里的奇偶校驗(yàn)位用作發(fā)送地址碼或數(shù)據(jù)的特征值,而數(shù)據(jù)通信的校核采用累加和校驗(yàn)方法。

      ②確定數(shù)據(jù)傳送方式。采用查詢方式發(fā)送和接收。在發(fā)送地址或數(shù)據(jù)時,首先由輸入指令檢查發(fā)送保持寄存器是否為空,若空,則由輸出指令將一個數(shù)據(jù)輸出給8250,8250會自動依據(jù)初始化設(shè)置的要求把二進(jìn)制數(shù)串行發(fā)送到串行通信線上。

      在接收數(shù)據(jù)時,8250把串行數(shù)據(jù)轉(zhuǎn)換成并行數(shù)據(jù)送到接收器的數(shù)據(jù)寄存器中,并把“接收數(shù)據(jù)準(zhǔn)備好”信號放入狀態(tài)寄存器中。計算機(jī)讀到這個信號后,就可以用輸入指令從接收器的數(shù)據(jù)寄存器中讀入一個數(shù)據(jù)了。

      ③確定PC機(jī)為主機(jī),所有單片機(jī)為從機(jī)。從機(jī)的地址碼為0F1H—0F4H。下面給出查詢方式的PC機(jī)通信主程序框圖。如圖7-37所示。

      圖7-37多個單片機(jī)與PC機(jī)通信主程序框圖

      PC機(jī)開始設(shè)置為地址傳送方式。從0F1H地址碼開始發(fā)送,然后接收地址回送碼,如回送地址等于發(fā)送地址碼,則說明與1號從機(jī)握手成功。繼而可以設(shè)置為數(shù)據(jù)傳送方式,開始與1號從機(jī)交換數(shù)據(jù)。傳送數(shù)據(jù)結(jié)束后,又開始與2號從機(jī)(地址碼0F2H)聯(lián)絡(luò)。如PC機(jī)發(fā)送從機(jī)地址后,接收回送地址碼與發(fā)送地址碼不等,則與此地址碼的從機(jī)握手失敗。繼續(xù)與其他從機(jī)聯(lián)絡(luò)??

      ④為了避免出現(xiàn)死循環(huán),設(shè)置了按PC機(jī)任意鍵退出的功能。

      4、單片機(jī)的通信軟件

      單片機(jī)的波特率要與PC機(jī)一致。定時器T1作為波特率發(fā)生器,設(shè)置為工作模式2。串口設(shè)置為工作方式3,數(shù)據(jù)的傳送格式為11位,即1位起始位、8位數(shù)據(jù)位、1位停止位和作為數(shù)據(jù)/地址控制位的第9位。采用查詢方式發(fā)送和接收數(shù)據(jù)。單片機(jī)在通信開始階段,首先設(shè)置為傳送地址方式,等待接收地址,只有當(dāng)接收到本機(jī)的地址碼時,才回送本機(jī)地址給PC機(jī),以作為應(yīng)答信號。

      然后設(shè)置為傳送數(shù)據(jù)方式,以便開始傳送救據(jù)。其通信數(shù)據(jù)的約定要與PC機(jī)一致,即以什么樣的數(shù)據(jù)為結(jié)束標(biāo)志,多少位數(shù)據(jù)為一個數(shù)據(jù)塊或多少位數(shù)據(jù)進(jìn)行一次累加和校驗(yàn)。校驗(yàn)回送碼為00H時表示發(fā)進(jìn)正確,0FFH為錯誤,需要重發(fā)。重發(fā)的次數(shù)也要與PC機(jī)取得一致,不超過三次。

      下面給出單片機(jī)查詢方式通信的主程序。其程序框圖如圖7-38所示。4臺從機(jī)的通信程序基本相同,不同之處只是地址碼不同。

      圖7-38單片機(jī)查詢方式通信的主程序

      7.6.2采用RS-422A標(biāo)準(zhǔn)總線的通信系統(tǒng)

      RS-422A標(biāo)準(zhǔn)是美國電氣工業(yè)協(xié)會(EIA)公布的“平衡電壓數(shù)字接口電路的電氣特性”標(biāo)準(zhǔn),是為改善RS-232C標(biāo)準(zhǔn)的電氣特性,又考慮與RS-232C兼容而制定的。

      RS-422A比RS-232C傳輸信號距離長、速度快,傳輸率最大為 10 Mb/s,在此速率下,電纜允許長度為 120 m;如采用較低傳輸速率,如在 90000 b/s時,最大距離可達(dá)1200 m。

      RS-422A每個通道要用二相信號線,如果其中一根是邏輯1狀態(tài),另一根就為邏輯0。RS-422A電路由發(fā)送路、平衡連接電纜、電纜終端負(fù)載、接收器幾部分組成。規(guī)定電路中只允許有一個發(fā)送器,可有多個接收器。因此,通常采用點(diǎn)對點(diǎn)通信方式。該標(biāo)準(zhǔn)允許驅(qū)動器輸出為±(2V—6V),接收器可以檢測到的輸入信號電平可低到200mV。

      目前,RS-422與TTL的電平轉(zhuǎn)換最常用的芯片是傳輸線驅(qū)動器SN75174或MC3487和傳輸線接收器SN75175或MC3486,其內(nèi)部結(jié)構(gòu)及引腳如圖7-39所示。

      圖7-39 RS-422電平轉(zhuǎn)換芯片SN75174和SN75175 SN75174是具有三態(tài)輸出的單片4差分線驅(qū)動器,其設(shè)計符合EIA標(biāo)準(zhǔn)RS-422A規(guī)范,適用于噪聲環(huán)境中長總線線路的多點(diǎn)傳輸,采用+5V電源供電,功能上可與MC3487互換。

      SN75175是具有三態(tài)輸出的單片4差分接收器,其設(shè)計符合EIA標(biāo)準(zhǔn)RS-422A規(guī)范,適用于噪聲環(huán)境中長總線線路上的多點(diǎn)總線傳輸,該片采用+5V電源供電,功能上可與MC3486互換。

      這里主要討論采用RS-422A標(biāo)準(zhǔn)總線實(shí)現(xiàn)上位機(jī)與多臺前沿下位控制機(jī)之間的遠(yuǎn)距離通信。

      分布式通信系統(tǒng)網(wǎng)絡(luò)采用了主從式串行總線結(jié)構(gòu),如圖7-40所示。所有下位控制機(jī)全部掛在上位PC機(jī)的串行通信RS-422A標(biāo)準(zhǔn)總線上,下位控制機(jī)之間不進(jìn)行通信,只在上位機(jī)和下位機(jī)之間進(jìn)行主從方式通信。

      圖7-40 控制網(wǎng)絡(luò)系統(tǒng)結(jié)構(gòu)圖

      PC機(jī)中一般都有一塊RS-232串行通信板,該板完成串行數(shù)據(jù)轉(zhuǎn)換和串行數(shù)據(jù)接收、發(fā)送的任務(wù),采用RS-232C通信標(biāo)準(zhǔn)。這塊板使用簡單,不加調(diào)制解調(diào)器時,只用三條線即可完成通信功能。其不足之處是帶負(fù)載能力差、通信范圍小——不超過十幾米,很難滿足一般集散控 45 制系統(tǒng)的需要。

      為了充分利用這塊現(xiàn)有的串行接口板,并且進(jìn)一步擴(kuò)大通信范圍,可制作一塊RS-232/RS-422通信轉(zhuǎn)接板,接在PC機(jī)RS-232串行總線和通信線路之間,這樣就把通信標(biāo)準(zhǔn)從 RS-232C標(biāo)準(zhǔn)變成了RS-422A標(biāo)準(zhǔn)。RS-232/RS-422通信轉(zhuǎn)接板電路如圖7-40中虛線框內(nèi)部分所示。

      轉(zhuǎn)接板中的MC1488和MC1489是實(shí)現(xiàn)RS-232標(biāo)準(zhǔn)通信的一對芯片。前者發(fā)送,完成TTL電平到RS-232標(biāo)推電平的轉(zhuǎn)換;后者接收,完成從RS-232標(biāo)準(zhǔn)電平到TTL電平的轉(zhuǎn)換。MC3487和MC3486是實(shí)功RS-422標(biāo)準(zhǔn)通信的一對芯片。前者發(fā)送,把TTL電平變成RS-422標(biāo)準(zhǔn)電平;后者接收,將RS-422標(biāo)準(zhǔn)電平變成TTL電平。

      通信標(biāo)準(zhǔn)改變以后,采用了平衡傳輸方式,帶負(fù)載能力和抗干擾能力大大提高,通信距離可以達(dá)到 1200m以上,完全可以滿足一般集散控制系統(tǒng)多機(jī)通信的要求。通信軟件與前例大同小異。

      一個實(shí)際的PC機(jī)RS-232/RS-422接口轉(zhuǎn)接板電路如圖7-41所示。

      圖7-41 PC機(jī)RS-232/RS-422接口轉(zhuǎn)接板電路

      當(dāng)PC機(jī)發(fā)送數(shù)據(jù)時,首先由RS-232口的請求發(fā)送信號RTS的1電平經(jīng)MC1489→74LS05→光電隔離器到達(dá)75174的三態(tài)控制端,打開75174的三態(tài)門;發(fā)送的數(shù)據(jù)由TXD經(jīng)MC1489→74LS05→光電隔離器到75174的輸入端,經(jīng)75174輸出轉(zhuǎn)換成雙端輸出的RS-422標(biāo)準(zhǔn)電平信號,從而完成了RS-232到RS-422的轉(zhuǎn)換。

      當(dāng)PC及接收數(shù)據(jù)時,75175的三態(tài)控制端接高電平,三態(tài)門是常開的,75175雙端輸入(RXD+和RXD-)的信號變成單端輸出到達(dá)74LS05→光電隔離器→MC1488輸入給PC機(jī)RS-232口的RXD端,從而完成了RS-422標(biāo)準(zhǔn)的轉(zhuǎn)換。

      第三篇:單片機(jī)原理及接口技術(shù)課程設(shè)計指導(dǎo)書

      長 沙學(xué)院

      課程設(shè)計指導(dǎo)書(部)

      業(yè)

      級單片機(jī)原理及接口技術(shù)機(jī)電工程系機(jī)械設(shè)計制造及其自動化

      年月日 課程設(shè)計名稱系專班

      課程名稱:《單片機(jī)原理及接口技術(shù)》課程設(shè)計

      課程編號:JX010146

      主 筆 人:程立志

      主 審 人:許焰

      1、課程設(shè)計的目的通過《單片機(jī)原理及接口技術(shù)》課程設(shè)計,使學(xué)生初步具備以下能力:

      1.1、加深對《單片機(jī)原理及接口技術(shù)》所學(xué)知識的理解;

      1.2、掌握單片機(jī)內(nèi)部資源的使用方法和步驟;

      1.3、掌握單片機(jī)應(yīng)用的環(huán)節(jié)和步驟;

      1.4、進(jìn)一步熟悉在proteus軟件里進(jìn)行硬件設(shè)計和編程調(diào)試;

      1.5、能使用匯編語言或C語言編程環(huán)境Keil編寫程序、編譯、仿真和修改程序;

      1.6、能初步判斷分析單片機(jī)系統(tǒng)的簡單故障;

      1.7、能對自己的實(shí)踐工作進(jìn)行總結(jié),具備編寫實(shí)習(xí)報告書能力;

      1.8、初步具備辯證思維和邏輯分析的能力;

      1.9、培養(yǎng)學(xué)生熱愛科學(xué),實(shí)事求是的學(xué)風(fēng)和創(chuàng)新意識、精神,合作精神。

      2、課程設(shè)計的題目

      單片機(jī)的應(yīng)用領(lǐng)域非常廣泛,就其基本的控制原理和實(shí)現(xiàn)方法無外乎是對一些常見的如:距離或位移(米)、重量(千克)、時間(秒)、電流或電壓(安培)、溫度(開爾文)、等物理量進(jìn)行測量控制,鑒于單片機(jī)當(dāng)前的應(yīng)用狀態(tài)和學(xué)員對其應(yīng)掌握的程度,本次課程設(shè)計題目的設(shè)定主要是以貼近現(xiàn)實(shí)生活為主,提出了一些在教學(xué)、工業(yè)控制和科研等領(lǐng)域基本常見的課題,其目的是要讓學(xué)員們拓寬視野,著重體會其學(xué)習(xí)基本的原理及控制編程基礎(chǔ)的重要性,以期達(dá)到培養(yǎng)學(xué)員們的興趣和今后再學(xué)習(xí)的愿望。

      2.1、;LED流水燈控制設(shè)計:

      拓展:廣告燈的左移右移控制設(shè)計;汽車尾燈模擬控制設(shè)計;城市景觀燈的控制設(shè)計;…

      2.2、電子日歷、數(shù)字鐘設(shè)計:

      拓展:智能晨起系統(tǒng)控制設(shè)計;智能全自動洗衣機(jī)控制設(shè)計;秒表/時鐘計時器控制設(shè)計;…

      2.3、數(shù)字溫度計的控制設(shè)計:

      拓展:新生兒恒溫箱監(jiān)控系統(tǒng)設(shè)計;多點(diǎn)溫度的控制設(shè)計;傳導(dǎo)系數(shù)測量儀的應(yīng)用設(shè)計;…

      2.4、16×16 點(diǎn)陣LED漢字顯示設(shè)計:

      拓展:機(jī)場、車站、碼頭、商場、銀行、政務(wù)等公共服務(wù)場所信息指示牌設(shè)計;…

      2.5、1602液晶顯示屏顯示設(shè)計:

      拓展:機(jī)場、車站、碼頭、商場、銀行、政務(wù)等公共服務(wù)場所信息指示牌設(shè)計;…

      2.6、128×64點(diǎn)陣LED漢字顯示設(shè)計:

      拓展:機(jī)場、車站、碼頭、商場、銀行、政務(wù)等公共服務(wù)場所信息指示牌設(shè)計;…

      2.7、直流電機(jī)控制設(shè)計:

      拓展:傳送帶單控與順序控制設(shè)計;電子裝配生產(chǎn)線部件移動控制設(shè)計;多層電梯控制設(shè)計;…

      2.8、步進(jìn)電機(jī)控制設(shè)計:

      拓展:機(jī)械手動作行程控制設(shè)計;安防監(jiān)控自動尋跡云臺的控制設(shè)計;條碼打印機(jī)的控制設(shè)計;…

      2.9、AD/DA轉(zhuǎn)換控制設(shè)計:

      拓展:簡易數(shù)字電壓表設(shè)計;簡易數(shù)字壓力計設(shè)計;吊車懸臂角度的控制設(shè)計;超聲波測距器的設(shè)計…

      2.10、邏輯算法控制設(shè)計:

      拓展:搶答器控制設(shè)計;交通燈設(shè)計;多層電梯控制設(shè)計;4×4 矩陣鍵盤計算器設(shè)計…

      2.11、遙控設(shè)計:

      拓展:無線電遙控升降系統(tǒng)控制設(shè)計、紅外遙控升降系統(tǒng)控制設(shè)計、紅外遙控多路開關(guān)控制設(shè)計;…

      2.12、PWM方式控制設(shè)計:

      拓展:直流電機(jī)調(diào)速控制設(shè)計;城市立交橋景觀帶的控制設(shè)計;…

      2.14、電子琴設(shè)計;

      拓展:報警發(fā)生器控制設(shè)計;函數(shù)信號發(fā)生器的設(shè)計;

      3、課程設(shè)計內(nèi)容(主要技術(shù)關(guān)鍵的分析、解決思路和方案比較等)

      要求學(xué)生根據(jù)所選課題,結(jié)合實(shí)際工程應(yīng)用情況參照以下幾例給出的具體實(shí)現(xiàn)功能和控制參數(shù)完成課題的設(shè)計任務(wù)書。

      3.1、簡易數(shù)字電壓表的設(shè)計

      利用MCS-51系列單片機(jī)設(shè)計簡易數(shù)字電壓表測量0~5v的8路輸入電壓值,并在四位LED數(shù)碼管上輪流顯示或單路選擇顯示。測量最小分辨率為0.019V,測量誤差約為±0.02V

      3.2、秒表/時鐘計時器的設(shè)計

      秒表/時鐘計時器要求使用六位LED數(shù)碼顯示管顯示時、分、秒,以24(小時)計時方式。使用按鍵開關(guān)可實(shí)現(xiàn)時分調(diào)整、秒表/時鐘功能轉(zhuǎn)換功能。

      3.3、電子日歷的設(shè)計

      電子日歷上能顯示陽歷年,月,日,星期,時,分,秒和陰歷年、月,使用按鍵開關(guān)可實(shí)現(xiàn)調(diào)整。

      3.4、超聲波測距器的設(shè)計

      設(shè)計一個超聲波測距器,可以應(yīng)用于汽車倒車、建筑施工工地以及一些工業(yè)現(xiàn)場的位置監(jiān)控,也可用于如液位、井深、管道長度的測量等場合。要求測量范圍在0.10-4.00m,測量精度1cm,測量時與被測物體無直接接觸,能夠清晰穩(wěn)定地顯示測量結(jié)果。

      3.5、DS18B20數(shù)字溫度計的設(shè)計

      利用89C51單片機(jī)、DS18B20溫度傳感器,制作數(shù)字溫度計。要求測溫范圍為-50~110℃,精度誤差在0.1℃以內(nèi),LED數(shù)碼管直接顯示測量溫度值。

      3.6、1602液晶顯示屏設(shè)計

      設(shè)計一個室內(nèi)用1602液晶顯示屏,要求在目測條件下LED顯示屏個點(diǎn)亮度均勻、充足,可顯示圖形和文字,顯示圖形或文字應(yīng)穩(wěn)定、清晰無串?dāng)_。圖形或文字顯示有靜止、移入移出等顯示方式。

      3.7、六路數(shù)字搶答器的設(shè)計

      1)、搶答器同時供6名選手或6個代表隊(duì)比賽,分別用6個按鈕S0 ~ S5表示。

      2)、設(shè)置一個系統(tǒng)清除和搶答控制開關(guān)S,該開關(guān)由主持人控制。

      3)、搶答器具有鎖存與顯示功能。即選手按動按鈕,鎖存相應(yīng)的編號,并在LED數(shù)碼管上顯示,同時揚(yáng)聲器發(fā)出報警聲響提示。選手搶答實(shí)行優(yōu)先鎖存,優(yōu)先搶答選手的編號一直保持到主持人將系統(tǒng)清除為止。

      4)、搶答器具有定時搶答功能,且一次搶答的時間由主持人設(shè)定(如30秒)。當(dāng)主持人啟動“開始”鍵后,定時器進(jìn)行減計時,同時揚(yáng)聲器發(fā)出短暫的聲響,聲響持續(xù)的時間0.5秒左右。

      5)、參賽選手在設(shè)定的時間內(nèi)進(jìn)行搶答,搶答有效,定時器停止工作,顯示器上顯示選手的編號和搶答的時間,并保持到主持人將系統(tǒng)清除為止。

      6)、如果定時時間已到,無人搶答,本次搶答無效,系統(tǒng)報警并禁止搶答,定時顯示器上顯示00。

      3.8、機(jī)械手動作行程控制

      1)、設(shè)“單步”、“單程”、“往返”、“連續(xù)”4個按鈕及4個鍵值燈;

      2)、設(shè)“左上”、“左下”、“右上”、“右下”4個電磁位置開關(guān)及4個指示燈。

      3)、設(shè)“左上”為初始位置,根據(jù)不同的選擇按鈕,驅(qū)動相應(yīng)的(3臺)直流電機(jī)正反轉(zhuǎn),完成相應(yīng)的行程動作。

      3.9、三層樓電梯呼叫控制

      1)、第一層只設(shè)“上”、第二層設(shè)“上”、“下”、第三層只設(shè)“下”共四個按鈕;

      2)、每層都設(shè)一個電磁位置開關(guān),轎廂上下指示燈;共享一臺直流電機(jī)正反轉(zhuǎn)。

      3)、電梯轎廂內(nèi)設(shè)“1”、“2”、“3”三個樓層鍵及鍵位指示燈,轎廂上下指示燈,開關(guān)門指示燈,電梯根據(jù)當(dāng)前層位和樓層選擇按鈕的先后順序,決定向上或向下,電機(jī)以正反轉(zhuǎn)時延2秒完成層間動作。

      3.10、16×16 點(diǎn)陣LED漢字顯示設(shè)計。

      1)、點(diǎn)陣顯示漢字“長沙大學(xué)機(jī)電系”;

      2)、實(shí)現(xiàn)自定義滾動效果,如左滾屏,有滾屏,上、下卷簾等。

      單片機(jī)的應(yīng)用系統(tǒng)隨著用途不同,它們的硬件和軟件結(jié)構(gòu)差別很大,但系統(tǒng)設(shè)計的方法和步驟基本上是相同的。一般包括總體設(shè)計、硬件設(shè)計、軟件設(shè)計、仿真調(diào)試、固化程序、應(yīng)用系統(tǒng)獨(dú)立運(yùn)行等步驟。

      課程設(shè)計由于時間安排、學(xué)生水平、實(shí)驗(yàn)條件等諸方面的限制,僅要求學(xué)生完成仿真調(diào)試即可,同時根據(jù)實(shí)際情況,在試驗(yàn)箱上調(diào)試通過。

      由于設(shè)計時間緊迫,不要在完成全部設(shè)計后再編寫設(shè)計說明書。而應(yīng)在設(shè)計過程中逐步完成。一開始不可能設(shè)計出滿意的主程序框圖。因此,總體設(shè)計部分在完成全部設(shè)計任務(wù)后再寫。而硬件部分和軟件部分可以在設(shè)計過程同步完成。

      4、注意事項(xiàng)

      4.1、充分調(diào)研相關(guān)文獻(xiàn),針對課題需要進(jìn)行系統(tǒng)詳細(xì)的論證,不能盲目生搬硬套,嚴(yán)謹(jǐn)抄襲;

      4.2、以小組為單位(原則上是3人一組),小組內(nèi)成員分工明確,各司其職,按照所分配的任務(wù)在規(guī)定的時間內(nèi)合理的完成好。

      4.3、課程設(shè)計報告要包括:設(shè)計功能要求,設(shè)計控制參數(shù),硬件電路設(shè)計(元件選型,硬件電路布局),系統(tǒng)程序的設(shè)計(注意總結(jié)出現(xiàn)的問題、疑難以及解決的方法和思路,對以后的借鑒作用等),調(diào)試及性能分析,課程設(shè)計小結(jié)、控制源程序清單等;圖包括設(shè)計方案框圖、硬件原理圖(要求有描述)、程序流程圖等。

      第四篇:《單片機(jī)原理與接口技術(shù)》課程設(shè)計教學(xué)大綱

      《單片機(jī)原理與接口技術(shù)》課程設(shè)計教學(xué)大綱

      課程編號:

      課程英文名稱:Course Design of Micro-controller Principle and Interface Technology 學(xué)時數(shù):18

      學(xué)分?jǐn)?shù):1 使用層次和專業(yè):本科

      電氣工程及其自動化、電子信息工程、機(jī)械設(shè)計制造及其自動化等專業(yè)

      一、課程設(shè)計的性質(zhì)、目的

      《單片機(jī)原理及接口技術(shù)》課程設(shè)計是在基本學(xué)完該課程之后,綜合運(yùn)用所學(xué)單片機(jī)知識,完成一個單片機(jī)應(yīng)用系統(tǒng)設(shè)計,從而加深對單片機(jī)軟硬知識的理解,獲得初步的應(yīng)用經(jīng)驗(yàn),為走出校門從事單片機(jī)應(yīng)用的相關(guān)工作打下基礎(chǔ)。

      通過該課程設(shè)計,主要達(dá)到以下目的:

      1、鞏固和加深對單片機(jī)原理和接口技術(shù)知識的理解,使學(xué)生增進(jìn)對單片機(jī)系統(tǒng)的感性認(rèn)識,加深對單片機(jī)理論方面的理解,為順利完成畢業(yè)設(shè)計打下基礎(chǔ)。

      2、使學(xué)生掌握對單片機(jī)的內(nèi)部功能模塊的應(yīng)用,如定時器/計數(shù)器、中斷、片內(nèi)外存貯器、I/O口和串行口通訊等,進(jìn)一步深化和鞏固所學(xué)基礎(chǔ)理論、專業(yè)知識及實(shí)驗(yàn)技能,培養(yǎng)學(xué)生綜合運(yùn)用所學(xué)專業(yè)知識分析問題和解決問題的能力。

      3、培養(yǎng)學(xué)生根據(jù)課題需要選學(xué)參考書籍、查閱手冊和文獻(xiàn)資料的能力,了解與課題有關(guān)的硬件元器件的工程規(guī)范,能按課程設(shè)計任務(wù)書的要求編寫課程設(shè)計說明書,學(xué)會方案論證的比較方法,初步掌握工程設(shè)計的基本方法,能正確反映設(shè)計和實(shí)驗(yàn)成果,能用計算機(jī)繪制電路圖和流程圖。使學(xué)生了解和掌握單片機(jī)應(yīng)用系統(tǒng)的軟、硬件設(shè)計過程、方法及實(shí)現(xiàn),提高學(xué)生的技術(shù)應(yīng)用能力,為以后設(shè)計和實(shí)現(xiàn)單片機(jī)應(yīng)用系統(tǒng)打下良好基礎(chǔ)。

      4、這一環(huán)節(jié)對掌握常用儀器、儀表的正確使用方法,學(xué)會軟、硬件的設(shè)計和調(diào)試方法,掌握單片機(jī)技術(shù)在生產(chǎn)實(shí)踐中的應(yīng)用,提高學(xué)生的工程實(shí)踐能力、動手能力、創(chuàng)新能力,使學(xué)生樹立正確的人生觀,養(yǎng)成嚴(yán)謹(jǐn)、踏實(shí)的工作作風(fēng)。

      二、課程設(shè)計的內(nèi)容

      課程設(shè)計主要內(nèi)容包括:理論設(shè)計、調(diào)試及寫出總結(jié)報告等,其中理論設(shè)計又包括選擇總體方案、硬件系統(tǒng)設(shè)計和軟件系統(tǒng)設(shè)計。硬件設(shè)計包括單元電路、選擇元器件及計算參數(shù)等;軟件設(shè)計包括模塊化層次結(jié)構(gòu)圖、程序流程圖等。程序設(shè)計是課程設(shè)計的關(guān)鍵環(huán)節(jié),通過調(diào)試,進(jìn)一步完善程序設(shè)計,使之達(dá)到課題所要求的指標(biāo),使理論設(shè)計更接近于 1

      實(shí)際產(chǎn)品。課程設(shè)計的最后要寫出設(shè)計總結(jié)報告,把理論設(shè)計內(nèi)容,調(diào)試的過程及性能指標(biāo)的測試結(jié)果進(jìn)行全面的總結(jié),把實(shí)踐內(nèi)容上升到理論高度。

      以下8個設(shè)計題目每組學(xué)生可任選一項(xiàng): 題目一 智能交通燈控制系統(tǒng)設(shè)計

      1、設(shè)計要求

      (1)用發(fā)光二極管模擬交通信號燈,用按鍵開關(guān)模擬車輛檢測信號。

      (2)A、B兩車道交叉組成十字路口,A是主車道,B是支道。正常情況下,A、B兩車道輪流放行,A放行50s,B放行30s,各含5s警告時間。

      (3)交通繁忙時,該系統(tǒng)應(yīng)有手受控開關(guān)緩解交通擁擠狀況,其中一車道放行期間,另一車道繁忙,可通過開關(guān)獲得15s放行時間。

      (4)有緊急車輛通過時,另需一開關(guān)設(shè)置兩車道均禁止通行20s。

      2、主要功能模塊

      智能交通燈控制系統(tǒng)主要功能模塊包括電源電路、單片機(jī)主控電路、按鍵控制電路和道路顯示電路組成。根據(jù)具體情況選擇合適型號的單片機(jī),發(fā)光二極管,開關(guān)等硬件設(shè)備進(jìn)行設(shè)計。

      題目二 溫度控制系統(tǒng)設(shè)計

      1、設(shè)計要求

      (1)用單片機(jī)控制一個由1kw電爐加熱的電烤箱,最高溫度不超過120℃。(2)電烤過程恒溫控制,溫度可通過系統(tǒng)設(shè)置,誤差不超過±2℃。(3)實(shí)時顯示溫度和設(shè)置溫度,顯示精確為1℃。

      (4)溫度超出設(shè)置溫度±5℃時發(fā)超限報警,對升溫和降溫過程不作要求。

      2、主要功能模塊

      溫度控制系統(tǒng)的主要功能模塊包括溫度測量(溫度傳感器、放大器、ADC轉(zhuǎn)換器)、溫度控制(光電隔離、驅(qū)動電路、可控硅電路、電爐)、溫度給定(按鍵)、溫度顯示和報警等幾部分。根據(jù)具體情況選擇合適型號的單片機(jī),溫度傳感器、ADC轉(zhuǎn)換器等硬件設(shè)備進(jìn)行設(shè)計。

      題目三 點(diǎn)陣LED電子顯示屏的設(shè)計(第8章)

      1、設(shè)計要求

      (1)設(shè)計4個16×16的LED電子顯示屏,能穩(wěn)定、清晰地顯示圖形或文字。(2)圖形或文字顯示通過編程能實(shí)現(xiàn)靜止、左移和右移等多種顯示方式。

      (3)采用動態(tài)掃描方式,保證在目測條件LED顯示屏可亮度均勻地顯示圖形和文字,并且穩(wěn)定、清晰、無串?dāng)_。

      2、主要功能模塊

      LED電子顯示屏系統(tǒng)的主要功能模塊包括單片機(jī)主控模塊、16×16的點(diǎn)陣顯示、行驅(qū)動電路、列驅(qū)動電路、譯碼電路幾部分。根據(jù)具體情況選擇合適型號的單片機(jī)等硬件設(shè)備進(jìn)行設(shè)計。題目四 密碼鎖設(shè)計

      1、設(shè)計要求

      (1)要求密碼鎖可以設(shè)置8位密碼,每位密碼值范圍為1~8,用戶可以自行設(shè)定和修改密碼。

      (2)若輸入的8位開鎖密碼不正確,則報警5s,連續(xù)錯3次要報警1分鐘,報警期間輸入密碼無效;輸入的8位開鎖密碼完全正確才能開鎖,開鎖時有1s提示音

      (3)鎖內(nèi)有備用電池,內(nèi)部上電復(fù)位時才能設(shè)置或修改密碼;電磁鎖的電磁線圈每次通電5s,然后恢復(fù)初態(tài);密碼鍵盤上只允許有8個密碼按鍵,密碼設(shè)定完畢后要有2s的提示音。

      2、主要功能模塊

      密碼鎖系統(tǒng)主要功能模塊包括主控模塊、按鍵掃描模塊、蜂鳴器、電源電路、復(fù)位電路、晶振電路、驅(qū)動電路幾部分。根據(jù)具體情況選擇合適型號的單片機(jī),三極管等硬件設(shè)備進(jìn)行設(shè)計。

      題目五 LED點(diǎn)陣顯示電子鐘設(shè)計

      1、設(shè)計要求

      (1)時鐘的顯示由LED點(diǎn)陣構(gòu)成。

      (2)能正確顯示時間,上電顯示為12點(diǎn),時間能夠由按鍵調(diào)整。(3)誤差小于1s。

      2、主要功能模塊

      LED點(diǎn)陣顯示電子鐘系統(tǒng)主要功能模塊包括主控模塊、LED點(diǎn)陣掃描模塊、電子鐘模塊組成。其中電子鐘由顯示電路、行驅(qū)動電路、列驅(qū)動電路、按鍵電路和復(fù)位電路、晶振電路、驅(qū)動電路幾部分組成。根據(jù)具體情況選擇合適型號的單片機(jī),鎖存驅(qū)動器、譯碼器等硬件設(shè)備進(jìn)行設(shè)計。題目六 智能搶答器設(shè)計

      1、設(shè)計要求

      (1)設(shè)計一個智力競賽搶答器,可同時供8名選手或8個代表隊(duì)參加比賽,分別使用一個按鈕,編號從0~7。

      (2)設(shè)置一個控制開關(guān),用來控制系統(tǒng)的清零和搶答開始。

      (3)搶答器具有數(shù)據(jù)鎖存功能、顯示功能和聲音提示功能。搶答開始后,有選手按動搶答按鈕,鎖存對應(yīng)編號,并在LED數(shù)碼管上顯示選手的編號,同時燈亮且伴隨聲音提示。同時鎖存電路,禁止其他選手搶答,顯示編號一直保持到系統(tǒng)清零。

      2、主要功能模塊

      智能搶答器系統(tǒng)主要功能模塊包括主控模塊、復(fù)位電路、電源電路、選手按鍵、控制開關(guān)按鈕,聲音提示和數(shù)碼顯示等部分組成。根據(jù)具體情況選擇合適型號的單片機(jī),蜂鳴器、數(shù)碼管等硬件設(shè)備進(jìn)行設(shè)計。題目七 比賽記分牌設(shè)計

      1、設(shè)計要求

      (1)啟動時顯示為0分,計分范圍為0~100分。(2)得分時加上相應(yīng)的分?jǐn)?shù),失分時剪去相應(yīng)的分?jǐn)?shù)。(3)刷新分?jǐn)?shù)的按鍵按下時,伴隨提示音。

      2、主要功能模塊

      比賽記分牌系統(tǒng)主要功能模塊包括單片機(jī)主控模塊、顯示模塊、按鍵模塊、電源模塊等部分組成。根據(jù)具體情況選擇合適型號的單片機(jī),蜂鳴器、數(shù)碼管等硬件設(shè)備進(jìn)行設(shè)計。題目八 學(xué)習(xí)型紅外線遙控器設(shè)計

      1、設(shè)計要求

      (1)適用于編碼式紅外線遙控型家用電器。(2)可遙控多臺家用電器。(3)具有一個學(xué)習(xí)/控制復(fù)用鍵。

      (4)可通過一個設(shè)備選擇鍵和各個功能控制鍵實(shí)現(xiàn)對多臺設(shè)備的常用功能的學(xué)習(xí)和控制。(5)成本低,抗干擾能力強(qiáng)。

      2、主要功能模塊

      學(xué)習(xí)型紅外線遙控器控制系統(tǒng)主要功能模塊包括單片機(jī)主控模塊、紅外接收及發(fā)射電路、復(fù)位電路、按鍵及狀態(tài)指示電路等部分組成。根據(jù)具體情況選擇合適型號的單片機(jī)、一體化紅外遙控接收器等硬件設(shè)備進(jìn)行設(shè)計。

      三、課程設(shè)計的要求

      1、課程設(shè)計的組織形式:將班級分成若干組,每組3~5人,自行分工完成一個題目。

      2、課程設(shè)計流程:

      (1)審題、查閱相關(guān)資料,確定系統(tǒng)總體方案;

      (2)完成硬件設(shè)計,畫出硬件設(shè)計原理圖(包括設(shè)備模塊選擇、搭接線路、計算參數(shù)等)

      (3)根據(jù)所完成的任務(wù)、硬件原理圖繪制系統(tǒng)軟件框圖,編制程序;

      (4)系統(tǒng)調(diào)試,認(rèn)真客觀地記錄和觀察實(shí)驗(yàn)結(jié)果,對實(shí)驗(yàn)結(jié)果進(jìn)行深入的分析,寫出實(shí)驗(yàn)心得;

      (5)撰寫課程設(shè)計報告及答辯。

      3、課程設(shè)計報告的編寫要求:(1)設(shè)計任務(wù)書一份;

      (2)硬件設(shè)計原理圖一份(A4圖紙);(3)設(shè)計模塊說明;(4)軟件調(diào)試說明;

      (5)實(shí)驗(yàn)結(jié)果分析(包括硬件設(shè)計和軟件調(diào)試分析)。

      四、成績考核方式

      1、硬件設(shè)計成績(20%);

      2、軟件設(shè)計成績(20%);

      3、實(shí)驗(yàn)調(diào)試(40%);

      4、實(shí)驗(yàn)報告和平時成績(20%)。

      五、教材和參考文獻(xiàn)

      1、推薦教材

      [1]楊居義.單片機(jī)課程設(shè)計指導(dǎo).清華大學(xué)出版社.2009年9月.[2]李海濱.單片機(jī)技術(shù)課程設(shè)計與項(xiàng)目實(shí)例.中國電力出版社.2009年10月.2、教學(xué)參考書

      [1]付家才.單片機(jī)實(shí)驗(yàn)與實(shí)踐.高等教育出版社.2006年3月.[2]李廣第.單片機(jī)基礎(chǔ).北京航空航天大學(xué)出版社.2005年9.[3]朱珍.單片機(jī)原理.石油工業(yè)出版社.2001年6.[4]胡錦.單片機(jī)技術(shù)實(shí)用教程.高等教育出版社

      2004.6.[5]薛鈞義.微機(jī)控制系統(tǒng)及應(yīng)用.西安交通大學(xué)出版社.2003年2.[6]彭介華.電子技術(shù)課程設(shè)計指導(dǎo).高等教育出版社.1999年10月.大綱制定人:李娜、吳澤、趙忠彪

      大綱審定人:白政民

      修訂日期:2012.3

      第五篇:單片機(jī)原理與接口技術(shù)教案

      《單片機(jī)原理與接口技術(shù)》教案

      班級:05電子(1)(2)

      日期:2007.3.8

      課題:單片機(jī)硬件系統(tǒng) 教學(xué)目的:使學(xué)生理解單片機(jī)的結(jié)構(gòu)、硬件原理和工作特性等基礎(chǔ)知識 重點(diǎn)難點(diǎn):單片機(jī)硬件組成和數(shù)據(jù)存儲區(qū)分配

      第一章 單片機(jī)硬件系統(tǒng)一、概述

      (一)單片機(jī)及單片機(jī)應(yīng)用系統(tǒng)

      單片機(jī)應(yīng)用系統(tǒng)是以單片機(jī)為核心,配以輸入、輸出、顯示、控制等外圍電路和軟件,能實(shí)現(xiàn)一種或多種功能的實(shí)用系統(tǒng)。

      (二)MCS-51單片機(jī)系列

      二、MCS-51單片機(jī)結(jié)構(gòu)和原理

      (一)單片機(jī)的內(nèi)部組成及信號引腳

      組成:CPU、內(nèi)部RAM、內(nèi)部ROM、定時/計數(shù)器、并行I/O口、串行口、中斷系統(tǒng)、時鐘電路等。

      (二)內(nèi)部數(shù)據(jù)存儲器 1.寄存器區(qū) 2.位尋址區(qū) 3.用戶RAM區(qū)

      4.特殊功能寄存器區(qū)

      (三)內(nèi)部程序存儲器

      三、并行輸入/輸出口電路結(jié)構(gòu)

      組成結(jié)構(gòu):P0口、P1口、P2口、P3口

      四、時鐘電路與復(fù)位電路

      常用晶體振蕩器時鐘電路(最大12MHz)、復(fù)位電路(RST引腳高電平產(chǎn)生復(fù)位)。

      小結(jié):單片機(jī)硬件電路和工作原理是學(xué)好本課的基礎(chǔ)。

      班級:05電子(1)(2)

      日期:2007.3.22

      課題:單片機(jī)開發(fā)系統(tǒng) 教學(xué)目的:使學(xué)生理解單片機(jī)硬件和軟件調(diào)試的方法 重點(diǎn)難點(diǎn):單片機(jī)開發(fā)軟件的應(yīng)用

      第二章 單片機(jī)開發(fā)系統(tǒng)一、開發(fā)系統(tǒng)的功能

      在線仿真、輔助調(diào)試、輔助設(shè)計、程序固化。

      二、單片機(jī)應(yīng)用系統(tǒng)的調(diào)試

      調(diào)試方法:單步、跟蹤、全速運(yùn)行、設(shè)置斷點(diǎn)

      小結(jié):調(diào)試方法和調(diào)試軟件是單片機(jī)系統(tǒng)設(shè)計的必要工具。班級:05電子(1)(2)

      日期:2007.3.28

      課題:單片機(jī)指令系統(tǒng) 教學(xué)目的:使學(xué)生掌握單片機(jī)指令的含義和使用方法 重點(diǎn)難點(diǎn):邏輯和位操作指令

      第三章 MCS-51單片機(jī)指令系統(tǒng)一、尋址方式

      包括:寄存器尋址、直接尋址、立即數(shù)尋址、寄存器間接尋址、變址尋址、相對尋址和位尋址。

      二、指令系統(tǒng)

      共111條指令。

      數(shù)據(jù)傳送指令(29條)

      算術(shù)運(yùn)算指令(24條)

      邏輯運(yùn)算指令(24條)

      控制轉(zhuǎn)移指令(17條)位操作指令(17條)

      三、常用偽指令

      包括:定位偽指令、定義字節(jié)偽指令、定義空間偽指令、定義符號偽指令、數(shù)據(jù)賦值偽指令、數(shù)據(jù)地址賦值偽指令、匯編結(jié)束偽指令。

      小結(jié):本章是整個課程的重點(diǎn),應(yīng)將使用方法以舉例的方式詳細(xì)講解。

      作業(yè):3.3~3.16

      班級:05電子(1)(2)

      日期:2007.4.11

      課題:單片機(jī)編程方法 教學(xué)目的:使學(xué)生掌握單片機(jī)匯編語言的編程方法 重點(diǎn)難點(diǎn):分支程序、循環(huán)程序和子程序設(shè)計

      第四章 MCS-51單片機(jī)匯編語言程序設(shè)計

      一、簡單程序設(shè)計

      順序控制程序。編程前,要分配內(nèi)存工作區(qū)及有關(guān)端口地址。

      二、分支程序設(shè)計

      分支程序就是按照分支條件,判斷程序流向,并執(zhí)行。1.兩分支程序設(shè)計(單入口、兩出口)2.三分支程序設(shè)計

      3.多分支程序設(shè)計(散轉(zhuǎn)程序)

      三、循環(huán)程序設(shè)計

      1.單重循環(huán)程序設(shè)計

      2.雙重循環(huán)程序設(shè)計(延時程序設(shè)計)3.數(shù)據(jù)傳送程序

      4.循環(huán)程序結(jié)構(gòu)(初始化、循環(huán)體、循環(huán)控制)

      四、查表程序(主要用于數(shù)碼管顯示子程序)

      表格是預(yù)先定義在程序的數(shù)據(jù)區(qū)中,然后和程序一起固化在ROM中的一串常數(shù)。

      五、子程序設(shè)計與堆棧技術(shù)

      1.子程序調(diào)用和返回過程 2.子程序嵌套

      3.參數(shù)傳遞與現(xiàn)場保護(hù)和恢復(fù)

      4.子程序結(jié)構(gòu)(子程序名、子程序功能、入口參數(shù)、出口參數(shù)、占用資源)5.堆棧操作與堆棧功能

      6.堆棧操作與RAM操作的比較

      六、實(shí)用子程序舉例

      1.代碼轉(zhuǎn)換(二進(jìn)制數(shù)轉(zhuǎn)換為BCD碼)2.算術(shù)運(yùn)算(雙字節(jié)無符號數(shù)乘法)3.查找、排序程序(冒泡排序法)

      小結(jié):匯編語言程序設(shè)計基本結(jié)構(gòu)包括順序結(jié)構(gòu)、分支結(jié)構(gòu)、循環(huán)結(jié)構(gòu)和子程序結(jié)構(gòu)等。

      作業(yè):4.1~4.16

      班級:05電子(1)(2)

      日期:2007.4.12

      課題:定時與中斷系統(tǒng) 教學(xué)目的:使學(xué)生掌握單片機(jī)定時/計數(shù)器與外部中斷的工作原理和編程方法 重點(diǎn)難點(diǎn):定時工作方式與中斷系統(tǒng)原理

      第五章 定時與中斷系統(tǒng)一、定時/計數(shù)器

      1.定時/計數(shù)器的結(jié)構(gòu) 2.定時/計數(shù)器工作原理

      3.定時/計數(shù)器的方式寄存器和控制寄存器

      二、定時/計數(shù)器的工作方式

      共4種定時工作方式:方式0、方式

      1、方式

      2、方式3。

      三、定時/計數(shù)器的編程和應(yīng)用

      定時初值的計算方法、方式設(shè)置、控制方式設(shè)置

      四、中斷系統(tǒng)

      1.中斷的概念和特點(diǎn) 2.中斷系統(tǒng)的結(jié)構(gòu)框圖 3.中斷源和中斷標(biāo)志 4.中斷處理過程

      五、中斷系統(tǒng)的應(yīng)用

      1.中斷系統(tǒng)的功能(中斷響應(yīng)、中斷處理、中斷返回)2.中斷請求的撤除、中斷響應(yīng)時間 3.外部中斷源的擴(kuò)展

      4.定時中斷控制信號燈閃爍功能的應(yīng)用實(shí)例

      小結(jié):定時中斷在單片機(jī)程序控制中,是很有用的,但中斷的概念對初學(xué)者比較難理解,需細(xì)講。

      作業(yè):5.4、5.5

      班級:05電子(1)(2)

      日期:2007.4.25

      課題:單片機(jī)系統(tǒng)擴(kuò)展 教學(xué)目的:使學(xué)生掌握單片機(jī)系統(tǒng)擴(kuò)展的原理和相關(guān)集成電路的使用方法 重點(diǎn)難點(diǎn):擴(kuò)展電路接口與地址的控制方法

      第六章 單片機(jī)系統(tǒng)擴(kuò)展

      一、程序存儲器擴(kuò)展

      1.單片機(jī)程序存儲器概述 2.EPROM程序存儲器擴(kuò)展實(shí)例(2732)

      3.常用程序存儲器類型(2716、27128、2864A)

      二、數(shù)據(jù)存儲器擴(kuò)展

      1.單片機(jī)RAM概述

      2.SRAM擴(kuò)展(以一片2KB靜態(tài)6116為例)

      三、并行I/O口擴(kuò)展

      1.MCS-51內(nèi)部并行I/O口及其作用

      單片機(jī)內(nèi)部,P0口分時作為低8位地址線和數(shù)據(jù)線,P2口作為高8位地址線。2.簡單的I/O口擴(kuò)展

      以74LS244和74LS273分別作為擴(kuò)展輸入和輸出端口,其地址的計算方法。3.采用8255擴(kuò)展I/O口

      8255的結(jié)構(gòu)、8255的控制字、8255與單片機(jī)的接口 4.采用8155擴(kuò)展I/O口

      8155的結(jié)構(gòu)、I/O口的工作方式、作外部RAM的使用方法、與單片機(jī)的接口

      小結(jié):本章的重點(diǎn)是學(xué)習(xí)對不同擴(kuò)展電路,其地址的計算方法。但要首先了解相關(guān)控制的工作原理和控制方法,據(jù)此計算地址就容易很多。

      班級:05電子(1)(2)

      日期:2007.5.14

      課題:單片機(jī)接口技術(shù) 教學(xué)目的:使學(xué)生掌握單片機(jī)系統(tǒng)常用外圍電路的接口技術(shù)和使用方法 重點(diǎn)難點(diǎn):數(shù)碼管顯示、D/A、A/D轉(zhuǎn)換接口與編程

      第七章 單片機(jī)接口技術(shù)

      一、單片機(jī)與鍵盤接口

      1.鍵盤的工作原理(鍵輸入原理、按鍵消抖的方法、按鍵編碼方法)2.獨(dú)立式按鍵(硬件結(jié)構(gòu)和軟件編程)

      3.矩陣式按鍵(矩陣式鍵盤的結(jié)構(gòu)、按鍵識別方法、鍵盤編碼、鍵盤掃描的工作方式)

      二、單片機(jī)與數(shù)碼管顯示器的接口

      1.8段碼數(shù)碼管工作原理

      2.數(shù)碼管字形編碼方法(共陰極與共陽極兩種情況)3.靜態(tài)顯示接口(原理和編程方法)4.動態(tài)顯示接口(原理和編程方法)

      三、D/A轉(zhuǎn)換器接口

      1.D/A轉(zhuǎn)換器的技術(shù)性能指標(biāo)(分辨率、建立時間、接口形式)2.典型D/A轉(zhuǎn)換器芯片DAC0832 3.單緩沖方式的接口與應(yīng)用 4.雙緩沖方式的接口與應(yīng)用

      四、A/D轉(zhuǎn)換器接口

      1.A/D轉(zhuǎn)換的工作原理

      2.典型A/D轉(zhuǎn)換器芯片ADC0809 3.單片機(jī)與ADC0809接口 4.編程方法

      小結(jié):按鍵、LED數(shù)碼管顯示、A/D、D/A是單片機(jī)系統(tǒng)的常用外設(shè)電路,本章的學(xué)習(xí)對于提高單片機(jī)系統(tǒng)的設(shè)計水平很有幫助。

      大作業(yè):7.6

      班級:05電子(1)(2)

      日期:2007.6.20

      課題:串行口通信技術(shù) 教學(xué)目的:使學(xué)生掌握單片機(jī)串行通信技術(shù)的原理和編程方法 重點(diǎn)難點(diǎn):串行接口、程序設(shè)計

      第八章 串行口通信技術(shù)

      一、串行通信基礎(chǔ)

      1.串行通信的分類

      (1)異步通信(字符幀、波特率)(2)同步通信

      2.串行通信的制式(單工、半雙工、全雙工)3.串行通信的接口電路

      二、串行通信總線標(biāo)準(zhǔn)及其接口

      1.RS-232C接口

      2.RS-449、RS-422A、RS-423A標(biāo)準(zhǔn)接口 3.20mA電流環(huán)路串行接口

      三、MCS-51的串行接口

      51系列單片機(jī)內(nèi)部有一個可編程全雙工串行通信接口,它具有UART的全部功能,該串行口有4種工作方式,幀格式有8位、10位和11位,并能設(shè)置各種波特率。

      1.MCS-51串行口結(jié)構(gòu)(SBUF、SCON、PCON控制字的定義)2.串行工作方式(方式0、1、2、3)3.串行口的波特率

      四、MCS-51單片機(jī)之間的通信

      1.雙機(jī)通信硬件電路(RXD、TXD、公共地線)2.雙機(jī)通信軟件編程(查詢方式、中斷方式)3.多機(jī)通信

      五、PC機(jī)和單片機(jī)之間的通信(接口設(shè)計、軟件編程)

      小結(jié):串行通信在現(xiàn)代社會應(yīng)用廣泛,單片機(jī)串行通信是通信技術(shù)的基礎(chǔ)。

      作業(yè):8.4

      班級:05電子(1)(2)

      日期:2007.7.4

      課題:單片機(jī)應(yīng)用系統(tǒng)的設(shè)計與開發(fā) 教學(xué)目的:使學(xué)生從總體上了解單片機(jī)應(yīng)用系統(tǒng)的設(shè)計方法 重點(diǎn)難點(diǎn):溫度控制系統(tǒng)的設(shè)計

      第九章 單片機(jī)應(yīng)用系統(tǒng)的設(shè)計與開發(fā)

      一、單片機(jī)溫度控制系統(tǒng)的設(shè)計

      二、單片機(jī)應(yīng)用系統(tǒng)開發(fā)的一般方法

      1.確定任務(wù)指標(biāo)和目標(biāo)

      2.總體設(shè)計(選型、軟硬件分工)

      3.硬件設(shè)計(程序存儲器、數(shù)據(jù)存儲器和I/O口、地址譯碼電路、總線驅(qū)動能力、系統(tǒng)速度匹配、抗干擾措施)

      4.軟件設(shè)計(監(jiān)控程序、功能程序)

      5.系統(tǒng)調(diào)試(軟件調(diào)試、硬件調(diào)試、聯(lián)機(jī)調(diào)試)

      三、單片機(jī)應(yīng)用系統(tǒng)實(shí)用技術(shù)

      1.低功耗設(shè)計

      2.加密技術(shù)(硬件加密、軟件加密)

      四、抗干擾設(shè)計

      1.電源、地線、傳輸干擾及其對策

      2.硬件抗干擾措施(隔離技術(shù)、系統(tǒng)監(jiān)控技術(shù))

      3.軟件抗干擾措施(數(shù)字濾波提高數(shù)據(jù)采集的可靠性、控制狀態(tài)失常的軟件抗干擾措施、程序運(yùn)行失常的軟件抗干擾措施)

      小結(jié):單片機(jī)應(yīng)用系統(tǒng)的設(shè)計方法,應(yīng)采取軟件和硬件相結(jié)合的方法,硬件設(shè)計、軟件設(shè)計與調(diào)試是對系統(tǒng)進(jìn)行完善的關(guān)鍵。

      下載第4章 單片機(jī)原理及接口技術(shù)講稿(第三版)-李朝青(范文大全)word格式文檔
      下載第4章 單片機(jī)原理及接口技術(shù)講稿(第三版)-李朝青(范文大全).doc
      將本文檔下載到自己電腦,方便修改和收藏,請勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報,并提供相關(guān)證據(jù),工作人員會在5個工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        《單片機(jī)原理及接口技術(shù)》課程設(shè)計報告——多通道秒表定時器(DOC)

        《單片機(jī)原理及接口技術(shù)》 課程設(shè)計報告 課程設(shè)計名稱:多通道秒表定時計數(shù)器設(shè)計院 系:自動控制與機(jī)械工程學(xué)院專業(yè):電氣工程及其自動化 班級:2012級電氣二班 姓名:黃瑞 學(xué)號:2012......

        微機(jī)原理及接口技術(shù)試卷及答案

        一、(共30分) 1.(10分) (1)將十進(jìn)制數(shù)+107/128化成二進(jìn)制數(shù)、八進(jìn)制數(shù)和十六進(jìn)制數(shù)(3分) (2)請回答什么是二--十進(jìn)制編碼?什么是有權(quán)碼、什么是無權(quán)碼、各舉一個你熟悉的有權(quán)碼......

        單片機(jī)原理與接口技術(shù)-LED顯示屏單字滾動報告[推薦]

        單片機(jī)課程設(shè)計 LED 點(diǎn) 陣 單 字 滾 動 系別: 班級: 設(shè)計人: 指導(dǎo)老師: 2013年1月6日星期日 一.設(shè)計任務(wù) 本設(shè)計要使用新的開發(fā)箱,使用16*16點(diǎn)陣LED顯示滾動的文字信息,類似于大家......

        河南工程學(xué)院2018年春《單片機(jī)及接口技術(shù)》期末試卷

        1. ( 多選題 ) (多選題)單片機(jī)的應(yīng)用范圍包括下列哪些項(xiàng)(本題5.0分)(本題5.0分) A、 智能儀表 B、 工業(yè)控制 C、 網(wǎng)絡(luò)通信 D、 汽車領(lǐng)域 學(xué)生答案:A,B,D 標(biāo)準(zhǔn)答案:ABC......

        (語言、微機(jī)原理及接口技術(shù))實(shí)驗(yàn)交通燈

        課程設(shè)計說明書課程設(shè)計名稱:微機(jī)原理與接口技術(shù)課程設(shè)計課程設(shè)計題目:微機(jī)打印口外接交通燈模擬LED顯示器學(xué)院名稱:信息工程學(xué)院專業(yè):計算機(jī)科學(xué)與技術(shù)班級:學(xué)號:姓名:評分:教師:201......

        微機(jī)原理與接口技術(shù)試題及答案

        一、 填空題(每空 1 分,共 15 分) 得分 評閱人 1.RESET信號到來后8088/86的CS和IP 分別為 _FFFF_H 和_0000_H。 2. 在特殊全嵌套方式下,8259可響應(yīng) 同級或高級 中斷請求。 3......

        2012年微機(jī)原理與接口技術(shù)試題及答案

        一. 選擇(每題1分) 下列各題四個選擇項(xiàng)中,只有一個選項(xiàng)是正確的。請將正確選項(xiàng)號寫在相應(yīng)空位置上。 1.系統(tǒng)總線又稱為_______,這是指模塊式微處理機(jī)機(jī)箱內(nèi)的底版總線。 1)主板......

        微機(jī)原理與接口技術(shù)考試試題及答案A

        《微機(jī)原理與接口技術(shù)》課程期末考試試卷(A卷,考試) 一、單項(xiàng)選擇(在備選答案中選出一個正確答案,并將其號碼填在題干后的括號內(nèi)。每題2分,共30分) 1 .某微機(jī)最大可尋址的內(nèi)存空間......