通信接口選型及應(yīng)用課件_第1頁(yè)
通信接口選型及應(yīng)用課件_第2頁(yè)
通信接口選型及應(yīng)用課件_第3頁(yè)
通信接口選型及應(yīng)用課件_第4頁(yè)
通信接口選型及應(yīng)用課件_第5頁(yè)
已閱讀5頁(yè),還剩107頁(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)介

基本概念:串行通信和并行通信MCS-51系列單片機(jī)串行通信計(jì)算機(jī)1GND計(jì)算機(jī)2GND并行通信計(jì)算機(jī)1GND計(jì)算機(jī)2GND發(fā)送接收串行通信并行通信:數(shù)據(jù)的各位同時(shí)傳送;串行通信:數(shù)據(jù)一位一位順序傳送?;靖拍睿篗CS-51系列單片機(jī)串行通信并行通信發(fā)送接收串1串行、并行通信各自特點(diǎn)并行/串行:并行方式可一次同時(shí)傳送N位數(shù)據(jù),而串行方式一次只能傳送一位;但并行傳送的線路復(fù)雜(需要N根數(shù)據(jù)線),串行傳送的線路簡(jiǎn)單(只需要1~2根數(shù)據(jù)線);并行方式常用于短距離通信,串行方式則多用于長(zhǎng)距離通信。串行傳送主要用于計(jì)算機(jī)與遠(yuǎn)程終端之間的數(shù)據(jù)傳送,也很適合于經(jīng)由公共電話網(wǎng)連接的計(jì)算機(jī)之間的通信。另外在某些場(chǎng)合,串行接口也可代替并行接口來(lái)控制外設(shè),以節(jié)省軟硬件資源,簡(jiǎn)化線路。串行、并行通信各自特點(diǎn)并行/串行:并行方式可一次同2串行通信的分類(lèi):異步(AsynchronousCommunication)同步(SynchronousCommunication)

串行通信制式:?jiǎn)喂?a)、半雙工(b)和全雙工(c)(simplexhalfduplexfullduplex)發(fā)送器A站接收器B站單工通信(a)發(fā)收A站發(fā)收B站發(fā)收A站發(fā)收B站(b)(c)串行通信的分類(lèi):異步(AsynchronousCommun3同步、異步數(shù)據(jù)通信格式數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)……數(shù)據(jù)數(shù)據(jù)……同步字符同步字符1同步字符2圖6.1同步傳送的數(shù)據(jù)格式1100/10/10/10/10/10/10/10/10/1111起始位停止位奇偶校驗(yàn)8位數(shù)據(jù)空閑位空閑位第n個(gè)字符100/10/1起始位第n+1個(gè)字符0/10/1圖6.2異步通信數(shù)據(jù)幀格式同步、異步數(shù)據(jù)通信格式數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)……數(shù)據(jù)數(shù)據(jù)……同步字符同4同步通訊異步通信的概念

同步和異步都屬于串行數(shù)據(jù)傳送方式,但二者的傳送格式有所不同。同步方式的一幀內(nèi)含有很多數(shù)據(jù)位,而異步方式一幀內(nèi)只含有幾個(gè)數(shù)據(jù)位。如果要傳送一大堆數(shù)據(jù),同步方式只給這串?dāng)?shù)據(jù)進(jìn)行一次外包裝(即添加“頭幀”、“尾幀”、“校驗(yàn)”幀),而異步方式在傳送這串?dāng)?shù)據(jù)時(shí)則要對(duì)數(shù)據(jù)的每一個(gè)字節(jié)分別加以包裝(即添加“頭”位、“尾”位和校驗(yàn))。

顯然在相同的數(shù)據(jù)傳輸波特率下,同步方式比異步方式的傳送速度快,但同步方式要求收發(fā)雙方在整個(gè)事件傳送過(guò)程中始終保持嚴(yán)格同步,這將增加硬件上的難度,而異步通信只要求每幀(字節(jié))的傳送中短時(shí)間保持同步即可,實(shí)現(xiàn)起來(lái)要容易得多。同步通訊異步通信的概念同步和異步都屬于串行數(shù)據(jù)傳送5MCS-51串行接口的結(jié)構(gòu)SBUFSBUF發(fā)送控制接收控制發(fā)送端口接收端口≥1波特率控制TXDRXDDBDBTIRI串行中斷寫(xiě)SBUF讀SBUF1.數(shù)據(jù)緩沖寄存器SBUF兩個(gè)SBUF,一個(gè)用于發(fā)送(只寫(xiě));一個(gè)用于接收(只讀)。映象地址均為99H。2.數(shù)據(jù)發(fā)送與接收控制發(fā)送控制器在波特率作用下,將發(fā)送SBUF中的數(shù)據(jù)由并到串,一位位地傳輸?shù)桨l(fā)送端口;接收控制器在波特率作用下,將接收接收端口的數(shù)據(jù)由串到并,存入接收SBUF中。MCS-51串行接口的結(jié)構(gòu)SBUFSBUF發(fā)送控制接收控制發(fā)6MCS-51的串行接口概述有一個(gè)可編程全雙工串行通信接口(UART)(UniversalAsychronousReceiver/Transmitter

)管腳:TXD(P3.1)、RXD(P3.0)可同時(shí)發(fā)送、接收數(shù)據(jù)(Transmit/Receive)有四種工作方式,幀格式有8、10、11位。波特率(Baudrate)可設(shè)置

波特率:每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),也叫比特?cái)?shù),單位為b/s,即位/秒。MCS-51的串行接口概述7MCS-51串行接口寄存器SBUF——串行口數(shù)據(jù)緩沖器共兩個(gè):一個(gè)發(fā)送寄存器SBUF,一個(gè)接收SBUF,二者共用一個(gè)地址99H。SCON——串行口控制寄存器PCON——電源及波特率選擇寄存器MCS-51串行接口寄存器SBUF——串行口數(shù)據(jù)緩沖器8控制寄存器SCONSM0SM1SM2RENTB8RB8TIRI工作方式選擇多機(jī)通信控制位允許串行接收位接收數(shù)據(jù)的第9位發(fā)送數(shù)據(jù)的第9位接收中斷標(biāo)志發(fā)送中斷標(biāo)志9FH9EH9DH9CH9BH9AH99H98H控制寄存器SCONSM0SM1SM2RENTB8RB8TIR9SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可變10方式211位UARTfosc/64或fosc/3211方式311位UART可變串行方式的定義例:設(shè)串行口工作在方式1,允許接收,則指令為:MOVSCON,#01010000BSM0SM1工作方式功能波特率00方式08位同10串行通信只用該位,為1時(shí),波特率×2;為0時(shí)不變。SMOD×××GF1GF0PDIDL87H電源及波特率選擇寄存器PCON串行通信只用該位,為1時(shí),波特率×2;為0時(shí)不變。SMOD×11方式的選擇由SM1、SM0實(shí)現(xiàn)。工作方式功能說(shuō)明波特率方式08位同步移位寄存器常用于擴(kuò)展I/O口fosc/12方式110位UART8位數(shù)據(jù)、起始位、結(jié)束位可變(取決于定時(shí)器1溢出率)方式211位UART8位數(shù)據(jù)、起始位0、結(jié)束位1和奇偶校驗(yàn)位fosc/64或fosc/32方式311位UART數(shù)據(jù)、起始、校驗(yàn)、結(jié)束位可變(取決于定時(shí)器1溢出率)串行口四種工作方式應(yīng)用比較方式的選擇由SM1、SM0實(shí)現(xiàn)。工作方式功能說(shuō)明波特率方式012在方式0下,串行口作同步移位寄存器用,其波特率固定為fosc/12。串行數(shù)據(jù)從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式常用于擴(kuò)展I/O口。方式0用于擴(kuò)展I/O口輸出方式0在方式0下,串行口作同步移位寄存器用,其波特率固定為13方式0用于擴(kuò)展I/O輸出口原理

