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

下載本文檔

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

文檔簡(jiǎn)介

5.5鍵盤接口

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

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

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

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

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

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

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

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

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

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

JZGRET;全0,無(wú)鍵閉合,返回

LCALLDY10ms;非全0,有鍵閉合,延時(shí)10ms,軟件去抖動(dòng)

MOVA,P1

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

CPLA

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

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

JZGRET

;全0,無(wú)鍵閉合,返回;非全0,確認(rèn)有鍵閉合

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è)置在行列的交點(diǎn)上,按鍵按下時(shí),行線與列線發(fā)生短路。矩陣式鍵盤的特點(diǎn):使用m+n個(gè)引線就可以組成m*n個(gè)鍵特點(diǎn):①占用I/O端線較少;

②實(shí)現(xiàn)復(fù)雜。

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

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

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

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

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

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

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

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

串行口控制寄存器

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

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

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

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

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

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

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

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

接收過(guò)程:REN=1且RI=0,啟動(dòng)接收,一幀接收完畢,RI=1。

發(fā)送時(shí)序?qū)懭隨BUFRXD輸出TXDTID0D1D2D3D4D5D6D7寫REN=1RI=0RXD輸入RI接收時(shí)序(a)(b)數(shù)據(jù)從RXD(P3.0)引腳串行輸出,低位在先,高位在后;TXD(P3.1)引腳輸出移位脈沖,其頻率為foc/12;發(fā)送完畢后,中斷標(biāo)志位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個(gè)起始位(0),1個(gè)停止位(1)。2.RXD:接收數(shù)據(jù)端。TXD:發(fā)送數(shù)據(jù)端。3.波特率:用T1作為波特率發(fā)生器,B=(2SMOD/32)×T1溢出率。4.發(fā)送:寫入SBUF,同時(shí)啟動(dòng)發(fā)送,一幀發(fā)送結(jié)束,TI=1。

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

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

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

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

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

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

溢出時(shí)間: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工作方式,計(jì)算時(shí)間常數(shù)。T1選方式2:TH1=X=28-fosc/12×2SMOD/(32×B)T1選方式1用于低波特率,需考慮T1重裝時(shí)間常數(shù)時(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ā)送一個(gè)字符WAIT: JBC TI,NEXT ;等待發(fā)送結(jié)束

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

SJMP TRAM2.中斷方式:

ORG 0023H ;串行口中斷入口

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

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

H: SJMP H ;其它工作

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

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

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

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

WAIT: JBC RI,NEXT ;查詢等待

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

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

INC R0 ;準(zhǔn)備下一次接收

SJMP WAIT四、串行口方式0

用于擴(kuò)展單片機(jī)的并行I/O接口。串行口實(shí)現(xiàn):并行→串行的數(shù)據(jù)轉(zhuǎn)換74LS165/74LS164實(shí)現(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個(gè)數(shù)由串

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

的32分頻,并進(jìn)行奇偶校驗(yàn)。MAINT:MOV SCON,#80H;串行口初始化

MOV PCON,#80H;波特率

SETB EA SETB ES ;開串行口中斷

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

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

MOV C,P ;加奇偶校驗(yàn)

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

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

TRANI: PUSH A ;保護(hù)現(xiàn)場(chǎng)

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

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

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

MOV A,@R0 ;取下一個(gè)字符

MOV C,P ;加奇偶校驗(yàn)

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

POP PSW ;恢復(fù)現(xiàn)場(chǎng)

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

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

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論