第5章 擴展技術(shù)2_第1頁
第5章 擴展技術(shù)2_第2頁
第5章 擴展技術(shù)2_第3頁
第5章 擴展技術(shù)2_第4頁
第5章 擴展技術(shù)2_第5頁
已閱讀5頁,還剩35頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

5.5鍵盤接口

鍵盤在單片機應(yīng)用系統(tǒng)中是一個很關(guān)鍵的部件,它能實現(xiàn)向計算機輸入數(shù)據(jù)、傳送命令等功能,是單片機系統(tǒng)中最常用的人機聯(lián)系的一種輸入設(shè)備。鍵盤按其結(jié)構(gòu)形式可分為編碼式鍵盤和非編碼式鍵盤。(1)編碼式鍵盤除了按鍵之外,還包括了產(chǎn)生鍵碼的硬件電路、去抖電路和多鍵保護電路。每按下一個鍵,能自動產(chǎn)生這個鍵的鍵碼,與此同時,產(chǎn)生一個脈沖信號,通知CPU接收。這種鍵盤使用方便,接口程序簡單,但是需要較多的硬件電路,價格較貴,一般的單片機應(yīng)用系統(tǒng)較少采用。(2)非編碼式鍵盤主要是由軟件產(chǎn)生被按鍵的編碼。它結(jié)構(gòu)簡單、價格便宜,但使用起來不如編碼式鍵盤簡單,鍵盤管理程序的編制也比較復雜。

單片機系統(tǒng)中普遍采用非編碼式鍵盤。這類鍵盤應(yīng)主要解決一下幾個問題:a、鍵的識別b、如何消除鍵的抖動c、鍵的保護一、按鍵開關(guān)去抖動問題

通常,按鍵所用開關(guān)為機械彈性開關(guān),由于機械觸點的彈性作用,一個按鍵開關(guān)在閉合時不會馬上穩(wěn)定的接通,在斷開時也不會一下子斷開。因而在閉和及斷開的瞬間均伴隨有一連串的抖動,抖動時間的長短由按鍵的機械特性決定,一般為5-10ms,抖動現(xiàn)象會引起CPU對一次鍵操作進行多次處理,從而可能產(chǎn)生錯誤。⑴硬件去抖動消除抖動不良后果的方法:其中RC濾波電路去抖動電路簡單實用,效果較好。⑵軟件去抖動檢測到按鍵按下后,執(zhí)行延時10ms子程序后再確認該鍵是否確實按下,消除抖動影響。有鍵按下嗎?延時10MS有鍵按下?NNY判斷鍵值軟件延時去抖動的方法Y二、按鍵連接方式1、獨立式按鍵

獨立式按鍵就是各按鍵相互獨立,每個按鍵各接一根輸入線,一根輸入線上的按鍵工作狀態(tài)不會影響其他輸入線上的工作狀態(tài),因此,通過檢測輸入線的電平狀態(tài)可以很容易判斷哪個按鍵被按下了。特點:

①各按鍵相互獨立,電路配置靈活;

②按鍵數(shù)量較多時,I/O端線耗費較多。

③軟件結(jié)構(gòu)簡單。

適用于按鍵數(shù)量較少的場合。

試編制按鍵掃描子程序。KEYA:ORLP1,#00000111B;置P1.0~P1.2為輸入態(tài)

MOVA,P1;讀鍵值,鍵閉合相應(yīng)位為0CPLA;取反,鍵閉合相應(yīng)位為1ANLA,#00000111B;屏蔽高5位,保留有鍵值信息的低3位

JZGRET;全0,無鍵閉合,返回

LCALLDY10ms;非全0,有鍵閉合,延時10ms,軟件去抖動

MOVA,P1

;重讀鍵值,鍵閉合相應(yīng)位為0

CPLA

;取反,鍵閉合相應(yīng)位為1

ANLA,#00000111B;屏蔽高5位,保留有鍵值信息的低3位