串行數(shù)據(jù)從RXD引腳輸出,TXD引腳輸出移位脈沖。CPU將數(shù)據(jù)寫(xiě)入發(fā)送寄存器SBUF時(shí),立即啟動(dòng)發(fā)送,將8位數(shù)據(jù)以Fosc/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送標(biāo)志TI由硬件置位。例:?jiǎn)纹瑱C(jī)串行口方式設(shè)為移位寄存器方式,外接6片74LS164作為6位LED顯示器的靜態(tài)顯示接口。方式0用于擴(kuò)展I/O輸出口原理串行數(shù)據(jù)從R14串口方式0應(yīng)用入口:把要顯示的數(shù)分別放在顯示緩沖區(qū)60H-65H共6個(gè)單元中,并且分別對(duì)應(yīng)各個(gè)數(shù)碼管LED0-LED5。出口:將預(yù)置在顯示緩沖區(qū)中的6個(gè)數(shù)成相應(yīng)的顯示字形碼,然后輸出到顯示器中顯示。DISP: MOVSCON,#00H;初始化串行口方式0 MOVR1,#06H ;顯示6位數(shù) MOVR0,#65H ;60H-65H為顯示緩沖區(qū)MOVDPTR,#SEGTAB ;字形表的入口地址LOOP:MOVA,@R0;取最高位的待顯示數(shù)據(jù)MOVCA,@A+DPTR ;查表獲取字形碼MOV SBUF,A ;送串口顯示DELAY: JNBTI,DELAY ;等待發(fā)送完畢CLRTI ;清發(fā)送標(biāo)志DECR0 ;指針下移一位,準(zhǔn)備取下一個(gè)待顯示數(shù)DJNZR1,LOOP ;直到6個(gè)數(shù)據(jù)全顯示完。RETSETTAB: ;字形表,DB03H9FH27H0DH99H49H41H1FH01H09H0FFH串口方式0應(yīng)用入口:把要顯示的數(shù)分別放在顯示緩沖區(qū)60H-615方式0用于擴(kuò)展I/O口輸入方式0用于擴(kuò)展I/O輸入口原理方式0用于擴(kuò)展I/O口輸入方式0用于擴(kuò)展I/O輸入口原理16方式0用于擴(kuò)展I/O輸入口原理輸入:RXD為串行輸入端,TXD仍為同步脈沖移位輸出端。當(dāng)(RI)=0且(REN)=1時(shí)開(kāi)始接受。當(dāng)接受到第8位數(shù)據(jù)時(shí),將數(shù)據(jù)亦如接收寄存器,并由硬件置位RI。例:利用串行口擴(kuò)展了1片74LS165,從而實(shí)現(xiàn)了8個(gè)按鍵的輸入,在單片機(jī)的P1口連接了8個(gè)LED發(fā)光二極管,程序中實(shí)現(xiàn)了用按鍵控制發(fā)光二極管的亮與滅。流程為8路開(kāi)關(guān)-74165-3PIN數(shù)據(jù)線-8路指示燈。由此可以看出通過(guò)165傳輸,只用了3條數(shù)據(jù)線,就實(shí)現(xiàn)了8個(gè)開(kāi)關(guān)控制8個(gè)燈的目的。從而節(jié)約了控制的連線。方式0用于擴(kuò)展I/O輸入口原理輸入:RXD為串行輸入端,TX17串口方式0擴(kuò)展輸入口應(yīng)用接線方法:1用一個(gè)4PIN數(shù)據(jù)排線一端插入CPU部分JP53(P3口)的P3.0,P3.1,P3.2,P3.3。另外一端插入74LS165部分的輸入端JP21。2用一根8PIN的數(shù)據(jù)排線,一端插入74LS165部分的輸出端JP28,另一端插入8路按鍵開(kāi)關(guān)的的JP48。3用一條8PIN的數(shù)據(jù)排線把CPU部份的P1口(JP44)連接到八路指示燈部份的JP32。運(yùn)行后分別按k00-k07,可以看到d00-d07八個(gè)燈受控制串口方式0擴(kuò)展輸入口應(yīng)用接線方法:18程序清單org00hloop:movscon,#00010000b;設(shè)定sm0sm1=00,mode0clrp3.2;P3.2=0載入數(shù)據(jù)calldelay1 ;延時(shí)setbp3.2;P3.2=1

;數(shù)據(jù)輸出clrri ;RI=0loop1:jbcri,loop2;RI=1?是則到LOOP2jmploop1 ;否則繼續(xù)監(jiān)測(cè)loop2:mova,sbuf ;將SUBF載入ACCmovp1,a ;輸出到P1jmploop;重新開(kāi)始程序清單org00h19delay: mov r7,#00h ;延時(shí)子程序tt: mov r6,#00h djnz r6,$ djnz r7,tt retdelay1:;短延時(shí)子程序movr7,#02djnzr7,$retenddelay:201.方式0:移位寄存器方式寫(xiě)SBUF內(nèi)部移出脈沖RXD(數(shù)據(jù)輸出)TXD(移位時(shí)鐘)TID0D1D2D3D4D5D6D7方式0發(fā)送時(shí)序?qū)慡CON,清RI,置REN內(nèi)部移出脈沖RIRXD(數(shù)據(jù)輸入)TXD(移位時(shí)鐘)D0D1D2D3D4D5D6D7方式0接收時(shí)序方式0時(shí)序1.方式0:移位寄存器方式寫(xiě)SBUF內(nèi)部移出脈沖RXD(數(shù)據(jù)21方式1串行口為波特率可調(diào)的10位通用異步接口UART。每發(fā)送或接收的一幀信息中,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。方式1串行口為波特率可調(diào)的10位通用異步接口UART。每發(fā)送22方式1時(shí)序

一幀數(shù)據(jù)為10位:1位起始位、8位數(shù)據(jù)位和1位停止位。寫(xiě)SBUFTXD起始位停止位TID0D1D2D3D4D5D6D7方式1發(fā)送時(shí)序:起始位停止位RXDRI采樣時(shí)間D0D1D2D3D4D5D6D7方式1接收時(shí)序:方式1時(shí)序方式1時(shí)序?qū)慡BUFTXD起始位停止位TID0D1D2D3D23方式21、串行口為11位UART,傳送波特率與SMOD有關(guān)。發(fā)送或接收的一幀數(shù)據(jù)中包括1位起始位0,8位數(shù)據(jù)位,1位可編程位(用于奇偶校驗(yàn))和1位停止位1。方式21、串行口為11位UART,傳送波特率與SMOD有24方式3

方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。方式3方式3為波特率可變的11位UART通信方式,除25MCS-51串行口的波特率1.方式0和方式2的波特率是固定的在方式2中,波特率取決于PCON中的SMOD值:當(dāng)SMOD=0時(shí),波特率為fosc/64;當(dāng)SMOD=1時(shí),波特率為fosc/32.即波特率=。oscSMODf642在方式0中,波特率為時(shí)鐘頻率的1/12,即fosc/12,固定不變MCS-51串行口的波特率1.方式0和方式2的波特率是固定的262.方式1和方式3的波特率可變,由定時(shí)器1的溢出率決定波特率/(b/s)fosc/MHzSMOD定時(shí)器1C/模式初始值方式0:1M方式2:375k方式1、3:62.5k19.2k9.6k4.8k2.4k1.2k137.5k11011012121211.05911.05911.05911.05911.05911.986612×1110000000××000000000××222222221××FFHFDHFDHFAHF4HE8H1DH72HFEEBHT波特率=2.方式1和方式3的波特率可變,由定時(shí)器1的溢出率決定波特27方式0:波特率是固定的,為fosc/12方式2:SMOD=1時(shí)為fosc/32,SMOD=0時(shí)為fosc/64方式1和方式3:波特率=2SMODT1溢出率/32T1溢出率=fosc/[3212(28-N)],N為定時(shí)器T1的計(jì)數(shù)初值例:要求串行口以方式1工作,通信波特率為2400b/s,設(shè)振蕩頻率fosc為6MHz,請(qǐng)初始化T1和串口。解:若選SMOD=1,則T1時(shí)間常數(shù)N=256-216106/(3842400)=242.98≈243=F3H則,定時(shí)器T1和串行口的初始化程序如下: MOV TMOD,#20H ;設(shè)置T1為方式2 MOV TH1,#0F3H ;置時(shí)間常數(shù) MOV TL1,#0F3H SETB TR1 ;啟動(dòng)T1 ORL PCON,#80H ;SMOD=1 MOV SCON,#50H ;設(shè)串行口為方式1設(shè)置通訊波特率方式0:波特率是固定的,為fosc/12設(shè)置通訊波特率28串行通信接口標(biāo)準(zhǔn)1.RS-232C通信接口接口信號(hào):9針D型頭1569載波檢測(cè)DCD接收數(shù)據(jù)RXD發(fā)送數(shù)據(jù)TXD數(shù)據(jù)終端就緒信號(hào)地GND數(shù)據(jù)裝置就緒請(qǐng)求發(fā)送RTS清除發(fā)送CTS振鈴指示MCS-51系列單片機(jī)串行通信接口串行通信接口標(biāo)準(zhǔn)1569載波檢測(cè)DCD接收數(shù)據(jù)RXD發(fā)送數(shù)據(jù)29電氣特性:邏輯“1”:-3V~-15V;邏輯“0”:+3V~+15V。傳輸距離≤15米。最大負(fù)載電容≤2500pF。波特率≤20kb/s。接受器輸入阻抗:3~7kΩ。驅(qū)動(dòng)器輸出阻抗≤300Ω。驅(qū)動(dòng)器轉(zhuǎn)換速率≤30V/μs。輸出短路電流≤0.5A。RS232特性電氣特性:RS232特性30電平轉(zhuǎn)換單片機(jī)電平是TTL電平,它與RS-232C電平不兼容,必須進(jìn)行電平轉(zhuǎn)換。電平轉(zhuǎn)換的電路很多,MAX232是一種新型的專(zhuān)用集成電路,類(lèi)似的集成電路還很多。C1+C1-C2+C2-VCCV+V-電壓倍增器+5V~+10V電壓反向器+10V~-10V1111+5VT1OUTT2OUTR1OUTR2OUTT1INT2INR1INR2INC1C2C3C4TTL/CMOS輸入TTL/CMOS輸出RS-232C輸出RS-232C輸入MAX232C2-V-C1+V+C1-C2+T2OUTR2INR2OUTT2INT1INR1OUTR1INT1OUTVCCGND12345678910161514131211RS232電平轉(zhuǎn)換芯片電平轉(zhuǎn)換C1+C1-C2+C2-VCCV+V-電壓倍增器電31PC機(jī)COM口接8051機(jī)11p(TXD)10p(RXD)PC機(jī)和單片機(jī)串口通訊的硬件電路

