接口擴(kuò)展與應(yīng)用_第1頁
接口擴(kuò)展與應(yīng)用_第2頁
接口擴(kuò)展與應(yīng)用_第3頁
接口擴(kuò)展與應(yīng)用_第4頁
接口擴(kuò)展與應(yīng)用_第5頁
已閱讀5頁,還剩19頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

主要內(nèi)容: 簡單I/O接口的擴(kuò)展; 通用接口的使用;

LED顯示接口的應(yīng)用;

鍵盤輸入接口的應(yīng)用。第9章接口擴(kuò)展與應(yīng)用1AA’BCDB’C’D’DCBA00010011001001100100110010001001順逆應(yīng)用舉例【例7.1】試編制一個(gè)4相8拍步進(jìn)電機(jī)驅(qū)動(dòng)程序。

步進(jìn)電機(jī)

4相8拍節(jié)拍表2步進(jìn)電機(jī)接口電路P1.3P1.2P1.1P1.0P1.4P1.5P3.2(INT0)+5V方向DIRA方式MOD點(diǎn)動(dòng)BCD步進(jìn)電機(jī)3#include<Reg51.h>#define

uchar

unsignedchar/*單步定時(shí)常數(shù)0,定時(shí)時(shí)間50ms(fosc=6MHz)*/constintTC0=-25000;/*連續(xù)定時(shí)常數(shù)1,定時(shí)時(shí)間10ms(fosc=6MHz)*/constintTC1=-5000;sbitDIR=P1^4;/*定義P1.4腳名*/sbitMOD=P1^5;/*定義P1.5腳名*/要求:1.P1.4狀態(tài)確定旋轉(zhuǎn)方向:0=逆時(shí)針、1=順時(shí)針2.P1.5狀態(tài)確定運(yùn)轉(zhuǎn)形式:0=手動(dòng)、1=連續(xù)3.P3.2輸入單步運(yùn)行信號:0=停止、1=運(yùn)轉(zhuǎn)利用定時(shí)器0作為連續(xù)運(yùn)行的節(jié)拍發(fā)生器,利用P1.3~P1.0作為步進(jìn)電機(jī)節(jié)拍輸出控制口。4/*步進(jìn)電機(jī)節(jié)拍表*/const

ucharrht[8]={0x01,0x03,0x02,0x06,0x04,0x0c,0x08,0x09};uchar

rhi=0;/*節(jié)拍索引*/time0()interrupt1/*T0中斷服務(wù)*/{if(MOD){TH0=TC1>>8;/*重裝定時(shí)器0連續(xù)時(shí)常*/TL0=TC1&0xff;}

else{TH0=TC0>>8;/*重裝定時(shí)器0單步時(shí)常*/TL0=TC0&0xff;}P1=~rht[rhi];/*輸出節(jié)拍*/

if(DIR)/*根據(jù)方向選擇調(diào)整下一節(jié)拍索引*/

if(rhi=

=0)rhi=7;else

rhi-

-;

else

if(rhi=

=7)rhi=0;else

rhi+

+;}【例7.1】(續(xù))5main(){TH0=TC1>>8;/*裝入定時(shí)器0連續(xù)運(yùn)行時(shí)常*/TL0=TC1&0xff;P1=0xff;EA=1;ET0=1;TR0=1;

while(1){if(MOD) /*T0工作在定時(shí)方式、模式1*/TMOD=0x01; /*置T0內(nèi)啟動(dòng)*/

elseTMOD=0x09; /*置T0外啟動(dòng)*/}}【例7.1】(續(xù))6通用接口芯片Intel8155簡介主要構(gòu)成:

2個(gè)8位并行口,1個(gè)6位并行口;

1個(gè)14位計(jì)數(shù)器,1個(gè)256字節(jié)RAMTINRAM256BytePAPCPBPA7~PA0ALERSTAD7~0IO/MI/O控制TOUT14位初值寄存器PC5~PC3PB7~PB0PC2~PC0地址鎖存CERDWR14位減1計(jì)數(shù)器計(jì)數(shù)控制并口控制78155RAM/端口地址分配IO/MA7A6A5A4A3A2A1A0訪問電路方向0××××××××RAM寫/讀1×××××000命令/狀態(tài)口寫/讀1×××××001

8位并行口PA寫/讀1×××××010

8位并行口PB寫/讀1×××××011

6位并行口PC寫/讀1×××××100計(jì)數(shù)器低8位值寫1×××××101計(jì)數(shù)器高6位值寫88155命令與狀態(tài)字76543210TC1TC0IEBIEAPC1PC0BDADPA、PB口方向0-輸入1-輸出并口工作方式PA、PB口中斷允許0-禁止請求1-允許請求計(jì)數(shù)器控制PC1PC0說明00

