第4章51系列单片机并行口的功能模块及应用解析_第1页
第4章51系列单片机并行口的功能模块及应用解析_第2页
第4章51系列单片机并行口的功能模块及应用解析_第3页
第4章51系列单片机并行口的功能模块及应用解析_第4页
第4章51系列单片机并行口的功能模块及应用解析_第5页
已阅读5页,还剩110页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第四章51系列单片机的功能模块及应用主要掌握并行口、串行口、定时器的结构、工作原理及应用1§4-1并行口及其应用51系列单片机的并行口,按特性可分类为:单一的准双向口(如89C52的P1.2~P1.7)多功能复用的准双向口(如89C52的P1.0、P1.1,P3.0~P3.7)可作地址总线输出口的准双向口(P2)可作地址/数据总线口的三态双向口(P0)2每个I/O线均由锁存器,输出电路和输入缓冲器组成。每一条口线可独立用作输入和输出。作输出时可锁存数据,输入时可缓冲数据。CPU对口的读操作有两种:①读—修改—写操作(读口锁存器状态)例:ANLP0,A ;(P0)←(P0)∧(A)ORLP0,#data;(P0)←(P0)∨dataDECP0;(P0)←(P0)-1②读引脚操作(读口引脚上外部输入信息)例MOVA,P134§4-1-1P0口

P0口是一个三态双向口,可作为地址/数据分时复用口,也可作为通用I/O接口。其1位的结构原理如下图所示。P0口由8个这样的电路组成。5P0口1位结构图起输出锁存作用,8个锁存器构成了SFR—P0V1、V2组成输出驱动器,以增大带负载能力三态门1是引脚输入缓冲器读锁存器端口6

2.地址/数据分时复用功能

当P0口作为地址/数据分时复用总线时,可分为两种情况:一种是从P0口输出地址或数据,另一种是从P0口输入数据。

7在访问片外存储器而需从P0口输出地址或数据信号时,控制信号应为高电平“1”,使转换开关MUX把反相器4的输出端与V1接通,同时把与门3打开。1)当地址或数据为“1”时,经反相器4使V1截止,而经与门3使V2导通,P0.x引脚上出现相应的高电平“1”;

2)当地址或数据为"0"时,经反相器4使V1导通而V2截止,引脚上出现相应的低电平"0"。这样就将地址/数据的信号输出。83.通用I/O接口功能

当P0口作为通用I/O口使用,在CPU向端口输出数据时,对应的控制信号为0,转换开关把输出级与锁存器Q端接通,同时因与门3输出为0使V2截止,此时,输出级是漏极开路电路。当写脉冲加在锁存器时钟端CLK上时,与内部总线相连的D端数据取反后出现在Q端,又经输出V1反相,在P0引脚上出现的数据正好是内部总线的数据。当要从P0口输入数据时,引脚信息仍经输入缓冲器进入内部总线。9总之:一P0口作为一般I/O口使用

1P0口用作输出口:必须外接上拉电阻,才有高电平输出。2P0口作输入口:先向端口锁存器写入“1”。二P0口作为地址/数据总线使用1以P0口引脚输出低8位地址或数据信息2由P0口输入数据三P0口可驱动8个LSTTL电路10§4-1-2P1口(准双向口)11①P1.0、P1.1为多功能双向口,P1.2~P1.7为单一功能准双向口。

②P1口的第一功能是准双向口,每一位可分别定义为输入线或输出线。

③输出驱动部分由场效应管V1与内部上拉电阻组成。当其某位输出高电平时,可以提供上拉电流负载。12④P1的某一位作为输入线时,该位的口锁存器必须保持“1”。使输出场效应管截止。该引脚才可由内部拉高电路拉成高电平,或由外部电路拉成低电平。