PC機(jī)COM口接8051機(jī)11p(TXD)PC機(jī)和單片機(jī)串口32⒉RS-422A通信接口接口信號(hào):9針D型頭電氣特性電平轉(zhuǎn)換3.RS-485通信接口:將RS-422A的發(fā)送數(shù)據(jù)信號(hào)正端與接收數(shù)據(jù)信號(hào)正端連起來(lái),發(fā)送數(shù)據(jù)信號(hào)負(fù)端與接收數(shù)據(jù)信號(hào)負(fù)端連起來(lái)就成為RS-485通信接口1569發(fā)送數(shù)據(jù)負(fù)TX-發(fā)送數(shù)據(jù)正TX+接收數(shù)據(jù)正RX+接收數(shù)據(jù)負(fù)RX-信號(hào)地GND請(qǐng)求發(fā)送負(fù)RTS-清除發(fā)送正CTS+請(qǐng)求發(fā)送負(fù)RTS+清除發(fā)送負(fù)CTS–MCS-51系列單片機(jī)串行通信接口⒉RS-422A通信接口1569發(fā)送數(shù)據(jù)負(fù)TX-發(fā)送數(shù)據(jù)正33接口性能RS-232CRS-422ARS-485功能雙向,全雙工雙向,全雙工雙向,半雙工傳輸方式單端差分差分邏輯“0”電平3V~15V2V~6V1.5V~6V邏輯“1”電平-3V~-15V-2V~-6V-1.5V~-6V最大速率20kb/s10Mb/s10Mb/s最大距離30m1200m1200m驅(qū)動(dòng)器加載輸出電壓±5V~±15V±2V±1.5V接受器輸入敏感度±3V±0.2V±0.2V接收器輸入阻抗3~7KΩ>4KΩ>7KΩ組態(tài)方式點(diǎn)對(duì)點(diǎn)1臺(tái)驅(qū)動(dòng)器:10臺(tái)接收器32臺(tái)驅(qū)動(dòng)器:32臺(tái)接收器抗干擾能力弱強(qiáng)強(qiáng)傳輸介質(zhì)扁平或多芯電纜二對(duì)雙絞線一對(duì)雙絞線RS232、RS422、RS485對(duì)比接口RS-232CRS-422ARS-485功能雙向,全346.3PC機(jī)與單片機(jī)通信PC機(jī)是國(guó)內(nèi)目前使用應(yīng)用最廣泛的微機(jī),在與單片機(jī)串行接口后,可以方便地構(gòu)成主從分布式多機(jī)系統(tǒng)。從機(jī)(單片機(jī))作數(shù)據(jù)采集或?qū)崟r(shí)控制,主機(jī)作數(shù)據(jù)處理或中央管理等。這種多機(jī)系統(tǒng)在過(guò)程控制、儀表生產(chǎn)、生產(chǎn)自動(dòng)化和企業(yè)管理等方面都有廣泛的應(yīng)用。此外微機(jī)和單片機(jī)串行接口后,可以大大方便單片機(jī)的開(kāi)發(fā)過(guò)程。6.3PC機(jī)與單片機(jī)通信PC機(jī)是國(guó)內(nèi)目前使35一、PC機(jī)串口資源及編程使用方法PC機(jī)一般有COM1和COM2兩個(gè)串口。

寄存器名稱端口地址復(fù)位后初始值COM1COM2發(fā)送器保持寄存器(TBR)3F8H2F8HXXXXXXXXB接收器數(shù)據(jù)寄存器(RBR)3F8H2F8HXXXXXXXXB波特綠因子低位寄存器(DLL)3F8H2F8H00000000B波特綠因子高位寄存器(DLH)3F9H2F9H00000001B中斷允許寄存器(IER)3F9H2F9H00000000B中斷標(biāo)識(shí)寄存器(IIR)3FAH2FAH00000000B線路控制寄存器(LCR)3FBH2FBH01100000B調(diào)制解調(diào)器控制寄存器(MCR)3FCH2FCHXXXX0000B線路狀態(tài)寄存器(LSR)3FDH2FDHXXXXXXXXB調(diào)制解調(diào)器狀態(tài)寄存器(MSR)3FEH2FEHXXXXXXXXB一、PC機(jī)串口資源及編程使用方法寄存器名稱端口地址復(fù)位后初36使用串口必須先初始化,有以下4個(gè)步驟。DLHDLL波特率DLHDLL波特率DLHDLL波特率09H00H5000HC0H60000H18H480006H00H7500H60H120000H10H720004H17H11000H40H180000H0CH960003H59H134.500H3AH200000H06H1920003H00H15000H30H240000H03H3840001H80H30000H20H360000H01H115200例:設(shè)COM1的波特率為9600,則outportb(0x3fb,0x80);/*寫(xiě)線路控制寄存器,訪問(wèn)波特率因子寄存器*/

outportb(0x3f8,0x0c);/*寫(xiě)入波特率因子低字節(jié)*/

outportb(0x3f9,0x00);/*寫(xiě)入波特率因子高字節(jié)*/