JZGRET

;全0,無鍵閉合,返回;非全0,確認有鍵閉合

JBAcc.0,KA0;轉(zhuǎn)0#鍵功能程序

JBAcc.1,KA1;轉(zhuǎn)1#鍵功能程序

JBAcc.2,KA2;轉(zhuǎn)2#鍵功能程序

GRET:RETKA0:LCALLWORK0;執(zhí)行0#鍵功能子程序

RETKA1:LCALLWORK1;執(zhí)行1#鍵功能子程序

RETKA2:LCALLWORK2;執(zhí)行2#鍵功能子程序

RET2、行列式鍵盤

行列式鍵盤又叫矩陣式鍵盤。用I/O口線組成行、列結(jié)構(gòu),按鍵設(shè)置在行列的交點上,按鍵按下時,行線與列線發(fā)生短路。矩陣式鍵盤的特點:使用m+n個引線就可以組成m*n個鍵特點:①占用I/O端線較少;

②實現(xiàn)復雜。

適用于按鍵較多的場合。4×4的行列結(jié)構(gòu)可組成16個鍵的鍵盤。因此,在按鍵數(shù)量較多時,可以節(jié)省I/O口線。(1)行掃描法

(2)行反轉(zhuǎn)法矩陣鍵盤中鍵的識別行掃描法的原理①先使第0行接低電平,其余行為高電平,然后看第0行是否有鍵閉合(通過檢查列線電位實現(xiàn))。若有某一按鍵按下,則相應(yīng)的列被拉到低電平,通過查詢哪條列線變?yōu)榈碗娖?,來識別第幾列上有鍵按下。如果某列線變?yōu)榈碗娖?,則表示第0行和此列相交的位置上有按鍵按下。②此后,再將第1行接地,然后檢測列線是否有變?yōu)榈碗娢坏木€。如此往下一行一行地掃描,直到最后一行。在實際的行掃描中,一般先快速檢測鍵盤中是否有某個按鍵被按下,然后再進行逐行掃描,判定具體按下了哪一個鍵。為此,可以先使所有各行同時輸出為低電平,再檢查是否有列線為低電平。這時如果某一列線上有低電平出現(xiàn),則說明必有鍵按下,但不能確定按下的按鍵所在行、列的位置,于是再用掃描法來確定閉合按鍵的具體位置。5.6MCS-51串行通信接口5.61串行口及其通信方式

5.62IBM-PC系列機與單片機的通信技術(shù)5.6.1串行口及其通信方式

5.6.1.1串行通信基礎(chǔ)知識

一、異步通訊方式以字符為傳送單位用起始位和停止位標識每個字符的開始和結(jié)束字符間隔不固定,只需字符傳送時同步。

1.異步通訊常用格式:一個字符幀D0D1D2D3D4D5D6D7停止位起始位二、同步通訊以一串字符為一個傳送單位,字符間不加標識位,在一串字符開始用同步字符標識,硬件要求高,通訊雙方須嚴格同步。2.異步通訊雙方的兩項約定(1)字符格式規(guī)定(一幀):數(shù)據(jù)位,校驗位,起始位和停止位。(2)波特率(位/秒)對傳送速率的規(guī)定例:要求每秒傳送120個字符,每幀為10位。解:B=120?0=1200波特每位0.83ms

數(shù)據(jù)位傳輸率=120?=960位/秒三串行接口功能1.發(fā)送器:并串數(shù)據(jù)格式轉(zhuǎn)換,添加標識位和校驗位,一幀發(fā)送結(jié)束,設(shè)置結(jié)束標志,申請中斷。2.接收器:串并數(shù)據(jù)格式轉(zhuǎn)換,檢查錯誤,去掉標識位,保存有效數(shù)據(jù),設(shè)置接收結(jié)束標志,申請中斷。3.控制器:接收編程命令和控制參數(shù),設(shè)置工作方式:同步/

