版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、嵌入式實時操作系統(tǒng),第七章 在51單片機上移植c/os-II,7.3 應(yīng)用舉例,7.3.1 LED數(shù)碼顯示器的驅(qū)動程序 LED顯示以其簡單、使用、價格低廉等優(yōu)點,使它是單片機應(yīng)用中經(jīng)常使用的一種顯示方式。其中一種方案的硬件電路如圖7-3所示。,PB.0,PB.1,PB.2,PB.3,PB.4,PB.5,PB.6,PB.7,PA.7,PA.6,PA.5,PA.4,PA.3,PA.2,PA.1,PA.0,AD7,AD0,ALE,IO/M,CE,WR,RD,P0端口,ALE,P2.0,P2.7,WR,RD,8031,EA,5V,段選信號,a,b,c,d,e,f,g,dp,位選信號,7407,圖7-3
2、 LED顯示硬件原理圖,在圖7-3中,8位8段LED顯示器為共陰極接法,采用并行接口8155通過驅(qū)動器7407來進行驅(qū)動。該方案中使用8155的PA端口進行顯示器的位選擇(低電平有效);使用PB端口進行顯示器的字段選擇(高電平有效)。 已知8155命令字端口地址為7F00H,PA端口地址為7F01H,PB端口地址為7F02H,顯示器的段選碼存放在單片機內(nèi)部RAM中從標(biāo)號地址TABLE開始的連續(xù)16個單元中。 #include INT8U xdata * DspBuffer; /定義顯示緩沖區(qū)指針 INT8U code * Tbl; /定義段碼表指針 INT8U xdata * Cmd; /定義
3、8155命令字寄存器指針 INT8U xdata * Pa; /定義8155的PA端口指針 INT8U xdata * Pb; /定義8155的PB端口指針 INT8U bitCtl; /定義位控信號字 INT8U I; void TaskLEDDsp(void *ppdata) reentrant; OS_STK TaskLEDDspStk64; /任務(wù)堆棧,void main(void) OSInit( ); InitTimer0( ); OSTaskCreate(TaskLEDDsp,(void *)0, /段碼表首地址,for( ; ; ) bitCtl=0 x7F; /位控信號賦初值
4、 for(i=0;i1; /位控字左移1位 bitCtl=bitCtl|0 x80; /位控字高位補1 ,7.3.2 51單片機串行接口的應(yīng)用,1、51單片機的串行接口 51系列單片機的內(nèi)部有一個可編程的全雙工異步串行通信接口,它主要由2個共用端口(SBUF)的串行數(shù)據(jù)緩沖器和1個波特率發(fā)生器構(gòu)成,片外有一根串行數(shù)據(jù)接收線RXD(P3.0)和一根串行數(shù)據(jù)發(fā)送線TXD(P3.1)。51系列單片機串行數(shù)據(jù)接口的結(jié)構(gòu)如圖7-4所示。,51單片機,ACC,SBUF,發(fā)送緩沖器,接收緩沖器,波特率發(fā)生器,發(fā)送引腳TXD,接收引腳TXD,P3.1,P3.0,圖7-4 51單片機串行接口的構(gòu)成,串行數(shù)據(jù)接口
5、有如表7-1所列的4種工作方式可供選擇。,表7-1 51單片機串行數(shù)據(jù)接口的工作方式,工作方式,SM0,SM1,說 明,波特率,工作方式0,工作方式1,工作方式2,工作方式3,0,0,1,1,1,1,0,0,移位寄存器(用于I/O擴展),10位異步收發(fā),11位異步收發(fā),11位異步收發(fā),fosc/12,波特率可變,由T1控制,fosc/64或fosc/32,波特率可變,由T1控制,可以使用SCON和PCON這兩個控制字來設(shè)置51單片機的串行數(shù)據(jù)接口的工作方式。這兩個控制字的格式分別如圖7-5和圖7-6所示。,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,D7,D6,D5,D4,D3
6、,D2,D1,D0,SCON(98H),接收中斷標(biāo)志,發(fā)送中斷標(biāo)志,接收數(shù)據(jù)第9位,發(fā)送數(shù)據(jù)第9位,接收控制:1允許;0禁止,多機通信:1允許;0禁止,工作方式選擇,圖7-5 串行接口SCON控制字格式,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,D7,D6,D5,D4,D3,D2,D1,D0,PCON(87H),波特率選擇位,圖7-6 PCON控制字格式,當(dāng)采用工作方式0時: 當(dāng)采用工作方式2時: 當(dāng)采用工作方式1和方式3時: 式中:X定時器T1定時預(yù)置初值; K定時器的位數(shù)(8、13或16)。,2、應(yīng)用程序 下面的應(yīng)用程序中設(shè)置了3個任務(wù),每個任務(wù)通過串行接口滾動輸出一個字
7、符串 /* / 串口應(yīng)用程序清單 /* #include void Task1(void *ppdata) reentrant; /定義任務(wù)1 void Task2(void *ppdata) reentrant; /定義任務(wù)2 void Task3(void *ppdata) reentrant; /定義任務(wù)3 OS_STK Task1Stk64; /定義任務(wù)1堆棧 OS_STK Task1Stk64; /定義任務(wù)1堆棧,/主函數(shù)- void main(void) OSInit( ); InitTimer( ); /初始化系統(tǒng)時鐘 InitSerial( ); /串口初始化 InitSeri
8、alBuffer( ); OSTaskCreate(Task1,(void *)0, ,/任務(wù)1- void Task1(void *ppdata) reentrant ppdata=ppdata; ET0=1; clrscr( ); PrintStr(“ntt*n”); PrintStr(“tt* Hello!The world. *n”); PrintStr(“tt*nnn”); for( ; ; ) PrintStr(“ttt This is Task1.n”); OSTimeDly(OS_TICKS_PER_SEC); ,/任務(wù)2- void Task2(void *ppdata) r
9、eentrant ppdata=ppdata; for( ; ; ) PrintStr(“tttt This is Task2.n”); OSTimeDly(3*OS_TICKS_PER_SEC); /任務(wù)3- void Task3(void *ppdata) reentrant ppdata=ppdata; for( ; ; ) PrintStr(“tttt This is Task3.n”); OSTimeDly(6*OS_TICKS_PER_SEC); ,/* / serial.h文件 /* void InitSerial( ) reentrant; /串口初始化 void InitSe
10、rialBuffer(void) reentrant; /串口緩沖區(qū)初始化 void PrintChar(unsigned char ch) reentrant; /顯示字符 void PrintStr(unsigned char *str) reentrant; /顯示字符串 void clrscr( ) reentrant; /清屏 void serial(void) reentrant; /串口中斷服務(wù)子程序 /收發(fā)數(shù)據(jù)緩沖區(qū)長度 #define LenTxBuf 2000 #define LenRxBuf 50 #define MaxLenStr 100,/* / serial.c文件
11、 /* INT8U xdata TxBufLenTxBuf,RxBufLenRxBuf; /收發(fā)緩沖區(qū)實體 INT8U xdata *inTxBuf, *outTxBuf, *inRxBuf, *outRxBuf; /收發(fā)緩沖區(qū)讀/寫指針 /串口初始化程序- void InitSerial( ) reentrant TMOD=TMOD /啟動定時器T1 ,/中斷時調(diào)用的串口任務(wù)函數(shù) void serial(void) reentrant INT8U *t; if(TI) TI=0; if(inTxBuf=outTxBuf) TIflag=1; return; /TxBuf空 SBUF=*out
12、TxBuf; outTxBuf+; if(outTxBuf=TxBuf+LenTxBuf) outTxBuf=TxBuf; if(RI) RI=0; t=inRxBuf; t+; if(t=RxBuf+LenRxBuf) t=RxBuf; if(t=outRxBuf) return; /RxBuf滿 *inRxBuf=SBUF; ,/顯示字符串函數(shù)- void PrintStr(unsigned char *str) reentrant INT8U i; INT8U j; INT8U ch; OS_ENTER_CRITICAL( ); /入臨界區(qū) for(i=0;iMaxLenStr;i+)
13、ch=*(str+i); if(ch=0) break; else if(ch=0) PrintChar(10); PrintChar(13); else if(ch=t) for(j=0;jTABNum;j+) PrintChar( ); else PrintChar(ch); OS_EXIT_CRITICAL( ); /出臨界區(qū) ,/顯示字符函數(shù)- void PrintChar(unsigned char ch) reentrant INT8U *t; OS_ENTER_CRITICAL( ); /入臨界區(qū) t=inTxBuf; t+; if(t=TxBuf+LenTxBuf) t=TxB
14、uf; if(t=outTxBuf) OS_EXIT_CRITICAL( ); /出臨界區(qū) return; /TxBuf滿 *inTxBuf=ch; inTxBuf=t; OS_EXIT_CRITICAL( ); /出臨界區(qū) if(TIflag) TIflag=0; TI=1; ,/清屏函數(shù)- void clrscr( ) reentrant /使用25個回車換行來清屏幕 PrintStr(“nnnnnnnnnnnnnnnnnnnnnnnnn”); /* ;* ; 在文件OS_CPU_A.ASM中用匯編語言編寫的中斷服務(wù)程序 ;* SerialISR: ;串口中斷服務(wù)程序 USING 0 CLR EA ;先關(guān)中斷,以防中斷嵌套 PUSHALL LCALL_?seria
溫馨提示
- 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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2026年山東輕工職業(yè)學(xué)院單招綜合素質(zhì)考試模擬測試卷附答案
- 2026云南文山州動物衛(wèi)生監(jiān)督所招聘城鎮(zhèn)公益性崗位工作人員1人筆試模擬試題及答案解析
- 2026年廣東水利電力職業(yè)技術(shù)學(xué)院單招綜合素質(zhì)考試模擬測試卷附答案
- 2026年婚戀心理考試題庫及1套參考答案
- 2026年河南普高單招試題及答案1套
- 2026年大心理期末測試題有答案
- 2026年晉中職業(yè)技術(shù)學(xué)院單招職業(yè)適應(yīng)性考試模擬測試卷附答案
- 2026年荊州理工職業(yè)學(xué)院單招職業(yè)傾向性考試題庫附答案
- 2026年安徽工業(yè)職業(yè)技術(shù)學(xué)院單招職業(yè)技能測試題庫及答案1套
- 國家能源集團科研總院社會招聘筆試備考試題及答案解析
- 動量守恒定律(教學(xué)設(shè)計)-2025-2026學(xué)年高二物理上冊人教版選擇性必修第一冊
- 2025年全國注冊監(jiān)理工程師繼續(xù)教育題庫附答案
- 網(wǎng)絡(luò)素養(yǎng)與自律主題班會
- 波形護欄工程施工組織設(shè)計方案
- 社區(qū)老人心理疏導(dǎo)服務(wù)記錄表
- 屈光不正診療規(guī)范
- 國際貿(mào)易采購合同(中英文)
- 建設(shè)部環(huán)衛(wèi)勞動定額
- 金蝶云星空 V7.2-產(chǎn)品培訓(xùn)-PLM領(lǐng)域-文檔管理
- 溶洞注漿施工方案樣本
- GB/T 25852-20108級鏈條用鍛造起重部件
評論
0/150
提交評論