第06章 單片機(jī)串行通信系統(tǒng) 習(xí)題解答_第1頁
第06章 單片機(jī)串行通信系統(tǒng) 習(xí)題解答_第2頁
第06章 單片機(jī)串行通信系統(tǒng) 習(xí)題解答_第3頁
第06章 單片機(jī)串行通信系統(tǒng) 習(xí)題解答_第4頁
第06章 單片機(jī)串行通信系統(tǒng) 習(xí)題解答_第5頁
已閱讀5頁,還剩5頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、第6章 單片機(jī)串行通信系統(tǒng) 習(xí)題解答一、填空題1在串行通信中,把每秒中傳送的二進(jìn)制數(shù)的位數(shù)叫 波特率 。2當(dāng)SCON中的M0M1=10時(shí),表示串口工作于方式 2 ,波特率為 fosc/32或fosc/64 。3SCON中的REN=1表示 允許接收 。4PCON 中的SMOD=1表示 波特率翻倍 。5SCON中的TI=1表示 串行口發(fā)送中斷請(qǐng)求 。6MCS-51單片機(jī)串行通信時(shí),先發(fā)送 低 位,后發(fā)送 高 位。7MCS-51單片機(jī)方式2串行通信時(shí),一幀信息位數(shù)為 11 位。8設(shè)T1工作于定時(shí)方式2,作波特率發(fā)生器,時(shí)鐘頻率為11.0592MHz,SMOD=0,波特率為2.4K時(shí),T1的初值為 F

2、AH 。9MCS-51單片機(jī)串行通信時(shí),通常用指令 MOVSBUF,A 啟動(dòng)串行發(fā)送。10MCS-51單片機(jī)串行方式0通信時(shí),數(shù)據(jù)從 P3.0 引腳發(fā)送/接收。二、簡答題 1串行口設(shè)有幾個(gè)控制寄存器?它們的作用是什么?答:串行口設(shè)有2個(gè)控制寄存器,串行控制寄存器SCON和電源控制寄存器PCON。其中PCON中只有PCON.7的SMOD與串行口的波特率有關(guān)。在SCON中各位的作用見下表:SCOND7D6D5D4D3D2D1D0位名稱SM0SM1SM2RENTB8RB8TIRI位地址9FH9EH9DH9CH9BH9AH99H98H功能工作方式選擇多機(jī)通信控制接收 允許發(fā)送 第9位接收 第9位發(fā)送

3、中斷接收 中斷2MCS-51單片機(jī)串行口有幾種工作方式?各自的特點(diǎn)是什么?答:有4種工作方式。各自的特點(diǎn)為:SM0SM1方式功能波特率00方式0移位寄存器方式fosc/1201方式18位異步通信方式可變10方式29位異步通信方式fosc/32或fosc/6411方式39位異步通信方式可變3MCS-51單片機(jī)串行口各種工作方式的波特率如何設(shè)置,怎樣計(jì)算定時(shí)器的初值?答:串行口各種工作方式的波特率設(shè)置:工作方式O:波特率固定不變,它與系統(tǒng)的振蕩頻率fosc的大小有關(guān),其值為fosc/12。工作方式1和方式3:波特率是可變的,波特率=(2SMOD/32)×定時(shí)器T1的溢出率工作方式2:波特

4、率有兩種固定值。當(dāng)SM0D=1時(shí),波特率=(2SM0D/64)×fosc=fosc/32當(dāng)SM0D=0時(shí),波特率=(2SM0D/64)×fosc=fosc/64計(jì)算定時(shí)器的初值計(jì)算:4若fosc = 6MHz,波特率為2400波特,設(shè)SMOD =1,則定時(shí)/計(jì)數(shù)器T1的計(jì)數(shù)初值為多少?并進(jìn)行初始化編程。 答:根據(jù)公式N=256-2SMOD×fosc /(2400×32×12)= 242.98243 =F3HTXDA: MOV TMOD,#20H;置T1定時(shí)器工作方式2 MOV TL1,#0F3H ;置T1計(jì)數(shù)初值. MOV TH1,#0F3H