異步、字符格式、波特率、校驗方式、數(shù)據(jù)位與同步時鐘比例等。四串行數(shù)據(jù)傳送方向單工通訊:數(shù)據(jù)單向傳送。半雙工通訊:數(shù)據(jù)可分時雙向傳送。全雙工通訊:可同時進行發(fā)送和接收。發(fā)送器接收器發(fā)送器接收器5.6.1.2

串行口控制寄存器

一、1個全雙工串行接口,可同時進行發(fā)送和接收。串行接口輸入/輸出引腳:TXD(P3.1)、RXD(P3.0)

數(shù)據(jù)格式(P.237圖):按不同方式,一幀位數(shù)8/10/11

發(fā)送/接收時,數(shù)據(jù)皆低位在前。一幀字符發(fā)送/接收結(jié)束,置位標志位(TI/RI)并申請SIO中斷。中斷控制:中斷允許位ES

中斷入口:0023HD0D1D2D3D4D5D6D7停止位起始位D0D1D2D3D4D5D6D7D0D1D2D3D4D5D6D8停止位起始位D7二、串行接口控制1.數(shù)據(jù)緩沖器SBUF發(fā)送SBUF和接收SBUF共用一個地址99H。 (1)發(fā)送SBUF存放待發(fā)送的8位數(shù)據(jù),寫入SBUF將同時啟動發(fā)送。 發(fā)送指令: MOV SBUF,A(2)接收SBUF存放已接收成功的8位數(shù)據(jù),供CPU讀取。讀取串行口接收數(shù)據(jù)指令:MOVA,SBUF2.串行口控制/狀態(tài)寄存器SCON(98H)SM0,SM1:選擇串行口4種工作方式。SM2:多機控制位,用于多機通訊。REN:允許接收控制位,REN=1,允許接收;REN=0,禁止接收。TB8:發(fā)送的第9位數(shù)據(jù)位,可用作校驗位和地址/數(shù)據(jù)標識位RB8:接收的第9位數(shù)據(jù)位或停止位TI:發(fā)送中斷標志,發(fā)送一幀結(jié)束,TI=1,必須軟件清零RI:接收中斷標志,接收一幀結(jié)束,RI=1,必須軟件清零3.節(jié)電控制寄存器PCONSMOD(PCON.7):波特率加倍控制位。SMOD=1,波特率加倍,SMOD=0,則不加倍。

SM0,SM1選擇四種工作方式。一、方式0:同步移位寄存器方式。用于擴展并行I/O接口。1.一幀8位,無起始位和停止位。2.RXD:數(shù)據(jù)輸入/輸出端。

TXD:同步脈沖輸出端,每個脈沖對應(yīng)一個數(shù)據(jù)位。3.波特率B=fosc/12

如:fosc=12MHz, B=1MHz,每位數(shù)據(jù)占1s。5.6.1.3

串行接口的工作方式4.發(fā)送過程:寫入SBUF,啟動發(fā)送,一幀發(fā)送結(jié)束,TI=1。

接收過程:REN=1且RI=0,啟動接收,一幀接收完畢,RI=1。

發(fā)送時序?qū)懭隨BUFRXD輸出TXDTID0D1D2D3D4D5D6D7寫REN=1RI=0RXD輸入RI接收時序(a)(b)數(shù)據(jù)從RXD(P3.0)引腳串行輸出,低位在先,高位在后;TXD(P3.1)引腳輸出移位脈沖,其頻率為foc/12;發(fā)送完畢后,中斷標志位TI為1。如要發(fā)送數(shù)據(jù),如下所示:

MOVSCON,#00H;串行口方式0MOVSBUF,A;將數(shù)據(jù)送出

JNBTI,$;等待數(shù)據(jù)發(fā)送完畢5.移位寄存器方式舉例二、方式1