PA、PB為基本輸入/輸出口,PC為基本輸入口01

PA、PB為基本輸入/輸出口,PC為基本輸出口10

PA為選通輸入/輸出口,PC口的0~2為其狀態(tài)/控制線;

PB為基本輸入/輸出口,PC口的3~5為基本輸出口11

PA為選通輸入/輸出口,PC口的0~2為其狀態(tài)/控制線;

PB為選通輸入/輸出口,PC口的3~5為其狀態(tài)/控制線。命令字:98155命令與狀態(tài)字(續(xù))76543210-RZIEBFIRIEBFIRTC1TC0說明00空操作01停止計(jì)數(shù)10計(jì)數(shù)器歸0后,停止計(jì)數(shù)。11計(jì)數(shù)初值裝入后,若計(jì)數(shù)器沒工作則將其啟動(dòng)中斷請求PA口計(jì)數(shù)器歸0緩沖器滿中斷允許PB口計(jì)數(shù)器控制狀態(tài)字108155計(jì)數(shù)器初值與工作方式76543210C7C6C5C4C3C2C1C0低8位計(jì)數(shù)初值IC高6位計(jì)數(shù)初值IC計(jì)數(shù)器工作方式M1M0說明00單次計(jì)數(shù),方波輸出。(計(jì)數(shù)值>IC/2,TOUT=1;否則TOUT=0,計(jì)數(shù)結(jié)束TOUT=1。)01連續(xù)計(jì)數(shù),方波輸出。(計(jì)數(shù)值>IC/2,TOUT=1;否則TOUT=0。)10單次計(jì)數(shù),脈沖輸出。(計(jì)數(shù)值≠1時(shí),TOUT=1;計(jì)數(shù)值=1時(shí),TOUT=0。)11連續(xù)計(jì)數(shù),脈沖輸出。(計(jì)數(shù)值≠1時(shí),TOUT=1;計(jì)數(shù)值=1時(shí),TOUT=0。)76543210M1M0C14C12C11C10C9C811

4位LED數(shù)碼管顯示掃描驅(qū)動(dòng)程序(1/100秒計(jì)時(shí)器),其中:1.8155的PA為字型口(PA0~PA6對應(yīng)字段a~g,低電平亮)2.8155的PB為位置口(PB4~PB7對應(yīng)#0~#3位,高電平有效)3.利用T0作為5ms掃描定時(shí)器,兼做1/100秒計(jì)時(shí)器【例7.2】PA0PB7PB6PB5PB4ALE來自MCS-51ALE數(shù)據(jù)總線DBRD地址總線ABWRRD8155AD7~0CEPA1PA6abg地址譯碼WRCC3CC2CC1CC012#include<Reg51.h>#define

uchar

unsignedchar#define

uint

unsignedint#defineCMD(uchar

xdata*)0xffe8/*8155的命令口地址*/#definePA(uchar

xdata*)0xffe9/*8155的PA口地址*/#definePB(uchar

xdata*)0xffea/*8155的PB口地址*/#definePC(uchar

xdata*)0xffeb/*8155的PC口地址*/#defineTC0(-2500)/*T05ms時(shí)間常數(shù)*/#defineST10(2)/*10ms軟定時(shí)時(shí)間常數(shù)*/#defineSTFH(5)/*刷新25ms定時(shí)時(shí)常*/【例7.2】程序13uchardisp[4];/*顯示緩沖區(qū)*/uchart10ms;/*10ms軟定時(shí)器*/uchar

tfresh;/*刷新軟定時(shí)器*/uint

csec;/*1/100s計(jì)時(shí)器*/void

