單片機(jī)原理及應(yīng)用(C語言版)_第1頁
單片機(jī)原理及應(yīng)用(C語言版)_第2頁
單片機(jī)原理及應(yīng)用(C語言版)_第3頁
單片機(jī)原理及應(yīng)用(C語言版)_第4頁
單片機(jī)原理及應(yīng)用(C語言版)_第5頁
已閱讀5頁,還剩75頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論