⑤P1口具有驱动4个LSTTL负载的能力。1314§4-1-3P2口(准双向口)15当作为准双向通用I/O口使用时:控制信号使转换开关接向左侧,锁存器Q端经反相器3接V1,其工作原理与P1相同,也具有输入、输出、端口操作三种工作方式,负载能力也与P1相同。

161系统中外接程序存储器时:P2口输出程序存储器的高8位地址,不作I/O口使用。2系统中无外接程序存储器,而扩展有片外RAM的系统中:①片外RAM的容量<256B:P2口仍做输入/输出口使用。使用R0或R1作地址指针。②片外RAM的容量>256B:P2口不能做输入/输出口,而做系统扩展的高8位地址总线口使用。使用DPTR、P2R0、P2R1作地址指针。17§4-1-4P3口(准双向口)18

P3口是一多功能口,既做准双向口又做特殊输入输出口。1做通用I/O口使用:

P3口做输入使用,应由软件向口锁存器写“1”。192做第二功能使用:某位做第二功能使用该位D锁存器Q应被硬件自动置“1”。

P3.0RXDP3.5T1P3.1TXD(出)P3.6WR(出)P3.2INT0P3.7RD(出)P3.3INT1P3.4T03P3口具有驱动4个LSTTL负载的能力。20I/O端口的操作方式:(1)输出数据方式:CPU通过一条数据传送指令就可以把输出数据写入P0~P3的端口锁存器,然后通过输出驱动器送到端口引脚线。例如,下面的指令均可在P0口输出数据。

MOVP0,AANLP0,#dataORLP0,A(2)读端口数据方式:

CPU读入的这个数据并非端口引脚线上的数据。读端口数据可以直接读端口。例如,下面的指令均可以从P1口输入数据。

MOVA,P1MOV20H,P1MOVR0,P1MOV@R0,P121(3)读端口引脚方式:读端口引脚方式可以从端口引脚上读入信息。在这种方式下,CPU首先必须使欲读端口引脚所对应的锁存器置1,然后才能读端口引脚。因此,用户在读引脚时必须先置位锁存器后读,连续使用两条指令。例如,下面的程序可以读P1引脚上的低4位信号。

MOVP1,#0FH;置位P1引脚的低4位

MOVA,P1;读P1引脚上的低4位信号送累加器A22§4-1-5并行口的应用1外接蜂鸣器2利用可控硅控制加热电路3BCD码拨码盘的接口

BCD码拨码盘构造——一个拨码盘可以输入1位十进制数据。拨码盘拨到某个位置时,控制线分别与4位数据线中某几位接通。接通线定义为“1”,不通的线定义为“0”。23§4-2定时器及其应用定时器功能:

1定时操作

2测量外部输入信号

3定时输出

4监视系统正常工作24§4-2-1定时器的结构和工作原理

1定时器由一个N位计数器、计数时钟源控制电路、状态和控制寄存器等组成。2计数脉冲有两个来源:①外部的脉冲源②系统的时钟振荡器。内部时钟外部时钟↗N位计数器TFTMODTCON中断253用作定时器时,每经过一个机器周期,计数器自动加1,直到计数溢出;用作计数器时,外部时钟脉冲加在定时器的外输入端T0(P3.4)或T1(P3.5),每出现一次负跳变,计数器加1。4两个模拟开关,左边决定定时/计数器的工作状态,右边决定脉冲源是否加在计数器的输入端。516位的计数器由两个8位SFRTH和TL组成。6定时器工作不占用CPU时间,除非定时器/计数器溢出,才能中断CPU的当前操作。26定时器/计数器T0、T1的结构框图27§4-2-2定时器/计数器T0和T1一方式寄存器TMOD(89H)1不能进行位寻址,只能用字节寻址。复位时,TMOD所有位为0熟悉各位功能T1方式字段T0方式字段GATEC/TM1M0GATEC/TM1M028①GATE——门控位“1”:定时器的计数受外部引脚输入电平的控制“0”:定时器的计数不受外部引脚输入电平的控制②C/T——功能选择位“1”:计数功能“0”:定时功能③M1M0——工作方式选择位29