5、MOV PCON,#80H ;置SMOD =15用8051串行口外接CD4094擴(kuò)展8位并行輸出口,驅(qū)動(dòng)8個(gè)LED發(fā)光二極管。畫出硬件電路圖,編寫程序,使LED發(fā)光二極管從左到右依次閃亮。答:電路圖如下LED發(fā)光二極管從左到右循環(huán)點(diǎn)亮的C51參考程序:#include<reg51.h> /包含51單片機(jī)寄存器定義的頭文件#include<intrins.h> /包含函數(shù)_nop_()定義的頭文件unsigned char code Tab=0x7f,0xbf,0xdf,0xef,0xf7,0xfb,0xfd,0xfe;/流水燈控制碼,該數(shù)組被定義為全局變量sbit P1

6、7=P17;void delay(void) unsigned char m,n; for(m=0;m<200;m+) for(n=0;n<250;n+) ; /*函數(shù)功能:發(fā)送一個(gè)字節(jié)的數(shù)據(jù)*/void Send(unsigned char dat) P17=0; /P1.7引腳輸出鎖存信號(hào),對(duì)cd4094鎖存 nop_(); /延時(shí)一個(gè)機(jī)器周期 _nop_(); /延時(shí)一個(gè)機(jī)器周期,保證鎖存完成 P17=1; /結(jié)束對(duì)cd4094的鎖存 SBUF=dat; /將數(shù)據(jù)寫入發(fā)送緩沖器,啟動(dòng)發(fā)送 while(TI=0) /若沒有發(fā)送完畢,等待 ; TI=0; /發(fā)送完畢,TI被置“1

7、”,需將其清0/*函數(shù)功能:主函數(shù)*/void main(void) unsigned char i; SCON=0x00; /SCON=0000 0000B,使串行口工作于方式0 while(1) for(i=0;i<8;i+) Send(Tabi); /發(fā)送數(shù)據(jù) delay(); /延時(shí) 三、Proteus仿真Proteus仿真1.在Proteus下,仿真實(shí)現(xiàn)6.6節(jié)內(nèi)容。答:全自動(dòng)洗衣機(jī)串行方式時(shí)間顯示Proteus仿真為節(jié)省單片機(jī)并口資源,全自動(dòng)洗衣機(jī)時(shí)間顯示可用串口實(shí)現(xiàn)。一次洗衣時(shí)間一般不會(huì)超過99分鐘,用2位LED數(shù)碼管顯示時(shí)間即可。電路如圖6-9所示。圖6-9 全自動(dòng)洗衣機(jī)

8、串行方式時(shí)間顯示電路 圖6-9中用AT89C51單片機(jī)串行口擴(kuò)展2個(gè)并行口,接2位數(shù)碼管組成顯示電路。串行口工作于方式0,與外接的2片移位寄存器74LS164連接。74LS164是一個(gè)8位串入并出的移位寄存器,功能是接收AT89C51單片機(jī)串行通信口輸出的串行數(shù)據(jù)并轉(zhuǎn)換成并行數(shù)據(jù)輸出,從而驅(qū)動(dòng)LED數(shù)碼管顯示。74LS164的1、2腳為數(shù)據(jù)輸入端,接單片機(jī)串行口的RXD端(P3.0腳),74LS164的第8腳為時(shí)鐘脈沖輸入端(CLK),接單片機(jī)串行口的TXD端(P3.1腳),第9腳R為清零端,低電平清零,正常工作時(shí)接高電平。兩只LED數(shù)碼管采用共陰極靜態(tài)顯示方式。下列程序?qū)崿F(xiàn)串行兩位LED數(shù)碼