⒈設(shè)置波特率PC機(jī)串口初始化使用串口必須先初始化,有以下4個(gè)步驟。DLHDLL波特率DL37⒉設(shè)置數(shù)據(jù)格式例:設(shè)數(shù)據(jù)為7位,1位起始位,1位停止位,偶校驗(yàn),則設(shè)置如下:outportb(0x3fb,0x1a);⒊設(shè)置操作方式不允許中斷:outportb(0x3fc,0x03);允許中斷:outportb(0x3fc,0x0b);自測(cè)試工作方式,且不允許中斷:outportb(0x3fc,0x13);⒋設(shè)置中斷允許寄存器開(kāi)放中斷語(yǔ)句:outportb(0x3f9,0x0f);PC機(jī)串口初始化⒉設(shè)置數(shù)據(jù)格式PC機(jī)串口初始化38例1將PC機(jī)的COM1初始化為9600波特率、7位數(shù)據(jù)、偶校驗(yàn)、1位停止位、不中斷,則初始程序如下:initcom1(){outportb(0x3fb,0x80);/*寫(xiě)線路控制寄存器,訪問(wèn)波特率因子寄存器*/

outportb(0x3f8,0x0c);/*寫(xiě)入波特率因子低字節(jié)*/

outportb(0x3f9,0x00);/*寫(xiě)入波特率因子高字節(jié)*/

outportb(0x3fb,0x1a);/*設(shè)數(shù)據(jù)為7位,1位起始位,1位停止位,偶校驗(yàn)*/outportb(0x3fc,0x03);/*不允許中斷*/}PC機(jī)的發(fā)送、接收程序PC機(jī)的發(fā)送、接收程序39例2PC機(jī)從COM1發(fā)送一個(gè)字符,程序如下:send(charsendchar){intcoms;do{ /*查詢發(fā)送緩沖器是否空*/coms=inportb(0x3fd)&0x20;}while(coms!=0x20);outportb(0x3f8,sendchar);}例2PC機(jī)從COM1發(fā)送一個(gè)字符,程序如下:40例3PC機(jī)從COM1接收一個(gè)字符,程序如下:charreceive(){charcoms,receivechar;waitok: /*查詢接收數(shù)據(jù)是否有效*/coms=inportb(0x3fd);if((coms&0x01)==0)gotowaitok;receivechar=inportb(0x3f8);returnreceivechar;}例3PC機(jī)從COM1接收一個(gè)字符,程序如下:41二、PC機(jī)與單片機(jī)雙機(jī)通信PC機(jī)與單片機(jī)構(gòu)成主從式上下位計(jì)算機(jī)系統(tǒng)。例:從PC機(jī)鍵盤(pán)上輸入一個(gè)字符,然后將這個(gè)字符發(fā)送給單片機(jī),單片機(jī)接收到這個(gè)字符后,不做任何處理,又將它發(fā)回給PC機(jī),PC機(jī)將這個(gè)字符顯示在屏幕上。連接電路如下:PC機(jī)RXDTXDMAX232T1OUTR1INT1IN(R1OUTRXDTXDMCS-51約定:波特率:2400b/s信息格式:8位數(shù)據(jù),1位停止位傳送方式:PC機(jī)采用查詢式收發(fā)數(shù)據(jù),單片機(jī)采用中斷式收發(fā)數(shù)據(jù)由于PC機(jī)是RS-232C電平,單片機(jī)是TTL電平,用MAX232進(jìn)行電平轉(zhuǎn)換。PC機(jī)與單片機(jī)通信設(shè)計(jì)二、PC機(jī)與單片機(jī)雙機(jī)通信PC機(jī)RXDTXDMAX232T42⒈P(pán)C機(jī)的通信軟件#include“stdio.h”main(){charc1,c2;intcoms;outportb(0x3fb,0x80);/*初始化8250*/outportb(0x3f8,0x30);outportb(0x3f9,0x00);outportb(0x3fb,0x03);/*8位數(shù)據(jù),1位停止位*/outportb(0x3fc,0x03);c1=getchar();開(kāi)始初始化8250有鍵輸入嗎?取鍵盤(pán)字符發(fā)送寄存器空否?向單片機(jī)發(fā)送字符接收單片機(jī)發(fā)回的字符接收的數(shù)據(jù)有效碼?顯示發(fā)回的字符NNNYYY結(jié)束PC機(jī)發(fā)送程序⒈P(pán)C機(jī)的通信軟件開(kāi)始初始化8250有鍵輸入嗎?取鍵43do{ /*查詢發(fā)送緩沖器是否空*/coms=inportb(0x3fd)&0x20;}while(coms!=0x20);outportb(0x3f8,c1);waitok: /*查詢接收數(shù)據(jù)是否有效*/coms=inportb(0x3fd);if((coms&0x01)==0)gotowaitok;c2=inportb(0x3f8);printf(“Thereturncharis:”);putchar(c2);}do{ /*查詢發(fā)送緩沖器是否空*/44開(kāi)始初始化定時(shí)器T1初始化串行口啟動(dòng)定時(shí)器T1開(kāi)放中斷主程序踏步中斷服務(wù)程序關(guān)中斷清接收中斷標(biāo)志RI保護(hù)現(xiàn)場(chǎng)接收PC機(jī)發(fā)來(lái)的字符將字符發(fā)送回PC機(jī)開(kāi)中斷,恢復(fù)現(xiàn)場(chǎng)中斷返回MCS-51單片機(jī)通信軟件主程序中斷服務(wù)程序開(kāi)始初始化定時(shí)器T1初始化串行口啟動(dòng)定時(shí)器T1開(kāi)放中斷主45主程序: ORG 0000H LJMP MAIN ORG 0023H LJMP SERVEMAIN:MOV TMOD,#20H;初始化T1 MOV TH1,#0F3H MOV TL1,#0F3H MOV SCON,#50H ;串行口為方式1,REN=1 MOV PCON,#80H ;SMOD=1 SETB TR1 SETB EA SETB ESHERE: SJMP HERE單片機(jī)接收程序主程序:?jiǎn)纹瑱C(jī)接收程序46中斷服務(wù)程序:SERVE: CLR EA ;中斷服務(wù)程序 CLR RI PUSH PSW ;保護(hù)現(xiàn)場(chǎng) SETB RS0 CLR RS1 PUSH ACC MOV A,SBUF ;接收PC機(jī)發(fā)來(lái)的字符 MOV SBUF,A ;將字符回送給PC機(jī)WAIT: JNB TI,WAIT ;等待發(fā)送完畢 CLR TI POP ACC ;恢復(fù)現(xiàn)場(chǎng) POP PSW SETB EA RETI END中斷服務(wù)程序:47三、PC機(jī)與單片機(jī)通訊多機(jī)通信多機(jī)通信的關(guān)鍵問(wèn)題:識(shí)別單片機(jī)!給單片機(jī)編號(hào)。怎樣識(shí)別單片機(jī)?起始位D0D1D2D3D4D5D6D7奇偶位停止位起始位D0D1D2D3D4D5D6D7TB8停止位

從PC機(jī)和單片機(jī)幀格式可知:通過(guò)軟件編程,使得PC機(jī)在發(fā)送地址(單片機(jī)編號(hào))時(shí),奇偶位為1,發(fā)送數(shù)據(jù)時(shí)為0;單片機(jī)接收時(shí),TB8為1表示收到的地址,為0表示收到的數(shù)據(jù)。

PC機(jī)與單片機(jī)通訊多機(jī)通信三、PC機(jī)與單片機(jī)通訊多機(jī)通信起始位D0D1D2D3D4D548例:從PC機(jī)的鍵盤(pán)上輸入單片機(jī)的編號(hào),要求PC機(jī)與該單片機(jī)進(jìn)行通信測(cè)試,從鍵盤(pán)上輸入一個(gè)字符,發(fā)送給某單片機(jī),單片機(jī)受到該字符后,又發(fā)回給PC機(jī),在屏幕上顯示出來(lái)。由于RS-232C不能實(shí)現(xiàn)多機(jī)通信,故采用RS-422標(biāo)準(zhǔn)。電路如下:PC機(jī)TXDRXD……232/422轉(zhuǎn)換器RXDTXDMCS-5175175751741號(hào)RXDTXDMCS-5175175751742號(hào)RXDTXDMCS-517517575174n號(hào)PC機(jī)與單片機(jī)的多級(jí)通信例:從PC機(jī)的鍵盤(pán)上輸入單片機(jī)的編號(hào),要求PC機(jī)與該單片機(jī)進(jìn)49⒈P(pán)C機(jī)軟件設(shè)計(jì)

開(kāi)始初始化8250輸入單片機(jī)編號(hào)發(fā)送單片機(jī)編號(hào)接收單片機(jī)送回的編號(hào)取鍵盤(pán)字符編號(hào)一致嗎?向單片機(jī)發(fā)送字符接收單片機(jī)發(fā)回的字符顯示發(fā)回的字符NY結(jié)束多機(jī)通訊程序設(shè)計(jì)⒈P(pán)C機(jī)軟件設(shè)計(jì)開(kāi)始初始化8250輸入單片機(jī)編號(hào)發(fā)送50程序清單:#include“stdio.h”main(){charc1,c2,n1,n2;intcoms;outportb(0x3fb,0x80); /*初始化8250*/outportb(0x3f8,0x30);outportb(0x3f9,0x00);outportb(0x3fb,0x2b); /*8位數(shù)據(jù),1位停止,奇偶校驗(yàn)位為1*/outportb(0x3fc,0x03); /*PC機(jī)處于發(fā)送地址狀態(tài)*/outportb(0x3f9,0x00); /*禁止8250中斷*/printf(“PleaseinputthenumberofMCS:\n”);scanf(“%c”,&n1);do{ /*查詢發(fā)送移位寄存器是否空*/coms=inportb(0x3fd)&0x40;}while(coms!=0x40);outportb(0x3f8,n1); /*PC機(jī)發(fā)送單片機(jī)地址編號(hào)*/outportb(0x3fc,0x01); /*PC機(jī)處于接收狀態(tài)*/waitok1: /*查詢單片機(jī)返回的編號(hào)是否有效*/coms=inportb(0x3fd);if((coms&0x01)==0)

PC機(jī)端的程序程序清單:PC機(jī)端的程序51gotowaitok1;n2=inportb(0x3f8); /*讀入單片機(jī)返回的編號(hào)*/if(n1!=n2) printf(“ThenumberofMCSiserror!\n”); break;else {outportb(0x3fc,0x03); /*PC機(jī)處于發(fā)送狀態(tài)*/ outportb(0x3fb,0x3b); /*PC機(jī)處于發(fā)送數(shù)據(jù)狀態(tài)*/c1=getchar(); do{ /*查詢發(fā)送移位寄存器是否空*/coms=inportb(0x3fd)&0x40;}while(coms!=0x40);outportb(0x3f8,c1);outportb(0x3fc,0x01); /*PC機(jī)處于接收狀態(tài)*/waitok2: /*查詢單片機(jī)返回的字符是否有效*/coms=inportb(0x3fd);if((coms&0x01)==0)gotowaitok2;c2=inportb(0x3f8); /*讀入單片機(jī)返回的字符*/printf(“Thereturncharis:”); /*顯示返回的字符*/putchar(c2);}}gotowaitok1;52⒉單片機(jī)程序流程中斷服務(wù)程序保護(hù)現(xiàn)場(chǎng)接收地址與本機(jī)地址相等否?回送本機(jī)地址接收PC機(jī)發(fā)來(lái)的字符將收到的字符回送PC機(jī)恢復(fù)現(xiàn)場(chǎng)中斷返回NY單片機(jī)軟件設(shè)計(jì)⒉單片機(jī)程序流程中斷服務(wù)程序保護(hù)現(xiàn)場(chǎng)接收地址與本機(jī)地址相等533、程序清單: ORG 0000H LJMP MAIN ORG 0023H LJMP SERVEMAIN: MOV TMOD,#20H ;初始化T1 MOV TH1,#0F3H MOV TL1,#0F3H MOV SCON,#0F0H ;串行口為方式3,REN=1 MOV PCON,#80H ;SMOD=1 SETB TR1 SETB EA SETB ESHERE: SJMP HERESERVE:CLR EA PUSH ACC PUSH PSW CLR RS1 SETB RS03、程序清單:54