适于T0,两个8位计数器M1M0工作方式方式说明00013位定时器/计数器01116位定时器/计数器102具有自动重装初值的8位定时器/计数器113

30二控制寄存器TCON(88H)1既可字节寻址又可位寻址。复位时,TCON各位为0例:SETBTR1;启动定时器T1工作熟悉各位功能D7D6D5D4D3D2D1D08FH8EH8DH8CH8BH8AH89H88HTF1TR1TF0TR0IE1IT1IE0IT031TF1——定时器/计数器T1的溢出标志位TR1——定时器/计数器T1的运行控制位TF0——定时器/计数器T0的溢出标志位TR0——定时器/计数器T0的运行控制位IE1——外部中断1下降沿触发标志位IE0——外部中断0下降沿触发标志位IT1——外部中断1触发类型选择位IT0——外部中断0触发类型选择位32三定时器/计数器的初始化初始化即将控制字写入定时器/计数器的过程。初始化一般步骤:1写入初值TH0、TL0或TH1、TL12对TMOD赋值3对IE赋值(有中断产生时)4①若用软件启动,则仅把TR0或TR1置“1”;②若用外中断引脚电平启动,则还需给外引脚加启动电平。33四定时器/计数器的4种工作方式1方式034

方式0是一个13位的定时器/计数器,由TL0的低5位和TH0的8位组成。定时时间为T=12*(213-a)/foscs最大定时时间:M=213=8192T35例7:已知晶振频率fosc=6MHZ,若使用T0方式0产生10ms定时中断,试对T0进行初始化编程。

MOVTH0,#63HMOVTL0,#18HSETBTR0MOVIE,#82HRET36例:T0工作于方式0,要求在P1.0引脚上产生周期为2ms的方波输出(fosc=6MHZ)

ORG0000HAJMPMAINORG000BHAJMPINQPORG0030HMAIN:MOVTMOD,#00HMOVTH0,#0F0HMOVTL0,#0CHSETBTR0;启动T0SETBET0;允许T0中断

SETBEA;开放CPU中断

AJMP$;定时中断等待37

ORG4000H;中断服务程序INQP:MOVTH0,#0F0H;重写定时常数

MOVTL0,#0CHCPLP1.0;P1.0变反输出

RETI

382方式1

方式1是一个16位定时器/计数器,结构和操作方式与方式0基本相同。定时时间为T=12*(216-a)/foscs最大定时时间:M=216=65536T39例:设fosc=12MHz,T0工作于方式1,产生50ms定时中断,TF0为高级中断源。试编写主程序中的初试化程序和中断服务程序,使P1.0产生周期为1秒的方波。MAIN:MOVSP,

#EFHMOVTH0,

#3CHMOVTL0,

#0B0HMOVTMOD,#1MOVIP,#240

MOVIE,#82HSETBTR0MOV30H,#0AHPTF0:ORLTL0,#0B0H;中断服务程序

MOVTH0,#3CHDJNZ30H,PTF0RMOV30H,#0AHCPLP1.0PTF0R:RETI41用查询法:

MOV30H,#0AHMOVTH0,#3CHMOVTL0,#0B0HMOVTMOD,#1SETBTR0L2:JBCTF0,L1SJMPL2L1:MOVTH0,#3CHMOVTL0,#0B0H42

DJNZ30H,L2MOV30H,#0AHCPLP1.0SJMPL2433方式2

方式2是能重置初值的8位定时器/计数器,TL0作为8位计数器,TH0作为计数初值寄存器。适于用做较精确的定时脉冲信号发生器。定时时间T=12*(28-a)/foscs

最大定时时间:M=28=256T44定时器/计数器方式2的逻辑结构45

MOVTMOD,#60H;设置T1为方式2计数

MOVTH1,#9CH;赋初值

MOVTL1,#9CHSETBTR1DE:JBCTF1,RE;查询计数溢出