9、管時(shí)間顯示,顯示范圍為0099分鐘。使用串行口進(jìn)行信息傳送,程序編寫相當(dāng)簡單,用戶只需將需要顯示的數(shù)據(jù)直接送串口發(fā)送緩沖器,等待串行中斷即可。匯編語言參考程序:ORG 0000H ;在0000H單元存放轉(zhuǎn)移指令LJMP NAIN ;轉(zhuǎn)移到主程序ORG 000BH ;定時(shí)器T0的中斷入口地址 LJMP INTERRUPT ;轉(zhuǎn)移到中斷子程序ORG 0200H ;主程序從0200H開始MAIN: MOV TMOD,#01H ;使用定時(shí)器T0,工作方式1MOV TH0, #3CH ;置初T0值50msMOV TL0, #0B0HH MOV R0,#0 ;用于存1秒的計(jì)數(shù)次數(shù)SETB EA ;開中斷總

10、允許SETB ET0 ;允許T0中斷 SETB TR0 ;啟動(dòng)計(jì)時(shí)LOOP: LCALL Display ;循環(huán)調(diào)用顯示子程序 SJMP LOOPTAB: DB 3FH,06H, 5BH, 4FH, 66H, 6DH, 7DH, 07H, 7FH, 6FH ;09的共陰極段碼DISPLAY: ;顯示子程序(顯示分鐘)MOV DPTR, #TAB ;將表首地址賦給DPTRMOV A, 30H ;將30H中存放的分計(jì)數(shù)賦給累加器AMOV B, #0AH ;將10賦給累加器BDIV AB ;分計(jì)數(shù)除以10得十位數(shù)放在A中,個(gè)位數(shù)放在B中MOVX A, A+DPTR ;查表得十位數(shù)的顯示段碼MOV S

11、BUF, A ;發(fā)送十位數(shù)L1: JBC TI, L2 ;判是否發(fā)送完,未發(fā)完循環(huán)等待,若發(fā)完則轉(zhuǎn)L2SJMP L1L2: MOV A, B ;將個(gè)位數(shù)賦給累加器AMOVX A, A+DPTR ;查表得個(gè)位數(shù)的顯示段碼MOV SBUF, A ;發(fā)送個(gè)位數(shù)L3: JBC TI, L4 ;判是否發(fā)送完,未發(fā)完循環(huán)等待,若發(fā)完則轉(zhuǎn)L4SJMP L3L4: RET ;子程序返回INTERRUPT: ;中斷服務(wù)子程序INC R0 ;每中斷一次(50ms)加1CJNE R0, #20, L5 ;判是否中斷20次,若不是則轉(zhuǎn)L5中斷返回,若是則順序執(zhí)行CLR R0 ;到1秒鐘,清R0INC R1 ;秒計(jì)數(shù)加

12、1CJNE R1, #60, L5 ;判秒是否計(jì)滿60次,若未滿則轉(zhuǎn)L5中斷返回,若滿則順序執(zhí)行CLR R1 ;如果秒計(jì)滿60,將秒計(jì)數(shù)單元內(nèi)容清0INC 30H ;分鐘計(jì)數(shù)單元30H內(nèi)容加1CJNE 30H, #99, L5 ;判分是否計(jì)滿99次,若未滿則轉(zhuǎn)L5中斷返回,若滿則順序執(zhí)行CLR R1 ;如果分計(jì)滿99,將秒計(jì)數(shù)單元內(nèi)容清0CLR 30H ;同時(shí)將分計(jì)數(shù)單元內(nèi)容清0L5: MOV TH0, #3CH ; 定時(shí)器重新賦初值MOV TL0, #0B0HH RETI ;中斷返回C語言參考程序:#include<reg51.h> / 包含51單片機(jī)寄存器定義的頭文件unsig