8位數(shù)據(jù)異步通訊方式。1.一幀10位:8位數(shù)據(jù)位,1個起始位(0),1個停止位(1)。2.RXD:接收數(shù)據(jù)端。TXD:發(fā)送數(shù)據(jù)端。3.波特率:用T1作為波特率發(fā)生器,B=(2SMOD/32)×T1溢出率。4.發(fā)送:寫入SBUF,同時啟動發(fā)送,一幀發(fā)送結(jié)束,TI=1。

接收:REN=1,允許接收。接收完一幀,若RI=0且停止位為1(或SM2=0),將接收數(shù)據(jù)裝入SBUF,停止位裝入RB8,并使RI=1;否則丟棄接收數(shù)據(jù),不置位RI。當REN=1,CPU開始采樣RXD引腳負跳變信號,若出現(xiàn)負跳變,才進入數(shù)據(jù)接收狀態(tài),先檢測起始位,若第一位為0,繼續(xù)接收其余位;否則,停止接收,重新采樣負跳變。數(shù)據(jù)采樣速率為波特率16倍頻,在數(shù)據(jù)位中間,用第7、8、9個脈沖采樣3次數(shù)據(jù)位,并3中取2保留采樣值。寫入SBUF采樣(a)發(fā)送時序圖TXD數(shù)據(jù)輸出TID0D1D2D3D4D5D6D7停止位起始位RXD輸入數(shù)據(jù)(b)接收時序圖D0D1D2D3D4D5D6D7停止位起始位RI檢測負跳變9位數(shù)據(jù)異步通訊方式。1.一幀為11位:9位數(shù)據(jù)位,1個起始位(0),1個停止位(1)。第9位數(shù)據(jù)位在TB8/RB8中,常用作校驗位和多機通訊標識位。2.RXD:接收數(shù)據(jù)端,TXD:發(fā)送數(shù)據(jù)端。3.波特率:方式2:B=(2SMOD/64)×fosc。

方式3:B=(2SMOD/32)×T1溢出率。三、方式2和方式34.發(fā)送:先裝入TB8,寫入SBUF并啟動發(fā)送,發(fā)送結(jié)束,

TI=1。接收:REN=1,允許接收。接收完一幀,若RI=0且第9位為1(或SM2=0),將接收數(shù)據(jù)裝入接收SBUF,第9

位裝入RB8,使RI=1;否則丟棄接收數(shù)據(jù),不置位

RI。發(fā)送時序?qū)懭隨BUFTXD輸出TIRXD輸入接收時序RID0D1D2D3D4D5D6TB8停止位起始位D7D0D1D2D3D4D5D6RB8停止位起始位D7檢測負跳變5.6.1.4、計算波特率方式0為固定波特率:B=fosc/12 方式2可選兩種波特率:B=(2SMOD/64)×fosc 方式1、3為可變波特率,用T1作波特率發(fā)生器。

B=(2SMOD/32)×T1溢出率T1為方式2的時間常數(shù):X=28-t/T

溢出時間:t=(28-X)T=(28-X)×12/foscT1溢出率=1/t=fosc/[12×(2n-X)]

波特率B=(2SMOD/32)×fosc/[12×(28-X)]

串行口方式1、3,根據(jù)波特率選擇T1工作方式,計算時間常數(shù)。T1選方式2:TH1=X=28-fosc/12×2SMOD/(32×B)T1選方式1用于低波特率,需考慮T1重裝時間常數(shù)時間。5.6.1.5

串行口的應(yīng)用串行口初始化編程格式:

SIO:MOVSCON,#控制狀態(tài)字;寫方式字且TI=RI=0 (MOVPCON,#80H) ;波特率加倍