AJMPDERE:CPLP1.0AJMPDE例:用定时器1在方式2计数,要求每计满100次,将P1.0端取反。外部计数信号由P3.5引入,每跳变一次计数器加1100=28-a;a=156=9CH46保护现场赋计数初值到1s?(32H)加1(32H)=60?(32H)清0(31H)加1(31H)=60?(31H)清0(30H)加1(30H)=24?(30H)清0恢复现场返回例4.13(书111)aaNNNNYYYY图

中断服务程序流程图47例:当P3.4引脚上的电平发生负跳变时,从P1.0输出一个500μs的同步脉冲。请编程序实现该功能。查询方式,fosc=6MHz。48解:(1)模式选择

选T0为模式2,外部事件计数方式。当P3.4引脚上的电平发生负跳变时,T0计数器加1,溢出标志TF0置1;然后改变T0为500μs定时工作方式,并使P1.0输出由1变为0。T0定时到产生溢出,使P1.0输出恢复高电平,T0又恢复外部事件计数方式。如图所示。49(2)计算初值

T0工作在外部事件计数方式,当计数到28时,再加1计数器就会溢出。设计数初值为X,当再出现一次外部事件时,计数器溢出。则:X+1=28

X=28

-1=11111111B=0FFH

T0工作在定时工作方式,设晶振频率为6MHz,500μs相当于250个机器周期。因此,初值X为(28-X)×2μs=500μs

X=6=06H50(3)程序清单START:MOVTMOD,#06H;设置T0为模式2,外部计数方式

MOVTL0,#0FFH;T0计数器初值

MOVTH0,#0FFHSETBTR0;启动T0计数

LOOP1:JBCTF0,PTFO1;查询T0溢出标志,;TF0=1时转,且清TF0=0SJMPLOOP1;51

PTFO1:CLRTR0;停止计数

MOVTMOD,#02H;设置T0为模式2,定时方式

MOVTL0,#06H;送初值,定时500μsMOVTH0,#06HCLRP1.0;P1.0清0

SETBTR0;启动定时500μsLOOP2:JBCTF0,PTFO2;查询T0溢出标志,;TF0=1时转,且清TF0=0;(第一个500μs到否?)

SJMPLOOP2;等待

PTFO2:SETBP1.0;P1.0置1CLRTR0;停止计数

SJMPSTART52定时器/计数器方式3的逻辑结构

4方式3TH053

方式3只适用于T0,T0分为两个独立的8位计数器TL0和TH0。一般T1用作串行口波特率发生器。最大定时时间:M=28=256T5455例用定时器T0,分别产生两个方波,一个周期为200s,另一个周期为400s,该单片机同时使用串行口,用定时器/计数器作为波特率发生器。(fosc=9.216MHZ)。56解:定时初值计算TL0=28-9.216*106*100*10-6/12=256-76.8=179.2

转换十六进制为0B3HTH0=28-9.216*106*200*10-6/12=256-153.6=102.4

转换十六进制为66H57

ORG0000HAJMPMAINORG000BH;TL0中断入口

AJMPITL0ORG001BH;TH0中断入口

AJMPITH0ORG0100HMAIN:MOVSP,#60HMOVTMOD,#23H

58

MOVTL0,#0B3HMOVTH0,#66HMOVTL1,#data;data是根据波特率;要求设置的常数(初值)

MOVTH1,#dataSETBTR0;启动TL0初值

SETBTR1;启动TH0初值

SETBET0;允许TL0中断

SETBET1;允许TH0中断

SETBEA;CPU中断开放

AJMP$

59

ORG0200HITL0:MOVTL0,#0B3HCPLP1.0;输出方波200sRETIITH0:MOVTH0,#66HCPLP1.1;输出方波400sRETI60例:设某用户系统已使用了两个外部中断源,并置定时器T1工作在模式2,作串行口波特率发生器用。现要求再增加一个外部中断源,并由P1.0引脚输出一个5kHz的方波。Fosc=12MHz.61解:(1)工作模式

