版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
單片機(jī)原理及應(yīng)用
(C語言版)
第7章MCS-51單片機(jī)串行口單片機(jī)原理及應(yīng)用(C語言版)7第7章MCS-51單片機(jī)串行口
目錄7.1串行通信基本知識7.2串行口結(jié)構(gòu)及控制7.3串行口工作方式7.4串行口應(yīng)用舉例7.5單片機(jī)與PC機(jī)通信接口電路單片機(jī)原理及應(yīng)用(C語言版)7本章要點
本章主要講述MCS-51單片機(jī)串行口的結(jié)構(gòu)、工作原理以及應(yīng)用。 主要內(nèi)容包括串行通信基本知識、MCS-51單片機(jī)串行口結(jié)構(gòu)、串行口工作方式以及單片機(jī)與PC機(jī)通信的接口電路。單片機(jī)原理及應(yīng)用(C語言版)77.1串行通信基本知識主要內(nèi)容7.1.1數(shù)據(jù)通信7.1.2異步通信和同步通信7.1.3波特率7.1.4通信方向7.1.5串行通信接口種類單片機(jī)原理及應(yīng)用(C語言版)77.1.1數(shù)據(jù)通信
計算機(jī)與外界的信息交換稱為通信?;镜耐ㄐ欧绞接胁⑿型ㄐ藕痛型ㄐ艃煞N。
1.并行通信
單位信息(通常指一個字節(jié))的各位數(shù)據(jù)同時傳送的通信方法稱為并行通信。
2.串行通信
單位信息的各位數(shù)據(jù)被分時一位一位依次順序傳送的通信方式稱為串行通信。
單片機(jī)原理及應(yīng)用(C語言版)77.1.1數(shù)據(jù)通信圖7-1并行通信示意圖
兩種通信特點:并行通信連線多,速度快,適合近距離通信;串行通信連線少,速度慢,適合遠(yuǎn)距離通信。圖7-1并行通信示意圖圖7-2串行通信示意圖RXDTXD89C52GNDTXDRXDGND外部設(shè)備單片機(jī)原理及應(yīng)用(C語言版)7
1.異步通信(時鐘不同,甚至頻率不同) 異步通信中,傳送的數(shù)據(jù)可以是一個字符代碼或一個字節(jié)數(shù)據(jù),數(shù)據(jù)以幀的形式一幀一幀傳送。7.1.2異步通信和同步通信圖7-3異步通信的一幀數(shù)據(jù)格式…10/10/10/100/10/10/10/10/10/118位數(shù)據(jù)第n幀00/1..空閑位或停止位起始位停止位校驗位空閑位起始位單片機(jī)原理及應(yīng)用(C語言版)7
2.同步通信(用同一個時鐘) 在同步通信中,每一數(shù)據(jù)塊發(fā)送開始時,先發(fā)送一個或兩個同步字符,使發(fā)送與接收取得同步,然后再順序發(fā)送數(shù)據(jù)。數(shù)據(jù)塊的各個字符間取消起始位和停止位,所以通信速度得以提高。7.1.2異步通信和同步通信圖7-4同步通信數(shù)據(jù)幀格式單片機(jī)原理及應(yīng)用(C語言版)77.1.3波特率
在串行通信中,對數(shù)據(jù)傳送速度有一定要求。
波特率表示每秒傳送的位數(shù),單位為b/s(記作波特)。 例如:數(shù)據(jù)傳送速率為每秒鐘10個字符,若每個字符的一幀為11位,則傳送波持率為:
11b/字符×10字符/s=110b/s
異步通信的傳送速率一般在50~19200b/s之間。單片機(jī)原理及應(yīng)用(C語言版)77.1.4通信方向
單工方式:一對傳輸線只允許單方向傳送數(shù)據(jù);
半雙工方式:一對傳輸線允許向兩個方向中的任一方向傳送數(shù)據(jù),但不能同時進(jìn)行;
全雙工方式:用兩對傳輸線連接在發(fā)送器和接收器上,發(fā)送和接收能同時進(jìn)行。單片機(jī)原理及應(yīng)用(C語言版)77.1.4通信方向圖7-5串行通信傳輸方式發(fā)送器發(fā)送器數(shù)據(jù)流(b)半雙工方式接收器接收器接收器發(fā)送器發(fā)送器發(fā)送器數(shù)據(jù)流(a)單工方式(c)全雙工方式接收器接收器單片機(jī)原理及應(yīng)用(C語言版)77.1.5串行通信接口種類
根據(jù)串行通信格式及約定(如同步方式、通信速率、數(shù)據(jù)塊格式等)不同,形成了許多串行通信接口標(biāo)準(zhǔn),如常見的:
UART(通用異步串行通信接口)
USB(通用串行總線接口)
I2C(集成電路間的串行總線)
SPI(同步串行外設(shè)總線)
485總線、CAN總線接口等單片機(jī)原理及應(yīng)用(C語言版)77.2串行口結(jié)構(gòu)及控制主要內(nèi)容
7.2.1MCS-51串行口結(jié)構(gòu)
7.2.2特殊功能寄存器
7.2.3波特率設(shè)計單片機(jī)原理及應(yīng)用(C語言版)77.2.1MCS-51串行口結(jié)構(gòu)圖7-6串行口方式1、3內(nèi)部結(jié)構(gòu)示意簡圖分為三個部分:時鐘、發(fā)送部分、接收部分÷16發(fā)送SBUF(99H)÷16輸入移位寄存器TXD寫SBUF:發(fā)送(程序)讀SBUF:接收(程序)RITI移位時鐘RXD裝載SBUF(自動)÷12TH1TL1fosc÷2SMOD=1SMOD=0T1溢出率接收SBUF(99H)(P3.0)(P3.1)÷2TH2TL2foscT2溢出率單片機(jī)原理及應(yīng)用(C語言版)77.2.2與串行口有關(guān)的特殊功能寄存器
1.控制狀態(tài)寄存器SCON
功能:設(shè)置串行口的工作方式和標(biāo)識串行口狀態(tài)。 字節(jié)地址:98H,可位尋址。 復(fù)位值:00000000B。格式如下:D7D6D5D4D3D2D1D0SM0SM1SM2RENTB8RB8TIRI單片機(jī)原理及應(yīng)用(C語言版)7SM0和SM1(SCON.7、SCON.6):串行口工作方式選擇位。7.2.2與串行口有關(guān)的特殊功能寄存器SM0SM1工作方式功能說明波特率00方式0同步移位寄存器fosc/1201方式110位異步通信可變,T1或T2提供10方式211位UART、可多機(jī)fosc/64或fosc/3211方式311位UART、可多機(jī)可變,T1或T2提供SM2(SCON.5): 多機(jī)通信控制位, 在方式2或3中使用。REN(SCON.4):允許接收控制位。 設(shè)置1,允許接收;清0:禁止接收。單片機(jī)原理及應(yīng)用(C語言版)7TB8(SCON.3):發(fā)送數(shù)據(jù)的第9位。RB8(SCON.2):接收數(shù)據(jù)的第9位。TI(SCON.1):發(fā)送中斷標(biāo)志。RI(SCON.0):接收中斷標(biāo)志。7.2.2與串行口有關(guān)的特殊功能寄存器
關(guān)于TI和RI:串行發(fā)送中斷標(biāo)志TI和接收中斷RI是同一個中斷源,CPU不知道是發(fā)送中斷標(biāo)志TI還是接收中斷標(biāo)志RI產(chǎn)生的中斷請求,所以,在全雙工通信時,必須由軟件來判別。單片機(jī)原理及應(yīng)用(C語言版)7
多機(jī)通信實現(xiàn)的原理:
各個從機(jī)的SM2設(shè)置為1;主機(jī)TB8發(fā)送1表明是地址,選擇接收機(jī);主機(jī)TB8發(fā)送0為數(shù)據(jù)。
(1)實現(xiàn)的條件:各個從機(jī)的SM2設(shè)置為1。當(dāng)SM2=1時:
RB8=1,則保留接收到的數(shù)據(jù);RB8=0則丟棄。 (2)實現(xiàn)的方法
①主機(jī)先發(fā)送從機(jī)地址,并且TB8為1。這時各個從機(jī)均可接收此地址,目標(biāo)從機(jī),則對自己的SM2清0; 其它從機(jī)保留SM2=1。
②主機(jī)再發(fā)送數(shù)據(jù),并且TB8為0
這時目標(biāo)從機(jī)正常接收數(shù)據(jù),其它從機(jī)均丟棄。7.2.2與串行口有關(guān)的特殊功能寄存器地址單片機(jī)原理及應(yīng)用(C語言版)7
2.電源控制寄存器PCON
電源控制寄存器PCON(地址為87H)中只有SMOD位與串行口工作有關(guān)。
D7D6D5D4D3D2D1D0SMOD---------GF1GF0PDIDL7.2.2與串行口有關(guān)的特殊功能寄存器
SMOD(PCON.7):波特率倍增位。 串行口工作于方式1、方式2和方式3時,SMOD=1,串行口波特率加倍。 復(fù)位值:00000000B。不能進(jìn)行位尋址。單片機(jī)原理及應(yīng)用(C語言版)77.2.3波特率設(shè)計
方式0和方式2的波特率是固定的,方式1和方式3的波特率是由定時器T1的溢出率來決定的。在增強型單片機(jī)中,也可以使用T2作波特率發(fā)生器。
1.方式0的波特率 方式0為同步移位寄存器方式。 固定為振蕩頻率的1/12。并不受PCON寄存器中SMOD位的影響。方式0的波特率=fosc/12單片機(jī)原理及應(yīng)用(C語言版)7 2.方式2的波特率 方式2是波特率只有兩種(fosc/64或fosc/32)、11位的異步通信,可多機(jī)通信。
時鐘:接收與發(fā)送的時鐘直接來自振蕩頻率fosc,是fosc/2,并且還與PCON中SMOD位有關(guān)。
其波特率為:當(dāng)SMOD=0時,波特率為fosc的1/64;若SMOD=1,則波特率為fosc的1/32。即方式2的波特率=
2SMOD×fosc/647.2.3波特率設(shè)計單片機(jī)原理及應(yīng)用(C語言版)7 3.方式1和方式3的波特率(1)T1作波特率發(fā)生器 在最典型應(yīng)用中,定時器T1選用模式2定時,此時n=8,設(shè)定時器的初值為X:于是,
X=256-方式1、3的波特率=×(T1溢出速率)即波特率=
×
×/(2n-初值)7.2.3波特率設(shè)計單片機(jī)原理及應(yīng)用(C語言版)7
(2)T2作波特率發(fā)生器 設(shè)寄存器T2CON的位TCLK=1和(或)RCLK=1時,允許串行口從T2獲得發(fā)送和(或)接收的波特率。 串行口方式1、3的波特率=T2溢出率/16
定時器2作波特率發(fā)生器時,計數(shù)在每個狀態(tài)周期遞增。這樣:
方式1、3的波特率fb=
∴
(RCAP2H、RCAP2L)=65536-fosc/fb/32
控制字、模式字:
T2CON=00110100B=34H T2MOD=00H7.2.3波特率設(shè)計單片機(jī)原理及應(yīng)用(C語言版)7
主要內(nèi)容
7.3.1串行口方式0
7.3.2串行口方式1
7.3.3串行口方式2和方式37.3串行口工作方式單片機(jī)原理及應(yīng)用(C語言版)77.3.1串行口方式0
方式0為同步移位寄存器輸入/輸出方式,常用于擴(kuò)展I/O口。
RXD為數(shù)據(jù)輸入或輸出,TXD輸出移位時鐘,作為外接部件的同步信號。 方式0下,收/發(fā)的僅8位數(shù)據(jù),無起始位、奇偶校驗位及停止位,低位在前、高位在后;
波特率是固定的,為fosc/12,即機(jī)器周期頻率
。
啟動發(fā)送:TI=0、寫SBUF
啟動接收:RI=0、REN置1單片機(jī)原理及應(yīng)用(C語言版)77.3.1串行口方式0
方式方式0發(fā)送方式0接收單片機(jī)原理及應(yīng)用(C語言版)77.3.1串行口方式011621531441351261171089SH/LDCLKE并
F入
GH串出QGND74LS165VCC時鐘禁止DC并B入A串入QH串出并入/串出11621531441351261171089Q1Q2Q3Q4Q5Q6Q7GND74Hc595串入/并出串入Q0DSOEST_CPSH_CPMRQ7’單片機(jī)原理及應(yīng)用(C語言版)77.3.1串行口方式0串A入BQAQBQCQDGNDVCCQHQGQFQECLRCLK114213312411510697874LS16411621531441351261171089Q1Q2Q3Q4Q5Q6Q7GND74Hc595VCCQ0DSOEST_CPSH_CPMRQ7’并出串入/并出串入/并出串入單片機(jī)原理及應(yīng)用(C語言版)7用串行口方式0擴(kuò)展并行輸出/輸入口
7.3.1串行口方式0發(fā)送電路接收電路7SH/LD擴(kuò)展并行輸出擴(kuò)展并行輸入單片機(jī)原理及應(yīng)用(C語言版)77.3.2串行口方式1
方式1真正用于串行發(fā)送或接收。TXD與RXD分別用于發(fā)送、接收數(shù)據(jù)。
幀格式:1位起始位、8位數(shù)據(jù)位(低位在前)、1位停止位,共10位。 在接收時,停止位進(jìn)入SCON的RB8
此方式的波特率可調(diào),由T1或T2控制。
SCON=01010000b=0x50
1、方式1發(fā)送
TI=0、寫SBUF啟動發(fā)送單片機(jī)原理及應(yīng)用(C語言版)77.3.1串行口方式0
方式方式1接收方式1發(fā)送單片機(jī)原理及應(yīng)用(C語言版)77.3.2串行口方式1
2、方式1接收
1)接收條件:SCON中的REN置1 2)接收過程:REN置1后,串行口對接收引腳RXD檢測,當(dāng)RXD由高變低時開始移位接收;接收完后將停止位裝入RB8中。
3)接收的數(shù)據(jù)有效的條件(兩條)
:
a、RI=0;
b、SM2=0,或者SM2=1并且RB8=1
滿足以上2條,則將8位數(shù)據(jù)裝入SBUF,且RI置1。
有以下情況之一則數(shù)據(jù)無效:
a)RI=1;b)SM2=1并且RB8=0
注意:除了方式2、3的多機(jī)通信之外,SM2應(yīng)清0單片機(jī)原理及應(yīng)用(C語言版)77.3.3串行口方式2和方式3
串行口工作在方式2和方式3均為每幀11位異步通信格式,由TXD和RXD發(fā)送與接收。 方式2和3的操作是完全一樣的,不同的只是特波率。
每幀11位:即1位起始位、8位數(shù)據(jù)位(低位在前)、1位可編程的第9數(shù)據(jù)位和1位停止位。
發(fā)送時,第9數(shù)據(jù)位(TB8)可以設(shè)置為1或0,在校驗時可將奇偶位裝入TB8;
接收時,第9數(shù)據(jù)位進(jìn)入SCON的RB8。
SCON=10010000b=0x90 方式2接收
SCON=11010000b=0xD0 方式3接收單片機(jī)原理及應(yīng)用(C語言版)77.4串行口應(yīng)用舉例
主要內(nèi)容
7.4.1同步方式應(yīng)用
7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用 MSC-51單片機(jī)的串行口在方式0時,以同步方式操作。外接串入/并出或并入/串出器件,可實現(xiàn)I/O口的擴(kuò)展。
例7-2用89C52串行口外接74HC595串入/并出移位寄存器擴(kuò)展8位并行輸出口,8位并行輸出口的每位都接一個發(fā)光二極管,要求8位發(fā)光二極管循環(huán)點亮。 數(shù)據(jù)的輸出通過RXD發(fā)送,移位時鐘通過TXD送出,74HC595用于串/并轉(zhuǎn)換。單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用圖7-13方式0擴(kuò)展輸出電路89C52RXDTXDP3.6DSOE74HC595SH_CPMRQ7’ST_CP級聯(lián)輸出輸出清0
單片機(jī)原理及應(yīng)用(C語言版)7
C語言程序清單:#include<reg52.h>#include<intrins.hsbitP3_6=P3^6;voiddelay10xms(unsignedcharx){
//設(shè)晶振為12MHz unsigned inti; while(x--) for(i=0;i<830;i++);}7.4.1同步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7voidmain(){ unsignedchardd=0x01;
SCON=0x0; //設(shè)置串口方式0 while(1) {
TI=0; //清除發(fā)送結(jié)束標(biāo)志
SBUF=dd; //發(fā)送 dd=_crol_(dd,1); //左移1位
while(TI==0);
//等待發(fā)送結(jié)束 P3_6=0; P3_6=1; //輸出數(shù)據(jù) delay10xms(100); //延時1s} }7.4.1同步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用 MSC-51單片機(jī)的串行口在方式0時,以同步方式操作。外接串入/并出或并入/串出器件,可實現(xiàn)I/O口的擴(kuò)展。
例7-2用89C52串行口外接74HC164串入/并出移位寄存器擴(kuò)展8位并行輸出口,8位并行輸出口的每位都接一個發(fā)光二極管,要求8位發(fā)光二極管循環(huán)點亮。 數(shù)據(jù)的輸出通過RXD發(fā)送,移位時鐘通過TXD送出,74HC164用于串/并轉(zhuǎn)換。單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用圖7-13方式0擴(kuò)展輸出電路單片機(jī)原理及應(yīng)用(C語言版)7C語言程序清單:#include<reg52.h>sbitP1_0=P1^0;voidmain(){ unsignedchari;SCON=0x00; //串行口方式0初始化 ES=1; EA=1; while(1) { for(i=0;i<8;i++){ P1_0=0; //關(guān)閉并行輸出 SBUF=1<<i;delay(); //延時函數(shù),讀者自行添加} }
}7.4.1同步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7voids_srv()interrupt4 //中斷服務(wù)程序{ TI=0; P1_0=1; //打開并行輸出}匯編語言程序清單: ORG 0000H LJMP MAIN ORG 0023H LJMP S_SRV;串行口中斷服務(wù)程序7.4.1同步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用MAIN: MOV SCON,#00H ;串行口方式0初始化
SETB ES SETB EA MOV A,#1LOOP: CLR P1.0 ;關(guān)閉并行輸出
MOV SBUF,A ;開始串行輸出
ACALL DELAY RL A SJMP LOOP ;等待中斷S_SRV: CLR TI;中斷服務(wù)程序 SETB P1.0 RETIEND
單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用例7-3用89C52串行口外接74HC165并出/串入移位寄存器擴(kuò)展8位并行輸入口,8位并行輸入口的每位都接一個撥動開關(guān),要求讀入開關(guān)量的值。單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用圖7-14方式0擴(kuò)展輸入電路89C52RXDTXDP1.0P1.1QH74HC165CLKSH/LO
INH時鐘禁止單片機(jī)原理及應(yīng)用(C語言版)77.4.1同步方式應(yīng)用 解:數(shù)據(jù)的輸入通過RXD接收,移位時鐘通過TXD送出,時鐘禁止端接地,使時鐘有效,P1.1接一按鍵,當(dāng)按鍵按下時輸入一次數(shù)據(jù),數(shù)據(jù)接收采用查詢方式。C語言程序清單:#include<reg52.h>sbitLOAD165=P1^0;sbitKEY=P1^1;單片機(jī)原理及應(yīng)用(C語言版)7
C語言程序清單:#include<reg52.h>sbitLOAD165=P1^0;sbitKEY=P1^1;voiddelay10xms(unsignedcharx){
//設(shè)晶振為12MHz
unsigned inti; while(x--) for(i=0;i<830;i++);}7.4.1同步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7voidmain()
{
SCON=0;
//設(shè)置串口方式0,不允許接收
while(1){if(KEY==0)
//按鍵按下{delay10xms(2); //延時20ms去抖 if(KEY==0) {
while(KEY==0); //等待按鍵釋放
LOAD165=0; //裝入并行數(shù)據(jù) LOAD165=1; //鎖存,允許串行移位
RI=0; //準(zhǔn)備輸入
REN=1; //啟動接收,輸入 while(RI==0); //等待輸入完成
P0=SBUF; //將讀到的數(shù)據(jù)從P0輸出
REN=0; //準(zhǔn)備下次啟動}
}
}
}7.4.1同步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 匯編語言程序清單:MAIN: MOV SCON,#00H
;串行口方式0初始化 SETB RILOOP:JB P1.1,LOOP ACALLDELAY JB P1.1,LOOP JNB P1.1,$ CLR P1.0 SETBP1.0 SETB REN CLR RI JNB RI,$ MOV P2,SBUFCLR RENSJMPLOOPEND7.4.1同步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)77.4.2異步方式應(yīng)用
串行口方式1與方式3很近似,波特率設(shè)置一樣,不同之處在于方式3比方式1多了一個數(shù)據(jù)附加位,即特征位,也叫程控位。
方式2與方式3基本一樣(只是波特率不同),接收/發(fā)送11位信息:開始為1位低電平的起始位,中間8位數(shù)據(jù)位,之后為1位程控位(由發(fā)送的TB8決定),最后是1高電平的停止位。單片機(jī)原理及應(yīng)用(C語言版)7
例7-4對89C52單片機(jī)編程,將片內(nèi)RAM50H~5FH中的數(shù)據(jù),用串行口方式3以中斷方式發(fā)送給另一臺機(jī)器,并用第9個數(shù)據(jù)位作奇偶校驗,設(shè)晶振為11.0592MHz,波特率為4800b/s。方法步驟:
選擇串口及校驗方式 計算T1初值 主函數(shù)(初始化) 中斷函數(shù)
解:用TB8作奇偶校驗位,在數(shù)據(jù)寫入發(fā)送緩沖器之前,先將數(shù)據(jù)的奇偶位P寫入TB8,這時,第9位數(shù)據(jù)作奇偶校驗用,發(fā)送采用中斷方式。 用T1做波特率發(fā)生器,T1模式2定時 初值 X=256- =2507.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 C語言程序清單:#include<reg52.h>unsignedchari=0,array[16]_at_0x50; //數(shù)據(jù)區(qū)voidmain(){ SCON=0xc0; //置串口方式3,只發(fā)
TMOD=0x20; //定時器初始化
TL1=250; TH1=250; TR1=1; ES=1; EA=1; //中斷初始化
ACC=array[i]; //發(fā)送第一個數(shù)據(jù)送
TB8=P; //累加器,目的取P位
SBUF=ACC; //發(fā)送一個數(shù)據(jù)
while(1); //等待中斷}7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7voidserial_int()interrupt4
//串口中斷服務(wù)程序{ if(RI) RI=0; else { TI=0; //清發(fā)中斷標(biāo)志
ACC=array[++i]; //取下一個數(shù)據(jù)
TB8=P; SBUF=ACC; if(i>14) //發(fā)送完畢,
ES=0; //禁止串口中斷} }7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7
匯編語言程序清單:
ORG 0000H SJMP MAIN ;上電,轉(zhuǎn)主程序
ORG 0023H SJMP SERVER ;轉(zhuǎn)中斷服務(wù)程序MAIN: MOV SP, #0DFH ;設(shè)置堆棧指針
MOV SCON,#0C0H ;設(shè)置串口方式3發(fā)送
MOV TMOD,#20H ;T1以模式2定時
MOV TL1,#0F4H MOV TH1,#0F4H SETB TR1 SETB ES ;允許串行口中斷
SETB EA ;CPU開中斷 MOV R0,#50H MOV R7,#157.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 MOV A,@R0 MOV C,P MOV TB8,C ;送奇偶標(biāo)志位到TB8 MOV SBUF,A ;發(fā)送第一個數(shù)據(jù) SJMP $SERVER: JBC RI,ENDT ;清除發(fā)送中斷標(biāo)志
CLR TI
INC R0 ;修改數(shù)據(jù)地址 MOV A,@R0 MOV C,P MOV TB8,C MOV SBUF,A ;發(fā)送下一個數(shù)據(jù)
DJNZ R7,ENDT ;判斷數(shù)據(jù)塊是否發(fā)送完 CLR ES ;否則,禁止串行口中斷ENDT: RETI ;中斷返回7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7
例7-5
編寫一單片機(jī)程序,將從串行口接收的16字節(jié)數(shù)據(jù)送入片內(nèi)RAM的50H~5FH單元中。要求波特率為2400b/s,作奇偶校驗,設(shè)單片機(jī)的晶振頻率為11.0592MHz。
解:RB8作奇偶校驗位,接收時,將接收到的數(shù)據(jù)的奇偶校驗位與RB8對比,以判斷正確與否。 將串行口設(shè)置為方式3工作。用中斷方式接收。7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 C語言程序清單:#include<reg52.h>unsignedchar;unsignedchari=0,array[16]_at_0x50; //定義數(shù)據(jù)voidmain(){ SCON=0xd0; //設(shè)置串口方式3,允許接收
TMOD=0x20; //T1模式2定時
TH1=0xf4; TL1=0xf4; TR1=1; ES=1; EA=1; while(1);}7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7voidint_ser()interrupt4{ if(TI) TI=0; //循環(huán)接收16個數(shù)據(jù)
else { RI=0; ACC=SBUF; if(RB8==P) //校驗正確
{ array[i++]=ACC; if(i>15) ES=0; } else //校驗不正確
{ F0=1; err(); } } }7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 C語言程序清單:#include<reg52.h>unsignedchari;unsignedchararray[16]_at_0x50; //接收緩沖區(qū)voidmain(){
SCON=0xd0; //設(shè)置串口方式3,允許接收
TMOD=0x20; //T1模式2定時
TH1=0xf4; TL1=0xf4; TR1=1;7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 for(i=0;i<16;i++) //循環(huán)接收16個數(shù)據(jù)
{ while(!RI); //等待一次接收完成
RI=0; ACC=SBUF; if(RB8==P) //校驗正確
array[i]=ACC; else //校驗不正確
{ F0=1; break; } } while(1);}7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7
匯編語言程序清單:MAIN:MOVSCON,#0D0H ;串口方式3,允許接收
MOVTMOD,#20H ;T1以方式2定時
MOV TL1,#0F4H MOV TH1,#0F4H SETB TR1 MOV R0,#50H ;首地址送R0 MOV R7,#10H ;數(shù)據(jù)長度送R7WAIT:JNB RI,$ ;等待接收完成 CLR RI ;清中斷接收標(biāo)志RI MOVA,SBUF ;從串口讀數(shù)送累加器7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 JNB P,PNP ;P=0,轉(zhuǎn)PNP JNB RB8,ERROR ;P=1、RB8=0,轉(zhuǎn)出錯 SJMPRIGHTPNP: JB RB8,ERROR ;P=0、RB8=1,轉(zhuǎn)出錯RIGHT:MOV@R0,A ;存數(shù) INC R0 ;修改地址指針
DJNZR7,WAIT ;未接收完,繼續(xù)
CLR F0 ;置正確接收標(biāo)志F0=0 SJMP $ERROR:SETBF0 ;置錯誤接收標(biāo)志F0=1 SJMP $7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7
例7-6
用第9個數(shù)據(jù)位作奇偶校驗位,編寫串行口方式3的全雙工通信程序,設(shè)雙機(jī)將各自鍵盤的按鍵鍵值發(fā)送給對方,接收正確后放入緩沖區(qū)(顯示及做其它處理),設(shè)晶振為11.0592MHz,波特率為9600b/s。
解:因為是全雙工方式,通信雙方的程序一樣。發(fā)送和接收都采用中斷方式。
T1初值
x=0xfd
SCON=11010000b=0xd07.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 C語言程序清單:#include<reg52.h>unsignedcharbuffer,k;voidmain(){
SCON=0xd0; //置串口方式3,允許接收
TMOD=0x20; //T1以模式2定時
TL1=0xfd; TH1=0xfd; TR1=1; ES=1; //開串行口中斷
EA=1; //開總中斷7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7 while(1) { k=key(); //讀取按鍵值
if(k!=0xff) //無鍵按下返回0xff { ACC=k; //將鍵值送累加器,取P位
TB8=P; //送TB8 SBUF=ACC; //發(fā)送
} display(); //顯示程序
}}7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7voidserial_server()interrupt4{ if(TI) //發(fā)送引起,清TI TI=0; else //否則,接收引起
{ RI=0; ACC=SBUF; //讀取接收數(shù)據(jù)
if(RB8==P) //校驗正確,
buffer=ACC; //存入緩沖區(qū)
}}7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7
匯編語言程序清單:
ORG0000H SJMPMAIN ;跳轉(zhuǎn)到主程序
ORG23H LJMPS_SERV ;跳轉(zhuǎn)到串口中斷服務(wù)程序MAIN: MOVSP,#0DFH ;設(shè)置堆棧指針
MOVSCON,#0D0H ;串口初始化
MOVTMOD,#20H ;
T1以模式2定時 MOVTL1,#0FDH MOVTH1,#0FDH ;定時器1賦初值7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7
SETB TR1 ;啟動定時器1 SETB ES ;開中斷 SETB EALOOP: LCALL KEY ;讀取按鍵(存于A中), ;有鍵按下返回鍵值,
CJNE A,#0FFH,SEND ;無鍵按下返回0FFH, ;有鍵按下轉(zhuǎn)發(fā)送NEXT: LCALL DISPLAY ;調(diào)用顯示
SJMP LOOP ;主程序循環(huán)7.4.2異步方式應(yīng)用單片機(jī)原理及應(yīng)用(C語言版)7SEND: MOV C,P MOV TB8,C MOV SBUF,A ;帶校驗位發(fā)送
LJMP NEXT ;循環(huán)S_SERV:
溫馨提示
- 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)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 國際貨運代理行業(yè)市場突圍建議書
- 在線心理教育行業(yè)經(jīng)營分析報告
- 工業(yè)基因工程行業(yè)可行性分析報告
- 綠色農(nóng)業(yè)建筑行業(yè)營銷策略方案
- 智能物流行業(yè)市場需求分析及未來三年行業(yè)預(yù)測報告
- 智能咖啡機(jī)行業(yè)市場調(diào)研分析報告
- 文字冒險游戲行業(yè)技術(shù)趨勢分析
- 網(wǎng)絡(luò)財產(chǎn)保險行業(yè)競爭格局與投資戰(zhàn)略研究咨詢報告
- 家用醫(yī)療設(shè)備行業(yè)供需趨勢及投資風(fēng)險研究報告
- 外語學(xué)習(xí)書籍出版行業(yè)五年發(fā)展預(yù)測分析報告
- 2024中國鐵路集團(tuán)全國招聘高頻考題難、易錯點模擬試題(共500題)附帶答案詳解
- 4S店內(nèi)部承包經(jīng)營管理合同
- 2024義務(wù)教育數(shù)學(xué)新課標(biāo)課程標(biāo)準(zhǔn)2022版考試真題附答案
- 部編版語文2024-2025學(xué)年七年級上冊第一單元測試卷
- 二型呼吸衰竭的課件
- 2022年版初中化學(xué)課程標(biāo)準(zhǔn)新課標(biāo)考試題庫及答案1
- 螺桿空壓機(jī)微電腦控制器MAM-KY02S(B)-(Ⅷ)型用戶手冊
- 2024中華人民共和國農(nóng)村集體經(jīng)濟(jì)組織法詳細(xì)解讀課件
- 2024年中國兵器工業(yè)集團(tuán)限公司夏季招聘(高頻重點提升專題訓(xùn)練)共500題附帶答案詳解
- 2024-2030年中國抽油桿市場經(jīng)營模式分析與供需現(xiàn)狀調(diào)研研究報告
- 拖車損壞賠償協(xié)議書
評論
0/150
提交評論