fresh(uint,uchar*);/*顯示掃描和定時(shí)中斷服務(wù),每5ms一次*/time0()interrupt1{/*顯示掃描位置表*/

static

ucharpot[4]={0x1f,0x2f,0x4f,0x8f};

static

uchar

di=0;/*顯掃索引*/TH0=TC0>>8;/*重裝定時(shí)器0時(shí)常*/TL0=TC0&0xff;*PA=disp[di];/*當(dāng)前字型送PA口*/*PB=pot[di];/*當(dāng)前位置送PB口*/【例7.2】(續(xù))14

/*顯示掃描和定時(shí)中斷服務(wù)(續(xù))*/if(++di==4)di=0;

if(!(--t10ms))/*10ms定時(shí)*/{t10ms=ST10;

csec++;/*1/100s計(jì)數(shù)*/}

if(!(--tfresh))/*刷新定時(shí)*/{

tfresh=STFH;fresh(csec,disp);/*刷新顯示當(dāng)前的1/100秒*/}}【例7.2】(續(xù))15main(){TMOD=0x01;/*定時(shí)器0工作在定時(shí)方式、模式1、內(nèi)啟動(dòng)*/TH0=TC0>>8;/*裝入定時(shí)器0時(shí)常*/TL0=TC0&0xff;*CMD=0x43;/*8155初始化,PA、PB基本輸出,PC基本輸入*/*PA=0xff;/*關(guān)顯示*/*PB=0x0f;t10ms=ST10;

tfresh=STFH;

csec=0;fresh(csec,disp);/*刷新當(dāng)前1/100秒顯示*/IE=0x82;/*開中斷,允許定時(shí)器0請求中斷*/TR0=1;/*啟動(dòng)定時(shí)器0*/

while(1);/*等待定時(shí)器中斷請求*/}【例7.2】(續(xù))16/*顯示刷新函數(shù)*/voidfresh(uint

x,uchar*y){/*0~9字型表*/

static

ucharfont[10]={0xC0,0xF9,0xA4,0xB0,0x99, 0x92,0x82,0x0F8,0x80,0x90};

ucharq,r;r=x%100;/*將x轉(zhuǎn)換成BCD十進(jìn)制數(shù)字字型送到y(tǒng)[]中*/q=x/100;y[0]=font[r%10];y[1]=font[r/10];y[2]=font[q%10];y[3]=font[(q/10)%10];}【例7.2】(續(xù))17

設(shè)計(jì)一個(gè)4位LED數(shù)碼管顯示和3×3鍵盤掃描驅(qū)動(dòng)程序。顯示:字符“In”和鍵入值“k”

其中:1.8155PA為字型口(PA0~PA6對應(yīng)字段a~g,低電平亮)2.8155PB為位置口

PB0~PB2對應(yīng)#0~#2KSCN位,低電平有效;

PB4~PB7對應(yīng)#0~#3LED位,高電平有效。3.8155PC為鍵入口

PC0~PC2對應(yīng)#0~#2KIN位,低電平有按鍵。利用T0作為5ms鍵盤/顯示掃描定時(shí)器。【例7.3】18數(shù)碼顯示與鍵盤接口電路PA0PB7PB6PB5PB4ALE來自MCS-51ALE數(shù)據(jù)總線DBRD地址總線ABWRRD8155AD7~0CEPA1PA6abg地址譯碼WRCC3CC2CC1CC0PB2PB1PB0PC2PC1PC0+5V03614725M0行1行2行2列1列0列19#include<Reg51.h>#define

uchar

unsignedchar#define

uint

unsignedint#defineCMD(uchar

xdata*)0xffe8/*8155的命令口地址*/#definePA(uchar

xdata*)0xffe9/*8155的PA口地址*/#definePB(uchar

xdata*)0xffea/*8155的PB口地址*/#definePC(uchar

xdata*)0xffeb/*8155的PC口地址*/#defineTC0(-2500)/*T05ms時(shí)間常數(shù)*/uchardisp[4];/*顯示緩沖區(qū)*/ucharkey; /*鍵掃描值輸出*/【例7.3】程序20/*鍵盤、顯示掃描和定時(shí)中斷服務(wù),一次/5ms*/time0()interrupt1{/*掃描位置表*/

static

ucharpot[4]={0x1e,0x2d,0x4b,0x8f};/*鍵行值轉(zhuǎn)換表*/

static

ucharkct[8]={0x3,0x0,0x1,0x3,0x2,0x3,0x3,0x3};

static

uchar

si=0,kst=0;/*掃描索引,鍵盤狀態(tài)*/static

ucharkit,sit;/*鍵入值、掃描索引暫存*/

uchar

kc;/*鍵入值暫存*/TH0=TC0>>8;/*重裝定時(shí)器0時(shí)常*/TL0=TC0;*PA=disp[si];/*當(dāng)前字型送PA口*/*PB=pot[si];/*當(dāng)前位置送PB口*/

kc=~(*PC)&0x07;/*從PC口輸入鍵值*/【例7.3】(續(xù))21if(!kst&&kc){kit=kc;sit=si;kst=1;}

else

if(si==sit){switch(kst){case1:

if(kc==kit)key=kct[kc]*3+si+1;

kst=2;

break;

case2:

if(!kc)kst=3;

break;

case3:

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論