




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
單片機(jī)應(yīng)用技術(shù)單片機(jī)應(yīng)用技術(shù).z1工程5基于C51單片機(jī)的“串行通信〞模塊1.任務(wù)任務(wù)一:應(yīng)用通用異步收發(fā)器〔UART〕實(shí)現(xiàn)串行通信;任務(wù)二:應(yīng)用通用I/O口“模擬串口〞實(shí)現(xiàn)串行通信;2.要求〔1〕能夠在串口調(diào)試工具窗口中正確顯示輪式教育機(jī)器人的狀態(tài)信息;〔2〕能夠?qū)崿F(xiàn)輪式教育機(jī)器人與PC機(jī)的全雙工串行通信;5.1功能描述本案例模塊的主要內(nèi)容是:利用單片機(jī)的通用異步收發(fā)器〔UART〕或通用I/O口“模擬串口〞實(shí)現(xiàn)點(diǎn)對點(diǎn)的雙機(jī)通信,使輪式教育機(jī)器人能夠與PC機(jī)〔上位機(jī)〕進(jìn)展異步通信,在PC機(jī)上顯示輪式教育機(jī)器人的狀態(tài)信息,通過該工程的學(xué)習(xí)與實(shí)踐,可以讓讀者獲得如下知識(shí)和技能:掌握單片機(jī)通用異步收發(fā)器〔UART〕的根本原理和應(yīng)用方法;掌握超點(diǎn)對點(diǎn)的異步通信協(xié)議和通用I/O口“模擬串口〞編程應(yīng)用技能;5.2必備知識(shí)5.2.1串口通信協(xié)議簡介通信協(xié)議是對數(shù)據(jù)傳送方式的規(guī)定,包括數(shù)據(jù)格式定義和數(shù)據(jù)位定義等,通信雙方必須遵守統(tǒng)一的通信協(xié)議,串行通信協(xié)議包括同步協(xié)議和異步協(xié)議兩種,本章只介紹異步串行通信協(xié)議和異步串行協(xié)議規(guī)定的數(shù)據(jù)傳送格式。1〕起始位:通信線上沒有數(shù)據(jù)被傳送時(shí)處于邏輯1狀態(tài),當(dāng)發(fā)送設(shè)備要發(fā)送一個(gè)字符數(shù)據(jù)時(shí),首先發(fā)出一個(gè)邏輯0信號(hào),這個(gè)邏輯低電平就是起始位。起始位通過通信線傳向接收設(shè)備,接收設(shè)備檢測到這個(gè)邏輯低電平后,就開場準(zhǔn)備接收數(shù)據(jù)位信號(hào)。起始位起的作用就設(shè)備同步,通信雙方必須在傳送數(shù)據(jù)位前協(xié)調(diào)同步。2〕數(shù)據(jù)位當(dāng)接收設(shè)備收到起始位后,緊接著就會(huì)收到數(shù)據(jù)位。數(shù)據(jù)位的位數(shù)可以是5、6、7或8位,.IBM-PC中經(jīng)常采用7位或者8位數(shù)據(jù)傳送,80C51串行口采用8位或9位數(shù)據(jù)傳送。這些數(shù)據(jù)位被承受到移位存放器中,構(gòu)成傳送數(shù)據(jù)字符。在字符數(shù)據(jù)傳送過程中,數(shù)據(jù)位從最低有效位開場發(fā)送,依次順序在承受設(shè)備中被轉(zhuǎn)換為并行數(shù)據(jù)。3〕奇偶校驗(yàn)位數(shù)據(jù)位發(fā)送完之后,可以發(fā)送奇偶校驗(yàn)位。奇偶校驗(yàn)用于有限過失檢測,通過雙方須約定一致的奇偶校驗(yàn)方式。如果選擇偶校驗(yàn),則組成數(shù)據(jù)位和奇偶位的邏輯1的個(gè)數(shù)必須是偶數(shù);如果選擇是奇校驗(yàn),則邏輯1的個(gè)數(shù)必須是奇數(shù)。4〕停頓位在奇偶位或數(shù)據(jù)位〔當(dāng)無奇偶校驗(yàn)時(shí)〕之后發(fā)送的是停頓位。停頓位是一個(gè)字符數(shù)據(jù)的完畢標(biāo)志,可以是1位、位或2位的高電平。接收設(shè)備收到停頓位之后,通信線路上便恢復(fù)邏輯1狀態(tài),直至下一個(gè)字符數(shù)據(jù)的起始位到來。5)波特率設(shè)置通信線上傳輸?shù)乃袨樾盘?hào)都保持一致的信號(hào)持續(xù)時(shí)間,每一位的信號(hào)持續(xù)時(shí)間都由數(shù)據(jù)傳送速度確定,而傳送速度是以每秒多少個(gè)二進(jìn)制位來衡量的,這個(gè)速度叫波特率。如果數(shù)據(jù)以每秒9600個(gè)二進(jìn)制在通信線上傳送,則傳送速度為9600波特,通常記9600b/s,通信雙方必須設(shè)置一樣的波特率。圖5-1異步串行通信數(shù)據(jù)格式5.2.2RS232電平與TTL電平轉(zhuǎn)換在單片機(jī)與PC機(jī)通信時(shí),接口電路必須要進(jìn)展電平轉(zhuǎn)換,因?yàn)镻C機(jī)采用的是RS232標(biāo)準(zhǔn),而單片機(jī)采用的是TTL標(biāo)準(zhǔn),這是其一。第二是單片機(jī)與單片機(jī)之間的串行通信如果采用直接傳輸信息,其傳輸距離一般不超過1.5m,假設(shè)要實(shí)現(xiàn)更遠(yuǎn)距離的通信,則接口電路也必須要進(jìn)展電平轉(zhuǎn)換。RS232標(biāo)準(zhǔn)是1969年由美國電子工業(yè)協(xié)會(huì)〔EIA〕聯(lián)合貝爾系統(tǒng)、調(diào)制解調(diào)器廠家及計(jì)算機(jī)終端生產(chǎn)廠家共同制定的用于串行通訊的標(biāo)準(zhǔn)。它的邏輯“1”電平是-5V--15V,邏輯“0”電平是+5V-+15V。TTL〔Tansistor-TransistorLogic〕,是指三極管-三極管邏輯電路。它規(guī)定:邏輯“0”:<0.4V;邏輯“因此,RS-232不能和TTL電平直接相連,使用時(shí)必須進(jìn)展電平轉(zhuǎn)換,否則將使TTL電路燒壞,為了讓單片機(jī)與PC機(jī)能相互通信,必須讓這兩種電平相互轉(zhuǎn)換。設(shè)計(jì)案例5.3.1系統(tǒng)設(shè)計(jì)方案電平轉(zhuǎn)換可以由分立的三極管電路來完成也可以是采用專用轉(zhuǎn)換芯片來完成。本設(shè)計(jì)案例采用MA*232電平轉(zhuǎn)換芯片構(gòu)成電平轉(zhuǎn)換電路,相對于分立元件構(gòu)成的電平轉(zhuǎn)換電路來說,它具有電路簡單,穩(wěn)定可靠等優(yōu)點(diǎn)。PC機(jī)與單片機(jī)串行通信框圖如圖5-2所示。圖5-2PC機(jī)與單片機(jī)串行通信框圖5.3.2硬件電路設(shè)計(jì)C51單片機(jī)與PC機(jī)通信的接口電路設(shè)計(jì)如圖*-3所示。其中Ma*232是專用的電平轉(zhuǎn)換芯片,與PC機(jī)接口一般采用三線制連接串口,也就是說和PC機(jī)的9針串口只用其中的3根線:分別是第5腳的GND、第2腳的R*D、第3腳的T*D,Ma*232的第9腳和第10腳分別連接到單片機(jī)的R*D和T*D引腳。圖5-3RS232與TTL電平轉(zhuǎn)換電路5.3.3軟件設(shè)計(jì)任務(wù)一、應(yīng)用UART實(shí)現(xiàn)單片機(jī)與PC機(jī)通信本任務(wù)是編程單片機(jī)內(nèi)部的通用異步收發(fā)器〔UART〕,使其發(fā)送和接收數(shù)據(jù),實(shí)現(xiàn)與PC機(jī)〔上位機(jī)〕的異步通信。源程序/*=========================================================程序名:uart.c功能:串口初始化程序、輪式教育機(jī)器人向PC機(jī)〔上位機(jī)〕發(fā)送數(shù)據(jù)〔注:系統(tǒng)晶振頻率為11.0592MHz,波特率設(shè)為9600bps〕===========================================================*/*include<AT89*51.h>*include<stdio.h>*defineOLEN8 //串行發(fā)送緩沖區(qū)大小 unsignedcharostart; //發(fā)送緩沖區(qū)起始索引 unsignedcharoend; //發(fā)送緩沖區(qū)完畢索引 charidataoutbuf[OLEN]; //發(fā)送緩沖區(qū)存儲(chǔ)數(shù)組*defineILEN8 //串行接收緩沖區(qū)大小 unsignedcharistart; //接收緩沖區(qū)起始索引 unsignedchariend; //接收緩沖區(qū)完畢索引 charidatainbuf[ILEN]; //接收緩沖區(qū)存儲(chǔ)數(shù)組bitbdatasendfull; //發(fā)送緩沖區(qū)滿標(biāo)志 bitbdatasendactive; //發(fā)送有效標(biāo)志voiduart_Init();voidmain(void){uart_Init();printf("Helloworld!\n");while(1);}/*串行中斷效勞程序*/staticvoid_isr(void)interrupt4using1{ //接收數(shù)據(jù)charc;if(RI) //接收中斷置位{c=SBUF; //讀字符RI=0; //清接收中斷標(biāo)志if(istart+ILEN!=iend)inbuf[iend++&(ILEN-1)]=c;//緩沖區(qū)接收數(shù)據(jù)} //發(fā)送數(shù)據(jù)if(TI){TI=0; //清發(fā)送中斷標(biāo)志if(ostart!=oend){SBUF=outbuf[ostart++&(OLEN-1)]; //向發(fā)送緩沖區(qū)傳送字符sendfull=0; //設(shè)置緩沖區(qū)滿標(biāo)志位}elsesendactive=0; //設(shè)置發(fā)送無效}}//PUTBUF:寫字符到SBUF或發(fā)送緩沖區(qū)voidputbuf(charc){if(!sendfull) //如果緩沖區(qū)不滿就發(fā)送{if(!sendactive){sendactive=1; //直接發(fā)送一個(gè)字符SBUF=c; //寫到SBUF啟動(dòng)緩沖區(qū)}else{ES=0; //暫時(shí)串行口關(guān)閉中斷outbuf[oend++&(OLEN-1)]=c; //向發(fā)送緩沖區(qū)傳送字符if(((oend^ostart)&(OLEN-1))==0)sendfull=1; //設(shè)置緩沖區(qū)滿標(biāo)志ES=1; //翻開串行口中斷}}}//替換標(biāo)準(zhǔn)庫函數(shù)putchar程序//printf函數(shù)使用putchar輸出一個(gè)字符charputchar(charc){if(c=='\n') //增加新的行{while(sendfull); //等待發(fā)送緩沖區(qū)空putbuf(0*0D); //對新行在LF前發(fā)送CR}while(sendfull);putbuf(c);return(c);}//替換標(biāo)準(zhǔn)庫函數(shù)_getkey程序//getchar和gets函數(shù)使用_getkeychar_getkey(void){charc;while(iend==istart) //判斷接收緩沖區(qū)起始索引是否等于接收緩沖區(qū)完畢索引{;}ES=0;c=inbuf[istart++&(ILEN-1)];ES=1;return(c);}/*初始化串行口和UART波特率函數(shù)*/void_initialize(void){ TMOD|=0*20; //設(shè)置定時(shí)器1工作在方式2,自動(dòng)重載模式SCON=0*50; //設(shè)置串行口工作方式1,即SM0=0,SM1=1,REN=1TH1=0*fd; //波特率9600TL1=0*fd;TR1=1; //啟動(dòng)定時(shí)器 ES=1; //開串行口中斷}voiduart_Init(){_initialize();EA=1; //開總中斷}2、程序運(yùn)行按圖2-5所示的連接電平轉(zhuǎn)換硬件電路,用串口線連接輪式機(jī)器人和PC機(jī)的串口,編譯以上程序,將產(chǎn)生的可執(zhí)行文件燒寫到單片機(jī)程序存儲(chǔ)器,開機(jī)運(yùn)行,在PC機(jī)上翻開串口調(diào)試工具,可以看到在串口調(diào)試窗口顯示“Helloworld!〞3、程序設(shè)計(jì)思路串口初始化函數(shù)及主函數(shù)的程序流程圖如下列圖所示,它描述uart.c的根本設(shè)計(jì)思路。圖5-4串口初始化流程圖 圖5-5主函數(shù)流程圖下面主要通過分析printf()函數(shù)及scanf()的執(zhí)行過程,來加深對串口工作的理解: C51庫函數(shù)中包含有字符的I/O函數(shù),他們通過單片機(jī)串口來工作,這些I/O函數(shù)都依賴于兩個(gè)函數(shù):putchar()函數(shù)和_getkey()函數(shù)。你可以在“C:\ProgramFiles\Keil\C51\LIB〞目錄下找到這兩個(gè)函數(shù)的定義。其中g(shù)etkey()函數(shù)前面加了下劃線“_〞,表示該函數(shù)并不是標(biāo)準(zhǔn)的C庫函數(shù)。uart.h頭文件修改了這兩個(gè)函數(shù)用來滿足自己的需求。例printf(“Hello,world\n〞); printf()函數(shù)調(diào)用putchar()函數(shù)將第一個(gè)字符〔字符‘H’〕發(fā)送到存放器SBUF中;SBUF滿,TI置位,進(jìn)入中斷處理函數(shù)發(fā)送該字符;之后,字符‘H’通過串口線到達(dá)PC機(jī)串口,串口調(diào)試窗口進(jìn)展接收處理,并將字符‘H’在接收區(qū)內(nèi)顯示。 如此往復(fù),直到printf()函數(shù)發(fā)送最后一個(gè)字符‘\n’——回車命令,將光標(biāo)置位在下一行,發(fā)送工作才完畢。整個(gè)發(fā)射流程如示意圖7-4。圖5-6串口發(fā)射流程示意例scanf("%d",&PulseDuration); 當(dāng)你在串口調(diào)試窗口“發(fā)送區(qū)〞內(nèi)寫入整數(shù)1700并點(diǎn)擊“發(fā)送〞按鈕時(shí),調(diào)試窗口會(huì)將字符‘6’〔整數(shù)1700在十六進(jìn)制的表示下為6Ascanf()函數(shù)通過調(diào)用getkey()函數(shù)從單片機(jī)串口處接收字符‘6’,接收緩沖存放器SBUF滿,RI置位,進(jìn)入中斷處理函數(shù),取出字符‘6最后,scanf()函數(shù)再將接收到的數(shù)據(jù),即1700賦給變量PulseDuration。串口接收流程如示意圖7-5。圖5-7串口接收流程示意任務(wù)二、用I/O口“模擬串口〞實(shí)現(xiàn)串行通信在具體應(yīng)用中,有時(shí)串行口的R*D和T*D被占用,此時(shí)也可以用通用I/O口來“模擬〞串口來完成通信,在本任務(wù)中,用輪式機(jī)器人〔上位機(jī)〕的P3_6來模擬串口中的T*D向下位機(jī)發(fā)送控制指令,下位機(jī)是直流電機(jī)控制模塊,它能夠根據(jù)上位機(jī)發(fā)來的控制指令控制直流電機(jī)的旋轉(zhuǎn)方向和速度,關(guān)于直流電機(jī)控制模塊控制原理此處不作介紹,我們這里只要知道根據(jù)上下位機(jī)的通信協(xié)議,如何編程實(shí)現(xiàn)控制命令的發(fā)送就可以了。上下位機(jī)的通信雙方約定如下:1)采用9600bps,8位數(shù)據(jù)位、1位停頓位、無校驗(yàn)位;2)控制命令字采用5字節(jié),如下表所示:頭部(0*AA)電機(jī)設(shè)定:mand速度:Speed時(shí)間:Time尾部(0*BB)如發(fā)送指令“0*AA,0*38,0*ff,0*1f,0*BB〞,可以控制左右兩個(gè)直流電機(jī)全速反轉(zhuǎn)。1、源程序/*=============================================================Imitate.c功能:上位機(jī)程序,能利用通用I/O口作為串行通信口向下位機(jī)發(fā)送控制指令==============================================================*/*include<REG*52.H>*defineucharunsignedchar*defineuintunsignedintsbitbit_T*D=P3^6;sbitbit_R*D=P3^7;bitflag;sbitACC0=ACC^0;sbitACC1=ACC^1;sbitACC2=ACC^2;sbitACC3=ACC^3;sbitACC4=ACC^4;sbitACC5=ACC^5;sbitACC6=ACC^6;sbitACC7=ACC^7;voiddelay_nμs(uinti)//延時(shí):i>=12,i的最小延時(shí)單12us{i=i/10;while(--i);}voiddelay_nms(uintn)//延時(shí)nms{n=n+1;while(--n)delay_nμs(900);//延時(shí)1ms,同時(shí)進(jìn)展補(bǔ)償}voidInt_Timer0()interrupt1using1//定時(shí)器0中斷函數(shù){flag=1;}voidsend_one_byt(char_bit){ACC=_bit;flag=0;bit_T*D=0;TL0=TH0;TR0=1;while(!flag);bit_T*D=ACC0;flag=0;while(!flag);bit_T*D=ACC1;flag=0;while(!flag);bit_T*D=ACC2;flag=0;while(!flag);bit_T*D=ACC3;flag=0;while(!flag);bit_T*D=ACC4;flag=0;while(!flag);bit_T*D=ACC5;flag=0;while(!flag);bit_T*D=ACC6;flag=0;while(!flag);bit_T*D=ACC7;flag=0;while(!flag);bit_T*D=1;flag=0;while(!flag);TR0=0;}voidmain(){uchart;ucharmand[]={0*AA,0*38,0*ff,0*1f,0*BB};TMOD|=0*22; TR0=0; TF0=0; TL0=(255-96);TH0=TL0;ET0=1; EA=1; for(t=0;t<5;t++)send_one_byt(mand[t]);while(1);}2、程序運(yùn)行連接輪式機(jī)器人控制板〔上位機(jī)〕單片機(jī)的P3_6引腳和直流電機(jī)控制模塊〔下位機(jī)〕的R*D端,編譯以上程序,將產(chǎn)生的可執(zhí)行文件燒寫到上位機(jī)單片機(jī)程序存儲(chǔ)器〔下位機(jī)已經(jīng)準(zhǔn)備就緒〕,開機(jī)運(yùn)行,可見連接直流電機(jī)控制模塊的兩個(gè)直流電機(jī)開場全速反轉(zhuǎn)。3、程序設(shè)計(jì)思路下面簡要分析以上程序中用通用I/O口模擬串口的根本思路,主函數(shù)及發(fā)送子函數(shù)的程序流程圖如下:圖5-8主函數(shù)流程圖圖5-9發(fā)送子函數(shù)流程圖 因?yàn)樵O(shè)計(jì)定波特率為9600bps,即每秒傳送9600位(bit)數(shù)據(jù),則每傳送1位數(shù)據(jù)所需的時(shí)間為1s/9600=104.167us,因此,要用P3_6引腳模擬T*D,關(guān)鍵要保證每隔104.167us往P3_6引腳傳送1位數(shù)據(jù),程序中采用定時(shí)中斷完成104.167us延時(shí),定時(shí)器是對機(jī)器周期進(jìn)展計(jì)數(shù),而機(jī)器周期T=12/fosc=12/11.0592MHz,為延時(shí)104.167us,設(shè)定時(shí)器需計(jì)數(shù)*個(gè)機(jī)器周期,則有:T**=104.167us→*=104.167*11.0592/12=96,所以,定時(shí)器初值應(yīng)設(shè)為255-96。5.4相關(guān)知識(shí)通過上述案例學(xué)習(xí)和實(shí)踐,在對單片機(jī)通用異步收發(fā)器〔UART〕的編程應(yīng)用有了直觀認(rèn)識(shí)之后,我們下面再來介紹有關(guān)單片機(jī)UART更詳細(xì)的內(nèi)容。AT89C51單片機(jī)串行口構(gòu)造AT89C51單片機(jī)UART內(nèi)部構(gòu)造框圖如下列圖所示。圖5-10通用異步收發(fā)器內(nèi)部框圖5.4.2與串行通信有關(guān)的特殊功能存放器數(shù)據(jù)緩沖器SBUF串行口緩沖器SBUF是可直接尋址的特殊功能存放器,其內(nèi)部RAM字節(jié)地址是99H。在物理上,它對應(yīng)著兩個(gè)獨(dú)立的存放器,一個(gè)發(fā)送存放器,一個(gè)接收存放器。發(fā)送時(shí):CPU執(zhí)行一條寫SBUF指令便啟動(dòng)了串行口發(fā)送,數(shù)據(jù)從T*D〔P3.1〕輸出。在指令執(zhí)行期間,CPU送來“寫SBUF〞信號(hào),將并行數(shù)據(jù)送入SBUF,并啟動(dòng)發(fā)送控制器。從T*D端逐位輸出一幀信息。一幀信息發(fā)送完畢后,發(fā)送控制器硬件置中斷標(biāo)志TI=1,向CPU申請中斷,通知CPU可以發(fā)送下一個(gè)數(shù)據(jù)。接收時(shí):就是讀取SBUF的過程,外界數(shù)據(jù)通過R*D〔P3.0〕輸入,輸入數(shù)據(jù)先進(jìn)入移位存放器,再送入接收SBUF。在接收器中采用了雙緩沖構(gòu)造,以防止在接收到第二幀數(shù)據(jù)之前,CPU來不及響應(yīng)前一幀中斷請求,而造成兩幀數(shù)據(jù)重疊的錯(cuò)誤。串行口控制存放器SCONSCON可以位尋址。復(fù)位時(shí),SCON所有位均清“0”。SM0、SM1:由軟件置位或清零,用于選擇串行口四種工作方式。表5-1串行口的工作方式SM0SM1工作方式功能波特率00方式0同步移位存放器fosc/1201方式110位通用異步收發(fā)器由定時(shí)器控制10方式211位通用異步收發(fā)器fosc/32或fosc/6411方式311位通用異步收發(fā)器由定時(shí)器控制SM2:多機(jī)通信控制位。REN:允許串行接收控制位。假設(shè)REN=0,則制止接收;REN=1,則允許接收,該位由軟件置位或復(fù)位。TB8:發(fā)送數(shù)據(jù)D8位。在方式2和方式3時(shí),TB8為所要發(fā)送的第9位數(shù)據(jù)。在多機(jī)通信中,以TB8位的狀態(tài)表示主機(jī)發(fā)送的是地址還是數(shù)據(jù):TB8=0為數(shù)據(jù),TB8=1為地址;也可用作數(shù)據(jù)的奇偶校驗(yàn)位。該位由軟件置位或復(fù)位。RB8:接收數(shù)據(jù)D8位。在方式2和方式3時(shí),接收到的第9位數(shù)據(jù),可作為奇偶校驗(yàn)位或地址幀或數(shù)據(jù)幀的標(biāo)志。方式1時(shí),假設(shè)SM2=0,則RB8是接收到的停頓位。在方式0時(shí),不使用RB8位。TI:發(fā)送中斷標(biāo)志位。在方式0時(shí),當(dāng)發(fā)送數(shù)據(jù)第8位完畢后,或在其它方式發(fā)送停頓位后,由內(nèi)部硬件使TI置位,向CPU請求中斷。CPU在響應(yīng)中斷后,必須用軟件清零。TI可供查詢。RI:接收中斷標(biāo)志位。在方式0時(shí),當(dāng)接收數(shù)據(jù)的第8位完畢后,或在其它方式接收到停頓位后,由內(nèi)部硬件使RI置位,向CPU請求中斷。同樣,在CPU響應(yīng)中斷后,也必須用軟件清零。RI也可供查詢。電源控制存放器PCON與串行口有關(guān)的位是:SMOD為波特率倍增位。當(dāng)SMOD=1時(shí),波特率加倍串行口的工作方式1、方式0在方式0下,串行口作同步移位存放器用,以8位數(shù)據(jù)為一幀,先發(fā)送或接收最低位,波特率為fosc/12,即每個(gè)機(jī)器周期發(fā)送或接收一位,。串行數(shù)據(jù)由R*D〔P3.0〕端輸入或輸出。同步移位脈沖由T*D〔P3.1〕端送出。這種方式常用于擴(kuò)展I/O口。發(fā)送時(shí),當(dāng)一個(gè)數(shù)據(jù)寫入發(fā)送緩沖器SBUF〔99H〕,串行口即把8位數(shù)以fosc/12的波特率從R*D端送出,發(fā)送完置中斷標(biāo)志TI為“1”。接收時(shí),REN是允許接收控制位。REN=0,制止接收;REN=1,允許接收。當(dāng)軟件置REN為“1〞時(shí),即開場從R*D端以fosc/12的波特率輸入數(shù)據(jù),當(dāng)接收到8位數(shù)據(jù)時(shí),置中斷標(biāo)志RI為“1〞。CPU響應(yīng)TI或RI中斷請求時(shí),不會(huì)去除TI或RI標(biāo)志,必須由用戶用軟件清“0”。方式0時(shí),SM2位必須為0。2、方式1在方式1下,串行口為10位通用異步接口。發(fā)送或接收一幀數(shù)據(jù),包括1位起始位“0〞、8位數(shù)據(jù)位和1位停頓位“1〞,傳送波特率可調(diào)。發(fā)送時(shí),數(shù)據(jù)從引腳T*D〔P3.1〕端輸出,當(dāng)數(shù)據(jù)寫入發(fā)送緩沖器SBUF時(shí),就啟動(dòng)發(fā)送器發(fā)送。發(fā)送完一幀數(shù)據(jù)后,把TI標(biāo)志置“1”,并申請中斷,通知CPU可以發(fā)送下一個(gè)數(shù)據(jù)。接收時(shí),使REN置“1〞允許接收,串行口采樣引腳R*D〔P3.0〕。當(dāng)采樣到1至0的跳變時(shí),確認(rèn)是起始位“0〞,就開場接收一幀數(shù)據(jù)。當(dāng)停頓位到來之后把停頓位送入RB8位,中斷標(biāo)志RI置“1〞,申請中斷,通知CPU從SBUF取走接收到的一個(gè)數(shù)據(jù)。3、方式2方式2下串行口為11位異步通信接口。發(fā)送或接收一幀信息包括1位起始位“0”、8位數(shù)據(jù)位、1位可編程位和1位停頓位“1”。其信息傳送波特率與SMOD〔波特率倍增位〕有關(guān)。方式2的波特率為fosc/32〔SMOD=1時(shí)〕或fosc/64〔SMOD=0時(shí)〕。方式2發(fā)送、接收數(shù)據(jù)的過程與方式1根本一樣,所不同的僅在于對第9位數(shù)據(jù)的處理上。發(fā)送時(shí),第9位數(shù)據(jù)由SCON中的TB8位提供。接收數(shù)據(jù)時(shí),當(dāng)?shù)?位數(shù)據(jù)移入移位存放器后,將8位數(shù)據(jù)裝入SBUF,第9位數(shù)據(jù)裝入SCON中的RB8。發(fā)送前,先根據(jù)通信協(xié)議由軟件設(shè)置TB8〔如作奇偶校驗(yàn)位或地址/數(shù)據(jù)標(biāo)識(shí)位〕,然后將要發(fā)送的數(shù)據(jù)寫入SBUF即能啟動(dòng)發(fā)送器。發(fā)送過程是由執(zhí)行“寫SBUF〞指令把8位數(shù)據(jù)裝入SBUF,同時(shí)把TB8裝到發(fā)送移位存放器的第9位上,并通知發(fā)送控制器要求進(jìn)展一次發(fā)送,然后從T*D〔P3.1〕端輸出一幀數(shù)據(jù)。在接收時(shí),先置REN為“1〞,同時(shí)還要將RI清“0〞。在滿足這個(gè)條件的前提下,再根據(jù)SM2的狀態(tài)和所接收到的RB8的狀態(tài)決定此串行口在信息到來后是否會(huì)使RI置“1,并申請中斷,接收數(shù)據(jù)。當(dāng)SM2=0時(shí),不管RB8為“0”還是為“1”,RI都置“1”,此串行口將接收發(fā)來的信息。當(dāng)SM2=1,且RB8為“1”時(shí),表示在多機(jī)通信情況下,接收的信息為地址幀,此時(shí)RI置“1”。串行口將接收發(fā)來的地址。當(dāng)SM2=1,且RB8為“0”時(shí),表示接收的信息為數(shù)據(jù)幀,但不是發(fā)給本從機(jī)的,此時(shí)RI不置“1”,因而SBUF中所接收的數(shù)據(jù)幀將喪失。4、方式3方式3為波特率可變的11位異步通信方式。除波特率外,方式3和方式2完全一樣。各種工作方式下的波特率設(shè)置串行口的4種工作方式對應(yīng)著三種波特率模式。對于方式0,波特率是固定的,波特率=fosc/12。對于方式2,波特率由振蕩頻率fosc和SMOD(PCON.7)所決定。其對應(yīng)公式為波特率=2SMOD×fosc/64當(dāng)SMOD=0時(shí),波特率為fosc/64;當(dāng)SMOD=1時(shí),波特率為fosc/32。對于方式1和方式3,波特率由定時(shí)器/計(jì)數(shù)器T1的溢出率和SMOD決定,即由下式確定:波特率=2SMOD×T1溢出率/32通常波特率是根據(jù)通信要求已選取好了的,要計(jì)算的是滿足通信波特率的定時(shí)器1的初
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(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ǔ)空間,僅對用戶上傳內(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 專題5.3 平面向量的數(shù)量積(原卷版)-2024年高考數(shù)學(xué)一輪復(fù)習(xí)精講精練寶典(新高考專用)
- 幼兒游戲教學(xué)案例
- 人教版(2024)七年級(jí)英語下冊Unit 6 學(xué)情調(diào)研測試卷(含答案)
- 路基拼寬施工方案
- 隧道風(fēng)機(jī)房施工方案
- 2025年新高考地理全真模擬試卷4(含答案解析)
- 2025年高考地理二輪復(fù)習(xí):綜合題答題技巧(含練習(xí)題及答案)
- 幕墻防火防雷施工方案
- Unit 6 reading2 教學(xué)設(shè)計(jì) 2024-2025學(xué)年譯林版(2024)七年級(jí)英語上冊
- 小學(xué)課本劇一年級(jí)《小白兔和小灰兔》-劇本
- 2024兒童腎病綜合征指南診斷與治療(附表)
- 卵巢癌的健康宣教
- DB45T 2758-2023 小型水利工程施工質(zhì)量管理與評(píng)定規(guī)范
- 中建測評(píng)二測題庫
- 店長管理員工培訓(xùn)
- DB11∕T 3010-2018 冷鏈物流冷庫技術(shù)規(guī)范
- 愛普生L4168說明書
- 現(xiàn)代家政導(dǎo)論-課件 2.2家庭制度認(rèn)知
- 題型專訓(xùn):平方差公式和完全平方公式
- 內(nèi)容審核機(jī)制
- 《網(wǎng)絡(luò)營銷》試題及答案2
評(píng)論
0/150
提交評(píng)論