MOV A,SBUF ;接收地址 XRL A,#01H ;與本機(jī)地址進(jìn)行比較 JNZ RETURN ;與本機(jī)地址不符,則返回 CLR SM2 ;置單片機(jī)為接收數(shù)據(jù)狀態(tài) CLR RI MOV A,#01H MOV SBUF,A ;發(fā)送本機(jī)地址給PC機(jī) JNB TI,$ ;等待發(fā)送完畢 CLR TI JNB RI,$ ;等待PC機(jī)發(fā)來(lái)的字符接收完畢 MOV A,SBUF ;讀入字符 CLR RI MOV SBUF,A JNB TI,$ ;等待發(fā)送完畢 CLR TIRETURN:POP PSW POP ACC SETB EA RETI END MOV A,SBUF ;接收地址55本章要求:了解通信、并行通信、串行通信、同步通信、異步通信、信息幀、波特率等概念;了解MCS-51單片機(jī)串行口的結(jié)構(gòu);掌握MCS-51單片機(jī)的4種工作方式及波特率的設(shè)置;掌握4種方式下串行數(shù)據(jù)的收發(fā)過(guò)程;了解RS232C、RS422A/485通信協(xié)議;了解PC機(jī)串口資源及其使用方法;掌握單片機(jī)與PC機(jī)進(jìn)行雙機(jī)和多機(jī)通信的電路及實(shí)現(xiàn)程序。小結(jié)本章要求:小結(jié)56基本概念:串行通信和并行通信MCS-51系列單片機(jī)串行通信計(jì)算機(jī)1GND計(jì)算機(jī)2GND并行通信計(jì)算機(jī)1GND計(jì)算機(jī)2GND發(fā)送接收串行通信并行通信:數(shù)據(jù)的各位同時(shí)傳送;串行通信:數(shù)據(jù)一位一位順序傳送。基本概念:MCS-51系列單片機(jī)串行通信并行通信發(fā)送接收串57串行、并行通信各自特點(diǎn)并行/串行:并行方式可一次同時(shí)傳送N位數(shù)據(jù),而串行方式一次只能傳送一位;但并行傳送的線路復(fù)雜(需要N根數(shù)據(jù)線),串行傳送的線路簡(jiǎn)單(只需要1~2根數(shù)據(jù)線);并行方式常用于短距離通信,串行方式則多用于長(zhǎng)距離通信。串行傳送主要用于計(jì)算機(jī)與遠(yuǎn)程終端之間的數(shù)據(jù)傳送,也很適合于經(jīng)由公共電話網(wǎng)連接的計(jì)算機(jī)之間的通信。另外在某些場(chǎng)合,串行接口也可代替并行接口來(lái)控制外設(shè),以節(jié)省軟硬件資源,簡(jiǎn)化線路。串行、并行通信各自特點(diǎn)并行/串行:并行方式可一次同58串行通信的分類(lèi):異步(AsynchronousCommunication)同步(SynchronousCommunication)

串行通信制式:?jiǎn)喂?a)、半雙工(b)和全雙工(c)(simplexhalfduplexfullduplex)發(fā)送器A站接收器B站單工通信(a)發(fā)收A站發(fā)收B站發(fā)收A站發(fā)收B站(b)(c)串行通信的分類(lèi):異步(AsynchronousCommun59同步、異步數(shù)據(jù)通信格式數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)……數(shù)據(jù)數(shù)據(jù)……同步字符同步字符1同步字符2圖6.1同步傳送的數(shù)據(jù)格式1100/10/10/10/10/10/10/10/10/1111起始位停止位奇偶校驗(yàn)8位數(shù)據(jù)空閑位空閑位第n個(gè)字符100/10/1起始位第n+1個(gè)字符0/10/1圖6.2異步通信數(shù)據(jù)幀格式同步、異步數(shù)據(jù)通信格式數(shù)據(jù)數(shù)據(jù)數(shù)據(jù)……數(shù)據(jù)數(shù)據(jù)……同步字符同60同步通訊異步通信的概念

同步和異步都屬于串行數(shù)據(jù)傳送方式,但二者的傳送格式有所不同。同步方式的一幀內(nèi)含有很多數(shù)據(jù)位,而異步方式一幀內(nèi)只含有幾個(gè)數(shù)據(jù)位。如果要傳送一大堆數(shù)據(jù),同步方式只給這串?dāng)?shù)據(jù)進(jìn)行一次外包裝(即添加“頭幀”、“尾幀”、“校驗(yàn)”幀),而異步方式在傳送這串?dāng)?shù)據(jù)時(shí)則要對(duì)數(shù)據(jù)的每一個(gè)字節(jié)分別加以包裝(即添加“頭”位、“尾”位和校驗(yàn))。

顯然在相同的數(shù)據(jù)傳輸波特率下,同步方式比異步方式的傳送速度快,但同步方式要求收發(fā)雙方在整個(gè)事件傳送過(guò)程中始終保持嚴(yán)格同步,這將增加硬件上的難度,而異步通信只要求每幀(字節(jié))的傳送中短時(shí)間保持同步即可,實(shí)現(xiàn)起來(lái)要容易得多。同步通訊異步通信的概念同步和異步都屬于串行數(shù)據(jù)傳送61MCS-51串行接口的結(jié)構(gòu)SBUFSBUF發(fā)送控制接收控制發(fā)送端口接收端口≥1波特率控制TXDRXDDBDBTIRI串行中斷寫(xiě)SBUF讀SBUF1.數(shù)據(jù)緩沖寄存器SBUF兩個(gè)SBUF,一個(gè)用于發(fā)送(只寫(xiě));一個(gè)用于接收(只讀)。映象地址均為99H。2.數(shù)據(jù)發(fā)送與接收控制發(fā)送控制器在波特率作用下,將發(fā)送SBUF中的數(shù)據(jù)由并到串,一位位地傳輸?shù)桨l(fā)送端口;接收控制器在波特率作用下,將接收接收端口的數(shù)據(jù)由串到并,存入接收SBUF中。MCS-51串行接口的結(jié)構(gòu)SBUFSBUF發(fā)送控制接收控制發(fā)62MCS-51的串行接口概述有一個(gè)可編程全雙工串行通信接口(UART)(UniversalAsychronousReceiver/Transmitter

)管腳:TXD(P3.1)、RXD(P3.0)可同時(shí)發(fā)送、接收數(shù)據(jù)(Transmit/Receive)有四種工作方式,幀格式有8、10、11位。波特率(Baudrate)可設(shè)置