13、ned char Tab =0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f; /數(shù)組Tab放09的共陰極字段碼unsigned char int_time; /設(shè)中斷次數(shù)計(jì)數(shù)變量unsigned char second; /秒計(jì)數(shù)變量unsigned char minute; /分鐘計(jì)數(shù)變量void delay(void) /延時(shí)函數(shù) unsigned char n,j; /設(shè)計(jì)數(shù)循環(huán)變量for(j=0;j<200;j+); /通過循環(huán)延時(shí)for(n=0;n<200;n+); /通過循環(huán)延時(shí) void DisplayMinute(

14、unsigned char m) /顯示函數(shù) unsigned char ge, si; /定義變量ge、si,用于存放個(gè)位、十位 si=Tabm/10; /計(jì)算出十位的值,查表轉(zhuǎn)換成相應(yīng)的段碼送變量si SBUF=si; /發(fā)送顯示十位while(TI=0); /等待發(fā)送完畢 TI=0; /發(fā)送完后清中斷標(biāo)志 ge=Tabm%10; /計(jì)算出十位的值,查表轉(zhuǎn)換成相應(yīng)的段碼送變量ge SBUF=ge; /發(fā)送顯示個(gè)位while(TI=0); /等待發(fā)送完畢 TI=0; /發(fā)送完后清中斷標(biāo)志 delay(); /調(diào)延時(shí)函數(shù),是數(shù)碼管顯示有一定的亮度 delay(); void main(void

15、) /主函數(shù) TMOD=0x01; /使用定時(shí)器T0,工作方式1 EA=1; /開中斷總允許ET0=1; /允許T0中斷TH0=(65536-46083)/256; /定時(shí)器高八位賦初值(50ms)TL0=(65536-46083)%256; /定時(shí)器低八位賦初值TR0=1; /啟動(dòng)計(jì)時(shí) PCON=0x00; /置SMOD=0 SCON=0x00; /串行口工作在方式0 while(1) /無限循環(huán)體 DisplayMinute(minute); /調(diào)用分鐘顯示子程序 void interserve(void ) interrupt 1 /計(jì)數(shù)器T0中斷函數(shù) int_time+; /每中斷一次

16、(50ms)加1if(int_time=20) / 50ms記20次為1秒(仿真時(shí)可將次數(shù)改小,減少等待時(shí)間)。 int_time=0; /中斷計(jì)數(shù)變量清0 second+; /秒計(jì)數(shù)變量加1 if(second=60) /判是否到了60秒(仿真時(shí)可將次數(shù)改小,減少等待時(shí)間)。 second=0; /如果秒計(jì)滿60,將秒計(jì)數(shù)變量清0 minute+; /分鐘計(jì)數(shù)變量加1 if(minute=99) /判分鐘是否等于99 minute=0; /如果分鐘計(jì)滿99,將分鐘計(jì)數(shù)變量清0秒計(jì)數(shù)變量清0second=0; /將秒計(jì)數(shù)變量清0 TH0=(65536-46083)/256; /定時(shí)器重新賦初值

17、TL0=(65536-46083)%256; 2.在Proteus下,仿真實(shí)現(xiàn)例6-2內(nèi)容。答:電路如圖6-8所示,試編制程序輸入K1K8的狀態(tài)信息,并存入內(nèi)部RAM 40H。 圖6-8 串行通訊方式0應(yīng)用4014 是一個(gè)并入串出轉(zhuǎn)換芯片,Q8端為串行數(shù)據(jù)輸出端,CLK為時(shí)鐘脈沖輸入端,P/S為操作控制端,P/S=1:鎖存并行輸入數(shù)據(jù),P/S=0:允許串行移位操作。要完成題目的要求,應(yīng)先將開關(guān)狀態(tài)鎖存,然后串行傳送給單片機(jī)。在Proteus下畫出電路圖。匯編語言參考程序如下: ORG 0000H ;上電后程序從00000H開始,在0000H單元存放轉(zhuǎn)移指令LJMP KIN ;轉(zhuǎn)移到主程序ORG 0100H ;主程序從0100H開始KIN: MOV SCON,#00H ;設(shè)定串行口為方式0 CLR ES ;禁止串行中斷 SETB P1.0 ;鎖存并行輸入數(shù)據(jù) CLR P1.0 ;允許串行移位操作 SETB REN ;允許并啟動(dòng)接收(TXD發(fā)送移位脈沖) JNB RI,$ ;等待接收完畢 MOV 40H,SBUF ;存入

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(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)論