可设置T0工作在模式3计数器方式,把T0的引脚作附加的外部中断输入端,TL0的计数初值为FFH,当检测到T0引脚电平出现由1至0的负跳变时,TL0产生溢出,申请中断,相当于一个边沿触发的外部中断源。

T0模式3下,TL0作计数用,而TH0用作8位的定时器,定时控制P1.0引脚输出5kHz的方波信号。62(2)计算初值TL0的计数初值为FFH。TH0的计数初值X为:

P1.0方波周期T=1/(5kHz)=0.2ms=200μs

用TH0作定时100μs时,

X=256-100×12/12=15663(3)程序清单

MOVTMOD,#27H;T0为模式3,计数方式

;T1为模式2,定时方式

MOVTL0,#0FFH;TL0计数初值

MOVTH0,#156;TH0计数初值

MOVTL1,#data;data是根据波特率;要求设置的常数(初值)

MOVTH1,#dataMOVTCON,#55H;外中断0,外中断1边沿触发,;启动T0,T1MOVIE,#9FH;开放全部中断…64TL0溢出中断服务程序(由000BH转来)TL0INT:MOVTL0,#0FFH;TL0重赋初值

……;(中断处理)

RETI

TH0溢出中断服务程序(由001BH转来)TH0INT:MOVTH0,#156;TH0重赋初值

CPLP1.0;P1.0取反输出

RETI串行口及外部中断0,外部中断1的服务程序略。65设时钟频率为6MHz。编写利用T0产生1s定时的程序。66五门控位的应用GATE位是控制外部输入脉冲对定时计数器的控制。当为“1”时,允许外部输入电平控制启、停定时器。利用这个特性可测量外部输入脉冲的宽度。例:利用T0门控位测试INT0引脚上出现的正脉冲的宽度,将所测得值高位存入片内71H单元,低位存入片内70H单元。(fosc=12MHz)测试时,应在/INT0为低电平时,设TR0为1;当/INT0变高时,启动计数;当/INT0再变低时,停止计数。该计数值即被测正脉冲宽度。67MOVTMOD,#09H;T0定时器方式,GATE=1MOVTL0,#00HMOVTH0,#00HMOVR0,#70HJBP3.2,$;等待P3.2变低SETBTR0;启动T0准备工作JNBP3.2,$;等待P3.2变高JBP3.2,$;等待P3.2再次变低CLRTR0;停止计数MOV@R0,TL0;存放计数低字节INCR0MOV@R0,TH0;存放计数高字节SJMP$68§4-3串行接口UART一两种基本的通信方式(a)并行通信;(b)串行通信69二串行通信传输方式(a)单工方式;(b)半双工方式;(c)全双工方式70三串行通信两种基本方式1异步通信①异步通信中数据或字符是一帧一帧传送。②帧即为一个字符的完整通信格式,又称帧格式。在帧格式中,一个字符由4部分组成:起始位、数据位、奇偶校验位、停止位。串行异步传送的字符格式712同步通信

数据或字符开始处是由一同步字符来指示,并由时钟实现发送端和接收端同步。四

波特率(Baudrate)①波特率就是数据的传送速率,即每秒钟传送的二进制位数,单位为位/秒。②要求发送端与接收端的波特率必须一致。72§4-3-1串行接口的组成和特性