波特率:每秒鐘傳送二進(jìn)制數(shù)碼的位數(shù),也叫比特?cái)?shù),單位為b/s,即位/秒。MCS-51的串行接口概述63MCS-51串行接口寄存器SBUF——串行口數(shù)據(jù)緩沖器共兩個(gè):一個(gè)發(fā)送寄存器SBUF,一個(gè)接收SBUF,二者共用一個(gè)地址99H。SCON——串行口控制寄存器PCON——電源及波特率選擇寄存器MCS-51串行接口寄存器SBUF——串行口數(shù)據(jù)緩沖器64控制寄存器SCONSM0SM1SM2RENTB8RB8TIRI工作方式選擇多機(jī)通信控制位允許串行接收位接收數(shù)據(jù)的第9位發(fā)送數(shù)據(jù)的第9位接收中斷標(biāo)志發(fā)送中斷標(biāo)志9FH9EH9DH9CH9BH9AH99H98H控制寄存器SCONSM0SM1SM2RENTB8RB8TIR65SM0SM1工作方式功能波特率00方式08位同步移位寄存器fosc/1201方式110位UART可變10方式211位UARTfosc/64或fosc/3211方式311位UART可變串行方式的定義例:設(shè)串行口工作在方式1,允許接收,則指令為:MOVSCON,#01010000BSM0SM1工作方式功能波特率00方式08位同66串行通信只用該位,為1時(shí),波特率×2;為0時(shí)不變。SMOD×××GF1GF0PDIDL87H電源及波特率選擇寄存器PCON串行通信只用該位,為1時(shí),波特率×2;為0時(shí)不變。SMOD×67方式的選擇由SM1、SM0實(shí)現(xiàn)。工作方式功能說(shuō)明波特率方式08位同步移位寄存器常用于擴(kuò)展I/O口fosc/12方式110位UART8位數(shù)據(jù)、起始位、結(jié)束位可變(取決于定時(shí)器1溢出率)方式211位UART8位數(shù)據(jù)、起始位0、結(jié)束位1和奇偶校驗(yàn)位fosc/64或fosc/32方式311位UART數(shù)據(jù)、起始、校驗(yàn)、結(jié)束位可變(取決于定時(shí)器1溢出率)串行口四種工作方式應(yīng)用比較方式的選擇由SM1、SM0實(shí)現(xiàn)。工作方式功能說(shuō)明波特率方式068在方式0下,串行口作同步移位寄存器用,其波特率固定為fosc/12。串行數(shù)據(jù)從RXD(P3.0)端輸入或輸出,同步移位脈沖由TXD(P3.1)送出。這種方式常用于擴(kuò)展I/O口。方式0用于擴(kuò)展I/O口輸出方式0在方式0下,串行口作同步移位寄存器用,其波特率固定為69方式0用于擴(kuò)展I/O輸出口原理

串行數(shù)據(jù)從RXD引腳輸出,TXD引腳輸出移位脈沖。CPU將數(shù)據(jù)寫(xiě)入發(fā)送寄存器SBUF時(shí),立即啟動(dòng)發(fā)送,將8位數(shù)據(jù)以Fosc/12的固定波特率從RXD輸出,低位在前,高位在后。發(fā)送完一幀數(shù)據(jù)后,發(fā)送標(biāo)志TI由硬件置位。例:?jiǎn)纹瑱C(jī)串行口方式設(shè)為移位寄存器方式,外接6片74LS164作為6位LED顯示器的靜態(tài)顯示接口。方式0用于擴(kuò)展I/O輸出口原理串行數(shù)據(jù)從R70串口方式0應(yīng)用入口:把要顯示的數(shù)分別放在顯示緩沖區(qū)60H-65H共6個(gè)單元中,并且分別對(duì)應(yīng)各個(gè)數(shù)碼管LED0-LED5。出口:將預(yù)置在顯示緩沖區(qū)中的6個(gè)數(shù)成相應(yīng)的顯示字形碼,然后輸出到顯示器中顯示。DISP: MOVSCON,#00H;初始化串行口方式0 MOVR1,#06H ;顯示6位數(shù) MOVR0,#65H ;60H-65H為顯示緩沖區(qū)MOVDPTR,#SEGTAB ;字形表的入口地址LOOP:MOVA,@R0;取最高位的待顯示數(shù)據(jù)MOVCA,@A+DPTR ;查表獲取字形碼MOV SBUF,A ;送串口顯示DELAY: JNBTI,DELAY ;等待發(fā)送完畢CLRTI ;清發(fā)送標(biāo)志DECR0 ;指針下移一位,準(zhǔn)備取下一個(gè)待顯示數(shù)DJNZR1,LOOP ;直到6個(gè)數(shù)據(jù)全顯示完。RETSETTAB: ;字形表,DB03H9FH27H0DH99H49H41H1FH01H09H0FFH串口方式0應(yīng)用入口:把要顯示的數(shù)分別放在顯示緩沖區(qū)60H-671方式0用于擴(kuò)展I/O口輸入方式0用于擴(kuò)展I/O輸入口原理方式0用于擴(kuò)展I/O口輸入方式0用于擴(kuò)展I/O輸入口原理72方式0用于擴(kuò)展I/O輸入口原理輸入:RXD為串行輸入端,TXD仍為同步脈沖移位輸出端。當(dāng)(RI)=0且(REN)=1時(shí)開(kāi)始接受。當(dāng)接受到第8位數(shù)據(jù)時(shí),將數(shù)據(jù)亦如接收寄存器,并由硬件置位RI。例:利用串行口擴(kuò)展了1片74LS165,從而實(shí)現(xiàn)了8個(gè)按鍵的輸入,在單片機(jī)的P1口連接了8個(gè)LED發(fā)光二極管,程序中實(shí)現(xiàn)了用按鍵控制發(fā)光二極管的亮與滅。流程為8路開(kāi)關(guān)-74165-3PIN數(shù)據(jù)線-8路指示燈。由此可以看出通過(guò)165傳輸,只用了3條數(shù)據(jù)線,就實(shí)現(xiàn)了8個(gè)開(kāi)關(guān)控制8個(gè)燈的目的。從而節(jié)約了控制的連線。方式0用于擴(kuò)展I/O輸入口原理輸入:RXD為串行輸入端,TX73串口方式0擴(kuò)展輸入口應(yīng)用接線方法:1用一個(gè)4PIN數(shù)據(jù)排線一端插入CPU部分JP53(P3口)的P3.0,P3.1,P3.2,P3.3。另外一端插入74LS165部分的輸入端JP21。2用一根8PIN的數(shù)據(jù)排線,一端插入74LS165部分的輸出端JP28,另一端插入8路按鍵開(kāi)關(guān)的的JP48。3用一條8PIN的數(shù)據(jù)排線把CPU部份的P1口(JP44)連接到八路指示燈部份的JP32。運(yùn)行后分別按k00-k07,可以看到d00-d07八個(gè)燈受控制串口方式0擴(kuò)展輸入口應(yīng)用接線方法:74程序清單org00hloop:movscon,#00010000b;設(shè)定sm0sm1=00,mode0clrp3.2;P3.2=0載入數(shù)據(jù)calldelay1 ;延時(shí)setbp3.2;P3.2=1

;數(shù)據(jù)輸出clrri ;RI=0loop1:jbcri,loop2;RI=1?是則到LOOP2jmploop1 ;否則繼續(xù)監(jiān)測(cè)loop2:mova,sbuf ;將SUBF載入ACCmovp1,a ;輸出到P1jmploop;重新開(kāi)始程序清單org00h75delay: mov r7,#00h ;延時(shí)子程序tt: mov r6,#00h djnz r6,$ djnz r7,tt retdelay1:;短延時(shí)子程序movr7,#02djnzr7,$retenddelay:761.方式0:移位寄存器方式寫(xiě)SBUF內(nèi)部移出脈沖RXD(數(shù)據(jù)輸出)TXD(移位時(shí)鐘)TID0D1D2D3D4D5D6D7方式0發(fā)送時(shí)序?qū)慡CON,清RI,置REN內(nèi)部移出脈沖RIRXD(數(shù)據(jù)輸入)TXD(移位時(shí)鐘)D0D1D2D3D4D5D6D7方式0接收時(shí)序方式0時(shí)序1.方式0:移位寄存器方式寫(xiě)SBUF內(nèi)部移出脈沖RXD(數(shù)據(jù)77方式1串行口為波特率可調(diào)的10位通用異步接口UART。每發(fā)送或接收的一幀信息中,包括1位起始位0,8位數(shù)據(jù)位和1位停止位1。方式1串行口為波特率可調(diào)的10位通用異步接口UART。每發(fā)送78方式1時(shí)序