(MOVTMOD,#20H) ;T1作波特率發(fā)生器

(MOVTH1,#X);選定波特率

(MOVTL1,#X) (SETBTR1) (SETBEA) ;開串行口中斷

(SETBES)一、串行口初始化二、發(fā)送程序1.查詢方式:TRAM: MOV A,@R0 ;取數(shù)據(jù)

MOV SBUF,A ;發(fā)送一個字符WAIT: JBC TI,NEXT ;等待發(fā)送結(jié)束

SJMP WAITNEXT: INC R0 ;準備下一次發(fā)送

SJMP TRAM2.中斷方式:

ORG 0023H ;串行口中斷入口

AJMPSINTMAIN: … ;初始化編程TRAM: MOV A,@R0 ;取數(shù)據(jù)

MOV SBUF,A ;發(fā)送第一個字符

H: SJMP H ;其它工作

SINT: CLRTI ;中斷服務(wù)程序

INC R0 MOV A,@R0 ;取數(shù)據(jù)

MOV SBUF,A ;發(fā)送下一個字符

RETI三、接收程序REN=1、RI=0等待接收,當RI=1,從SBUF讀取數(shù)據(jù)。1.查詢方式:

WAIT: JBC RI,NEXT ;查詢等待

SJMP WAITNEXT: MOV A,SBUF ;讀取接收數(shù)據(jù)

MOV @R0,A ;保存數(shù)據(jù)

INC R0 ;準備下一次接收

SJMP WAIT四、串行口方式0

用于擴展單片機的并行I/O接口。串行口實現(xiàn):并行→串行的數(shù)據(jù)轉(zhuǎn)換74LS165/74LS164實現(xiàn):串行→并行的數(shù)據(jù)轉(zhuǎn)換。D0D1D2D3D4D5D6D7

數(shù)據(jù)輸入

RXD9TXD移位脈沖

274LS165

8051

654314131211

D7D6D5D4D3D2D1D0

數(shù)據(jù)輸入

RXD12TXD移位脈沖

74LS164

88051345610111213

五、異步通訊程序舉例

1.發(fā)送程序:將片內(nèi)RAM50H起始單元的16個數(shù)由串

行口發(fā)送。要求發(fā)送波特率為系統(tǒng)時鐘

的32分頻,并進行奇偶校驗。MAINT:MOV SCON,#80H;串行口初始化

MOV PCON,#80H;波特率

SETB EA SETB ES ;開串行口中斷

MOV R0,#50H ;設(shè)數(shù)據(jù)指針

MOV R7,#10H ;數(shù)據(jù)長度LOOP: MOV A,@R0 ;取一個字符

MOV C,P ;加奇偶校驗

MOV TB8,C MOV SBUF,A ;啟動一次發(fā)送HERE: SJMP HERE ;CPU執(zhí)行其它任務(wù)

ORG 0023H ;串行口中斷入口 AJMP TRANI

TRANI: PUSH A ;保護現(xiàn)場

PUSH PSW CLR TI ;清發(fā)送結(jié)束標志

DJNZ R7,NEXT ;是否發(fā)送完?

CLR ES ;發(fā)送完,關(guān)閉串行口中斷 SJMP TEND NEXT: INC R0 ;未發(fā)送完,修改指針

MOV A,@R0 ;取下一個字符

MOV C,P ;加奇偶校驗

MOV TB8,C MOV SBUF,A ;發(fā)送一個字符

POP PSW ;恢復現(xiàn)場

POP A TEND: RETI ;中斷返回2.接收程序:串行輸入16個字符,存入片內(nèi)RAM的50H起

始單元,串行口波特率為2400(設(shè)晶振為11.0592MHz)。RECS: MOV SCON,#50H;串行口方式1允許接收 MOV TMOD,#20H;T1方式2定時 MOV TL1,#0F4H ;寫入T1時間常數(shù) MOV TH1,#0F4H SETBTR1 ;啟動T1 MOV R0,#50H ;設(shè)數(shù)據(jù)指針 MOV R7,#10H ;接收數(shù)據(jù)長度 WAIT: JBC RI,NEXT ;等待串行口接收 SJMPWAIT NEXT: MOV A,SBUF ;讀取接收字符 MOV @R0,A ;保存一個字符 INC R0 ;修改指針

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論