51系列单片机的串行口是全双工异步串行通信接口。一串行口结构1波特率发生器主要由T1、T2及内部的一些控制开关和分频器组成。提供串行口的时钟信号即TCLK、RCLK。73串行口结构框图74注意:接收器是双缓冲结构,在前一个字节被从接收缓冲器SBUF读出之前,第二个字节即开始被接收(串行输入至移位寄存器),但是,在第二个字节接收完毕而前一个字节CPU未读取时,会丢失前一个字节.752串行口的内部包含——①串行数据缓冲寄存器SBUF数据接收缓冲器(只读出不写入)和数据发送缓冲器(只写入不读出)。物理上隔离,共用一个地址(99H)。当向SBUF发“写”命令时(执行MOVSBUF,A

),即从片内总线向发送SBUF写入数据,并开始由TXD引脚向外发送一帧数据,发送完使TI=1。在满足串行口接收中断标志位RI(SCON.0)=0的条件下,置允许接收位REN(SCON.4)=1就会接收一帧数据进入移位寄存器,并装载到接收SBUF中,同时使RI=1。当发读SBUF命令时(执行MOVA,SBUF),便由接收SBUF取出信息通过内部总线送CPU。76②串行口控制寄存器③串行数据输入/输出引脚接收方式下,串行数据从RXD(P3.0)输入。串行口内部在接收缓冲器之前还有移位寄存器,构成串行接收双缓冲结构。避免数据接收重叠。发送方式下,串行数据从TXD(P3.1)输出。④串行口控制逻辑77二串行口控制1串行口控制寄存器SCON(98H)

①SM0和SM1SM0SM1SM2RENTB8RB8TIRISM0SM1工作方式功能波特率00

0扩展移位寄存器fosc/1201

18位UART由定时器控制10

29位UARTfosc/32fosc/6411

39位UART由定时器控制78②SM2方式2和方式3的多机通信控制位

方式0,SM2=0。方式1,若SM2=1,只有接收到有效停止位,接收中断RI才置1。方式2和方式3中,如SM2=1,则接收到的第9位数据(RB8)为0时不启动接收中断标志RI(即RI=0),并且将接收到的前8位数据丢弃;RB8为1时,才将接收到的前8位数据送入SBUF,并置位RI,产生中断请求。当SM2=0时,则不论第9位数据为0或1,都将前8位数据装入SBUF中,并产生中断请求。该功能用于多机通信中。79③REN允许串行接收位

1—允许接收;0—禁止接收由软件置1或清0,相当于串行接收的开关。在串行通信接收控制过程中,如果满足RI=0和REN=1(允许接收)的条件,就允许接收,一帧数据就装载入接收SBUF中。④TB8发送数据D8位

在方式2和方式3时,TB8为所要发送的第9位数据。在多机通信中,以TB8位的状态表示主机发送的是地址还是数据:TB8=0为数据,TB8=1为地址;也可用作数据的奇偶校验位。该位由软件置位或复位。在方式0或方式1中,该位未用80⑤RB8接收数据D8位在方式2和方式3时,接收到的第9位数据,可作为奇偶校验位或地址帧或数据帧的标志。方式1时,若SM2=0,则RB8是接收到的停止位。在方式0时,不使用RB8位。⑥TI发送中断标志在方式0时,当发送数据第8位结束后,或在其它方式发送停止位后,由内部硬件使TI置位,向CPU请求中断。意味着向CPU提供“发送缓冲器SBUF已空”的信息,CPU可以准备发送下一帧数据。CPU在响应中断后,必须用软件清零。此外,TI也可供查询使用。81⑦RI接收中断标志位在方式0时,当接收数据的第8位结束后,或在其它方式接收到停止位的中间时由内部硬件使RI置位,向CPU请求中断。表示一帧数据接收结束,并已装入接收SBUF中,要求CPU取走数据。在CPU响应中断后,也必须用软件清零。RI也可供查询使用。822特殊功能寄存器PCON

SMOD位是串行口波特率系数控制位,为1时使波特率加倍。其余位是掉电方式控制位,与串行口无关。SMOD83§4-3-2串行接口的工作原理一方式01方式0为同步移位寄存器输入/输出方式,常用于扩展并行I/O口。2数据由RXD串行输入/输出,TXD输出移位脉冲。3数据传输波特率固定为fosc/12。4接收/发送的是8位数据,传输时低位在前。84输出:当执行写SBUF的指令时(MOVSBUF,A),启动串行数据发送。从低位开始串行输出。当完成一个字节的输出后就停止移位,并置位TI。输入:

在REN=1,RI=0时启动串行口接收。当外部移位寄存器内容移入内部移位寄存器,并写入SBUF,则置位RI,停止移位,完成一个字节的输入。注意:每当发送或接收完8位数据时,由硬件将发送中断TI或接收中断RI标志置“1”;CPU响应TI或RI中断请求时,不会清除标志,必须由软件清“0”.85二方式11方式1时,串行口为10位通用异步接口。2数据传输波特率由定时/计数器T1和T2的溢出决定,由程序设定。当T2CON中RCLK和TCLK置位时,由T2作接收/发送的波特率发生器;当RCLK和TCLK都为0时,由T1作接收/发送的波特率发生器。3数据从引脚TXD端输出,从引脚RXD输入。86发送当数据写入发送缓冲器时,启动发送器开始发送。8位数据发送完,置位TI=1,并申请中断,通知CPU可发送下一个数据。接收在REN=1的前提下,确认是真正起始位“0”后,开始接收一帧数据。当RI=0且SM2=0时,数据被有效接收。将接收到的数据装入串行口的SBUF,并置位RI.87三方式2和方式31CPU向发送缓冲器写入数据就启动串行口发送。发送完毕,使TI=1。2接收时,先置REN为“1”,将RI清“0”。再根据SM2状态和所接收到RB8状态决定串口在信息到来后是否会使RI=1,申请中断,接收数据。当SM2=0,不管RB8状态,将RI置1—串口接收当SM2=1,RB8=1时,多机通信,接收信息为地址,将RI置1—串口接收

RB8=0时,接收信息为数据,但不发给本从机,此时RI不置1—数据丢失88§4-3-3波特率一方式0:波特率=振荡器频率/12二方式2:波特率=2SMOD*振荡器频率/64三方式1、3(T1产生波特率):波特率=2SMOD*振荡器频率/[32*12(256-(TH1))]注:记住当振荡器频率选用11.0592MHZ时,对于常用波特率,能正确计算T1的初值。89§4-3-4多机通信原理在主从式多机系统中:

1主机发出的信息有两类。一类为地址,用来确定需要和主机通信的从机,特征是串行传送的第9位数据为1;另一类是数据,特征是串行传送的第9位数据为0。2对从机来说,在接收时,若RI=0,则只要SM2=0,接收总能实现;而若SM2=1,则发送的第9位TB8必须为1接收才能进行。901主机首先发出要求通信的从机地址信号。此时,所有从机的SM2都为“1”,所有从机均收到地址信号。2从机判断主机发出的地址信号是否与本从机号相符。相符的从机SM2“0”,反之为“1”。3主机发送数据帧。仅SM2=0的从机可收到。91§4-3-5串行口的应用和编程一串行口应用同一印板内,两个单片机串行口可直接通信。单片机与PC机之间利用串行口通信,必须进行电平转换。二串行口编程串行口初始化编程:选择串行口工作方式,波特率,允许串行口中断。即对SCON、PCON、TMOD、TCON、TH1、TL1、IE、IP、SBUF编程。92例1:编写程序,功能为对串行口初始化为方式1输入/输出,fosc=11.0592MHZ,波特率为9600,先在串行口上输出字符串“MCS-51”,接着读串行口上输入的字符,又将该字符从串行口上输出。