一幀數(shù)據(jù)為10位:1位起始位、8位數(shù)據(jù)位和1位停止位。寫(xiě)SBUFTXD起始位停止位TID0D1D2D3D4D5D6D7方式1發(fā)送時(shí)序:起始位停止位RXDRI采樣時(shí)間D0D1D2D3D4D5D6D7方式1接收時(shí)序:方式1時(shí)序方式1時(shí)序?qū)慡BUFTXD起始位停止位TID0D1D2D3D79方式21、串行口為11位UART,傳送波特率與SMOD有關(guān)。發(fā)送或接收的一幀數(shù)據(jù)中包括1位起始位0,8位數(shù)據(jù)位,1位可編程位(用于奇偶校驗(yàn))和1位停止位1。方式21、串行口為11位UART,傳送波特率與SMOD有80方式3

方式3為波特率可變的11位UART通信方式,除了波特率以外,方式3和方式2完全相同。方式3方式3為波特率可變的11位UART通信方式,除81MCS-51串行口的波特率1.方式0和方式2的波特率是固定的在方式2中,波特率取決于PCON中的SMOD值:當(dāng)SMOD=0時(shí),波特率為fosc/64;當(dāng)SMOD=1時(shí),波特率為fosc/32.即波特率=。oscSMODf642在方式0中,波特率為時(shí)鐘頻率的1/12,即fosc/12,固定不變MCS-51串行口的波特率1.方式0和方式2的波特率是固定的822.方式1和方式3的波特率可變,由定時(shí)器1的溢出率決定波特率/(b/s)fosc/MHzSMOD定時(shí)器1C/模式初始值方式0:1M方式2:375k方式1、3:62.5k19.2k9.6k4.8k2.4k1.2k137.5k11011012121211.05911.05911.05911.05911.05911.986612×1110000000××000000000××222222221××FFHFDHFDHFAHF4HE8H1DH72HFEEBHT波特率=2.方式1和方式3的波特率可變,由定時(shí)器1的溢出率決定波特83方式0:波特率是固定的,為fosc/12方式2:SMOD=1時(shí)為fosc/32,SMOD=0時(shí)為fosc/64方式1和方式3:波特率=2SMODT1溢出率/32T1溢出率=fosc/[3212(28-N)],N為定時(shí)器T1的計(jì)數(shù)初值例:要求串行口以方式1工作,通信波特率為2400b/s,設(shè)振蕩頻率fosc為6MHz,請(qǐng)初始化T1和串口。解:若選SMOD=1,則T1時(shí)間常數(shù)N=256-216106/(3842400)=242.98≈243=F3H則,定時(shí)器T1和串行口的初始化程序如下: MOV TMOD,#20H ;設(shè)置T1為方式2 MOV TH1,#0F3H ;置時(shí)間常數(shù) MOV TL1,#0F3H SETB TR1 ;啟動(dòng)T1 ORL PCON,#80H ;SMOD=1 MOV SCON,#50H ;設(shè)串行口為方式1設(shè)置通訊波特率方式0:波特率是固定的,為fosc/12設(shè)置通訊波特率84串行通信接口標(biāo)準(zhǔn)1.RS-232C通信接口接口信號(hào):9針D型頭1569載波檢測(cè)DCD接收數(shù)據(jù)RXD發(fā)送數(shù)據(jù)TXD數(shù)據(jù)終端就緒信號(hào)地GND數(shù)據(jù)裝置就緒請(qǐng)求發(fā)送RTS清除發(fā)送CTS振鈴指示MCS-51系列單片機(jī)串行通信接口串行通信接口標(biāo)準(zhǔn)1569載波檢測(cè)DCD接收數(shù)據(jù)RXD發(fā)送數(shù)據(jù)85電氣特性:邏輯“1”:-3V~-15V;邏輯“0”:+3V~+15V。傳輸距離≤15米。最大負(fù)載電容≤2500pF。波特率≤20kb/s。接受器輸入阻抗:3~7kΩ。驅(qū)動(dòng)器輸出阻抗≤300Ω。驅(qū)動(dòng)器轉(zhuǎn)換速率≤30V/μs。輸出短路電流≤0.5A。RS232特性電氣特性:RS232特性86電平轉(zhuǎn)換單片機(jī)電平是TTL電平,它與RS-232C電平不兼容,必須進(jìn)行電平轉(zhuǎn)換。電平轉(zhuǎn)換的電路很多,MAX232是一種新型的專(zhuān)用集成電路,類(lèi)似的集成電路還很多。C1+C1-C2+C2-VCCV+V-電壓倍增器+5V~+10V電壓反向器+10V~-10V1111+5VT1OUTT2OUTR1OUTR2OUTT1INT2INR1INR2INC1C2C3C4TTL/CMOS輸入TTL/CMOS輸出RS-232C輸出RS-232C輸入MAX232C2-V-C1+V+C1-C2+T2OUTR2INR2OUTT2INT1INR1OUTR1INT1OUTVCCGND12345678910161514131211RS232電平轉(zhuǎn)換芯片電平轉(zhuǎn)換C1+C1-C2+C2-VCCV+V-電壓倍增器電87PC機(jī)COM口接8051機(jī)11p(TXD)10p(RXD)PC機(jī)和單片機(jī)串口通訊的硬件電路

PC機(jī)COM口接8051機(jī)11p(TXD)PC機(jī)和單片機(jī)串口88⒉RS-422A通信接口接口信號(hào):9針D型頭電氣特性電平轉(zhuǎn)換3.RS-485通信接口:將RS-422A的發(fā)送數(shù)據(jù)信號(hào)正端與接收數(shù)據(jù)信號(hào)正端連起來(lái),發(fā)送數(shù)據(jù)信號(hào)負(fù)端與接收數(shù)據(jù)信號(hào)負(fù)端連起來(lái)就成為RS-485通信接口1569發(fā)送數(shù)據(jù)負(fù)TX-發(fā)送數(shù)據(jù)正TX+接收數(shù)據(jù)正RX+接收數(shù)據(jù)負(fù)RX-信號(hào)地GND請(qǐng)求發(fā)送負(fù)RTS-清除發(fā)送正CTS+請(qǐng)求發(fā)送負(fù)RTS+清除發(fā)送負(fù)CTS–MCS-51系列單片機(jī)串行通信接口⒉RS-422A通信接口1569發(fā)送數(shù)據(jù)負(fù)TX-發(fā)送數(shù)據(jù)正89接口性能RS-232CRS-422ARS-485功能雙向,全雙工雙向,全雙工雙向,半雙工傳輸方式單端差分差分邏輯“0”電平3V~15V2V~6V1.5V~6V邏輯“1”電平-3V~-15V-2V~-6V-1.5V~-6V最大速率20kb/s10Mb/s10Mb/s最大距離30m1200m1200m驅(qū)動(dòng)器加載輸出電壓±5V~±15V±2V±1.5V接受器輸入敏感度±3V±0.2V±0.2V接收器輸入阻抗3~7KΩ>4KΩ>7KΩ組態(tài)方式點(diǎn)對(duì)點(diǎn)1臺(tái)驅(qū)動(dòng)器:10臺(tái)接收器32臺(tái)驅(qū)動(dòng)器:32臺(tái)接收器抗干擾能力弱強(qiáng)強(qiáng)傳輸介質(zhì)扁平或多芯電纜二對(duì)雙絞線一對(duì)雙絞線RS232、RS422、RS485對(duì)比接口RS-232CRS-422ARS-485功能雙向,全906.3PC機(jī)與單片機(jī)通信PC機(jī)是國(guó)內(nèi)目前使用應(yīng)用最廣泛的微機(jī),在與單片機(jī)串行接口后,可以方便地構(gòu)成主從分布式多機(jī)系統(tǒng)。從機(jī)(單片機(jī))作數(shù)據(jù)采集或?qū)崟r(shí)控制,主機(jī)作數(shù)據(jù)處理或中央管理等。這種多機(jī)系統(tǒng)在過(guò)程控制、儀表生產(chǎn)、生產(chǎn)自動(dòng)化和企業(yè)管理等方面都有廣泛的應(yīng)用。此外微機(jī)和單片機(jī)串行接口后,可以大大方便單片機(jī)的開(kāi)發(fā)過(guò)程。6.3PC機(jī)與單片機(jī)通信PC機(jī)是國(guó)內(nèi)目前使91一、PC機(jī)串口資源及編程使用方法PC機(jī)一般有COM1和COM2兩個(gè)串口。