MOVTMOD,#20HMOVTH1,#0FDHMOVTL1,#0FDHSETBTR1MOVSCON,#52HMOVR4,#0MOVDPTR,#TSAB93LP1:MOVA,R4MOVCA,@A+DPTRJZLP6LP3:JBCTI,LP2SJMPLP3LP2:MOVSBUF,AINCR4SJMPLP1LP6:JBCRI,LP5SJMPLP6LP5:MOVA,SBUFLP8:JBCTI,LP7SJMPLP8LP7:MOVSBUF,ASJMPLP6TSAB:DB‘MCS-51’DB0AH,0DH,094例2:89C52串行口按双工方式进行数据收发,要求波特率为1200,串口工作在方式1。编写有关的通信程序。设发送数据区的首地址为20H,接收数据区的首地址为40H,fosc为11.0592MHz。解:双工通信要求收、发能同时进行。实际上,收、发操作主要是在串行接口进行,CPU只是把数据从接收缓冲器读出和把数据写入发送缓冲器。数据传送用中断方式进行,响应中断以后,通过检测是RI置位还是TI置位来决定CPU是进行发送操作还是接收操作。发送和接收都通过调用子程序来完成。95

主程序

MOVTMOD,#20H;T1设为模式2MOVTL1,#0E8H;MOVTH1,#0E8H;SETBTR1;启动定时器1MOVSCON,#50H;设置为方式1,REN=1MOVR0,#20H;发送数据区首址

MOVR1,#40H;接收数据区首址

ACALLSOUT;先输出一个字符

SETBESSETBEA……

中断服务程序

ORG0023H;串行口中断入口

AJMPSBR1;转至中断服务程序

ORG0100HSBR1:JNBRI,SEND;TI=1,为发送中断

ACALLSIN;RI=1,为接收中断

SJMPNEXT;转至统一的出口SEND:ACALLSOUT;调用发送子程序NEXT:RETI;中断返回

96发送子程序SOUT:CLRTIMOVA,@R0;取发送数据到AINCR0;修改发送数据指针

MOVSBUF,A;发送

RET;返回接收子程序

SIN:CLRRIMOVA,SBUF;读出接收缓冲区内容

MOV@R1,A;读入接收缓冲区

INCR1;修改接收数据指针

RET;返回97用串行口进行双机异步通信——

例3:将甲机片内RAM50H—5FH单元中的数据块从串行口输出。定义在方式3下发送,TB8作奇偶校验位。采用定时器1方式2作波特率发生器,波特率为1200,fosc=11.0592MHz。

使乙机从甲机接收16个字节数据块,并存入片外3000H—300FH单元。接收过程中要求判奇偶标志RB8。若出错则置F0标志为1,反之为0,然后返回。98甲机发送子程序——MOVTMOD,#20HMOVTL1,#0EBHMOVTH1,#0E8HSETBTR1MOVSCON,#0C0HMOVR0,#50HMOVR7,#10HTRS:MOVA,@R0MOVC,PMOVTB8,CMOVSBUF,AWAIT:JNBTI,$CLRTIINCR0DJNZR7,TRSRET99乙机接收子程序——

MOVTMOD,#20HMOVTL1,#0EBHMOVTH1,#0E8HSETBTR1MOVSCON,#0C0HMOVDPTR,#3000HMOVR7,#10HSETBRENWAIT:JNBRI,$CLRRIMOVA,SBUFJNBPSW.0,PZJNBRB8,ERRSJMPYESPZ:JBRB8,ERRYES:MOVX@DPTR,AINCDPTRDJNZR7,WAITCLRPSW.5RETERR:SETBPSW.5RET注意:双机通信时,两机应用相同的工作方式和波特率。100§4-3-6RS232C总线和电平转换器RS-232C是由美国电子工业协会(EIA)正式公布的,在异步串行通信中应用最广的标准总线(C表示此标准修改了三次)。它包括了按位串行传输的电气和机械方面的规定,适用于短距离或带调制解调器的通信场合。为了提高数据传输率和通信距离,EIA又公布了RS-422,RS-423和RS-485串行总线接口作准。101

ELARS-232C是目前最常用的串行接口标准,用于实现计算机与计算机之间、计算机与外设之间的数据通信。该标准的目的是定义数据终端设备(DTE)之间接口的电气特性。一般

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论