寄存器名稱端口地址復(fù)位后初始值COM1COM2發(fā)送器保持寄存器(TBR)3F8H2F8HXXXXXXXXB接收器數(shù)據(jù)寄存器(RBR)3F8H2F8HXXXXXXXXB波特綠因子低位寄存器(DLL)3F8H2F8H00000000B波特綠因子高位寄存器(DLH)3F9H2F9H00000001B中斷允許寄存器(IER)3F9H2F9H00000000B中斷標(biāo)識(shí)寄存器(IIR)3FAH2FAH00000000B線路控制寄存器(LCR)3FBH2FBH01100000B調(diào)制解調(diào)器控制寄存器(MCR)3FCH2FCHXXXX0000B線路狀態(tài)寄存器(LSR)3FDH2FDHXXXXXXXXB調(diào)制解調(diào)器狀態(tài)寄存器(MSR)3FEH2FEHXXXXXXXXB一、PC機(jī)串口資源及編程使用方法寄存器名稱端口地址復(fù)位后初92使用串口必須先初始化,有以下4個(gè)步驟。DLHDLL波特率DLHDLL波特率DLHDLL波特率09H00H5000HC0H60000H18H480006H00H7500H60H120000H10H720004H17H11000H40H180000H0CH960003H59H134.500H3AH200000H06H1920003H00H15000H30H240000H03H3840001H80H30000H20H360000H01H115200例:設(shè)COM1的波特率為9600,則outportb(0x3fb,0x80);/*寫(xiě)線路控制寄存器,訪問(wèn)波特率因子寄存器*/

outportb(0x3f8,0x0c);/*寫(xiě)入波特率因子低字節(jié)*/

outportb(0x3f9,0x00);/*寫(xiě)入波特率因子高字節(jié)*/

⒈設(shè)置波特率PC機(jī)串口初始化使用串口必須先初始化,有以下4個(gè)步驟。DLHDLL波特率DL93⒉設(shè)置數(shù)據(jù)格式例:設(shè)數(shù)據(jù)為7位,1位起始位,1位停止位,偶校驗(yàn),則設(shè)置如下:outportb(0x3fb,0x1a);⒊設(shè)置操作方式不允許中斷:outportb(0x3fc,0x03);允許中斷:outportb(0x3fc,0x0b);自測(cè)試工作方式,且不允許中斷:outportb(0x3fc,0x13);⒋設(shè)置中斷允許寄存器開(kāi)放中斷語(yǔ)句:outportb(0x3f9,0x0f);PC機(jī)串口初始化⒉設(shè)置數(shù)據(jù)格式PC機(jī)串口初始化94例1將PC機(jī)的COM1初始化為9600波特率、7位數(shù)據(jù)、偶校驗(yàn)、1位停止位、不中斷,則初始程序如下:initcom1(){outportb(0x3fb,0x80);/*寫(xiě)線路控制寄存器,訪問(wèn)波特率因子寄存器*/

outportb(0x3f8,0x0c);/*寫(xiě)入波特率因子低字節(jié)*/

outportb(0x3f9,0x00);/*寫(xiě)入波特率因子高字節(jié)*/

outportb(0x3fb,0x1a);/*設(shè)數(shù)據(jù)為7位,1位起始位,1位停止位,偶校驗(yàn)*/outportb(0x3fc,0x03);/*不允許中斷*/}PC機(jī)的發(fā)送、接收程序PC機(jī)的發(fā)送、接收程序95例2PC機(jī)從COM1發(fā)送一個(gè)字符,程序如下:send(charsendchar){intcoms;do{ /*查詢發(fā)送緩沖器是否空*/coms=inportb(0x3fd)&0x20;}while(coms!=0x20);outportb(0x3f8,sendchar);}例2PC機(jī)從COM1發(fā)送一個(gè)字符,程序如下:96例3PC機(jī)從COM1接收一個(gè)字符,程序如下:charreceive(){charcoms,receivechar;waitok: /*查詢接收數(shù)據(jù)是否有效*/coms=inportb(0x3fd);if((coms&0x01)==0)gotowaitok;receivechar=inportb(0x3f8);returnreceivechar;}例3PC機(jī)從COM1接收一個(gè)字符,程序如下:97二、PC機(jī)與單片機(jī)雙機(jī)通信PC機(jī)與單片機(jī)構(gòu)成主從式上下位計(jì)算機(jī)系統(tǒng)。例:從PC機(jī)鍵盤(pán)上輸入一個(gè)字符,然后將這個(gè)字符發(fā)送給單片機(jī),單片機(jī)接收到這個(gè)字符后,不做任何處理,又將它發(fā)回給PC機(jī),PC機(jī)將這個(gè)字符顯示在屏幕上。連接電路如下:PC機(jī)RXDTXDMAX232T1OUTR1INT1IN(R1OUTRXDTXDMCS-51約定:波特率:2400b/s信息格式:8位數(shù)據(jù),1位停止位傳送方式:PC機(jī)采用查詢式收發(fā)數(shù)據(jù),單片機(jī)采用中斷式收發(fā)數(shù)據(jù)由于PC機(jī)是RS-232C電平,單片機(jī)是TTL電平,用MAX232進(jìn)行電平轉(zhuǎn)換。PC機(jī)與單片機(jī)通信設(shè)計(jì)二、PC機(jī)與單片機(jī)雙機(jī)通信PC機(jī)RXDTXDMAX232T98⒈P(pán)C機(jī)的通信軟件#include“stdio.h”main(){charc1,c2;intcoms;outportb(0x3fb,0x80);/*初始化8250*/outportb(0x3f8,0x30);outportb(0x3f9,0x00);outportb(0x3fb,0x03);/*8位數(shù)據(jù),1位停止位*/outportb(0x3fc,0x03);c1=getchar();開(kāi)始初始化8250有鍵輸入嗎?取鍵盤(pán)字符發(fā)送寄存器空否?向單片機(jī)發(fā)送字符接收單片機(jī)發(fā)回的字符接收的數(shù)據(jù)有效碼?顯示發(fā)回的字符NNNYYY結(jié)束PC機(jī)發(fā)送程序⒈P(pán)C機(jī)的通信軟件開(kāi)始初始化8250有鍵輸入嗎?取鍵99do{ /*查詢發(fā)送緩沖器是否空*/coms=inportb(0x3fd)&0x20;}while(coms!=0x20);outportb(0x3f8,c1);waitok: /*查詢接收數(shù)據(jù)是否有效*/coms=inportb(0x3fd);if((coms&0x01)==0)gotowaitok;c2=inportb(0x3f8);printf(“Thereturncharis:”);putchar(c2);}do{ /*查詢發(fā)送緩沖器是否空*/100開(kāi)始初始化定時(shí)器T1初始化串行口啟動(dòng)定時(shí)器T1開(kāi)放中斷主程序踏步中斷服務(wù)程序關(guān)中斷清接收中斷標(biāo)志RI保護(hù)現(xiàn)場(chǎng)接收PC機(jī)發(fā)來(lái)的字符將字符發(fā)送回PC機(jī)開(kāi)中斷,恢復(fù)現(xiàn)場(chǎng)中斷返回MCS-51單片機(jī)通信軟件主程序中斷服務(wù)程序開(kāi)始初始化定時(shí)器T1初始化串行口啟動(dòng)定時(shí)器T1開(kāi)放中斷主101主程序: ORG 0000H LJMP MAIN ORG 0023H LJMP SERVEMAIN:MOV TMOD,#20H;初始化T1 MOV TH1,#0F3H MOV TL1,#0F3H MOV SCON,#50H ;串行口為方式1,REN=1 MOV PCON,#80H ;SMOD=1 SETB TR1 SETB EA SETB ESHERE: SJMP HERE單片機(jī)接收程序主程序:?jiǎn)纹瑱C(jī)接收程序102中斷服務(wù)程序:SERVE: CLR EA ;中斷服務(wù)程序 CLR RI PUSH PSW ;保護(hù)現(xiàn)場(chǎng) SE

溫馨提示

  • 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)論