收藏 分销(赏)

第6章-MCS-51单片机内部资源及编程.ppt

上传人:二*** 文档编号:12525662 上传时间:2025-10-24 格式:PPT 页数:67 大小:335KB 下载积分:5 金币
下载 相关 举报
第6章-MCS-51单片机内部资源及编程.ppt_第1页
第1页 / 共67页
本文档共67页,全文阅读请下载到手机保存,查看更方便
资源描述
单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,*,.,*,第6章 MCS-51单片机内部资源及编程,第,6,章 MCS-51单片机内部资源及编程,MCS-51单片机的内部资源主要有并行I/O口、定时器/计数器、串行接口以及中断系统,MCS-51单片机的大部分功能就是通过对这些资源的利用来实现的。下面分别对其介绍,并用汇编语言和C语言分别给出相应例子。,6.1 并行输入/输出接口,6.1.1 并行口应用与编程,【例6-1】,利用单片机的P1口接8个发光二极管,P0口接8个开关,编程实现,当开关动作时,对应的发光二极管亮或灭。,只须把P0口的内容读出后,通过P1口输出即可。,汇编程序:,ORG 0100H,MOV P0,#0FFH,LOOP:MOV A,P0,MOV P1,A,SJMP LOOP,.,C51语言程序:,#include ,void main(void),unsigned char i;,P0=0 xff;,for(;)i=P0;P1=i;,.,6.2 定时/计数器接口,6.2.1 定时/计数器的主要特性,1MCS-51系列中51子系列有两个16位的可编程定时/计数器:定时/计数器T0和定时/计数器T1,52子系列有三个,还有一个定时/计数器T2。,2每个定时/计数器既可以对系统时钟计数实现定时,也可以对外部信号计数实现计数功能,通过编程设定来实现。,3每个定时/计数器都有多种工作方式,其中T0有四种工作方式;T1有三种工作方式,T2有三种工作方式。通过编程可设定工作于某种方式。,4每一个定时/计数器定时计数时间到时产生溢出,使相应的溢出位置位,溢出可通过查询或中断方式处理。,.,6.2.1 定时/计数器T0、T1的结构及工作原理,TH1,TL1,TH0,TL0,TCON,TMOD,启动,启动,溢出,溢出,工作方式,工作方式,中断请求,内部总线,Tcy,T1,T0,.,加法计数器在使用时注意两个方面。,第一,由于它是加法计数器,每来一个计数脉冲,加法器中的内容加1个单位,当由全1加到全0时计满溢出,因而,如果要计N个单位,则首先应向计数器置初值为X,且有:,初值X=最大计数值(满值)M计数值N,在不同的计数方式下,最大计数值(满值)不一样,一般来说,当定时器/计数器工作于R位计数方式时,它的最大计数值(满值)为2的R次幂。,第二,当定时/计数器工作于计数方式时,对芯片引脚T0(P3.4)或T1(P3.5)上的输入脉冲计数,计数过程如下:在每一个机器周期的S5P2时刻对T0(P3.4)或T1(P3.5)上信号采样一次,如果上一个机器周期采样到高电平,下一个机器周期采样到低电平,则计数器在下一个机器周期的S3P2时刻加1计数一次。因而需要两个机器周期才能识别一个计数脉冲,所以外部计数脉冲的频率应小于振荡频率的1/24。,.,6.2.2 定时/计数器的方式和控制寄存器,一定时/计数器的方式寄存器TMOD,TMOD,D7,D6,D5,D4,D3,D2,D1,D0,(89H),GATE,C/T,M1,M0,GATE,C/T,M1,M0,定时器1,定时器0,其中:,M1、M0为工作方式选择位,用于对T0的四种工作方式,T1的三种工作方式进行选择,选择情况如下,M1,M0,工作方式,方式说明,0,0,0,13位定时/计数器,0,1,1,16位定时/计数器,1,0,2,8位自动重置定时/计数器,1,1,3,两个8位定时/计数器(只有T0有),.,C/T:定时或计数方式选择位,当C/T=1时工作于计数方式;当C/T=0时工作于定时方式。,GATE:门控位,用于控制定时/计数器的启动是否受外部中断请求信号的影响。,二定时/计数器的控制寄存器TCON,TCON,D7,D6,D5,D4,D3,D2,D1,D0,(88H),TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,其中:,TF1:定时/计数器T1的溢出标志位,当定时/计数器T1计满时,由硬件使它置位,如中断允许则触发T1中断。进入中断处理后由内部硬件电路自动清除。,TR1:定时/计数器T1的启动位,可由软件置位或清零,当TR1=1时启动;TR1=0时停止。,.,TF0:定时/计数器T0的溢出标志位,当定时/计数器T0计满时,由硬件使它置位,如中断允许则触发T0中断。进入中断处理后由内部硬件电路自动清除。,TR0:定时/计数器T0的启动位,可由软件置位或清零,当TR0=1时启动;TR0=0时停止。,6.2.3 定时/计数器的工作方式,一方式0,振荡器,12,TLx,(低5位),THx,(高8位),TFx,与,或,Tx,TRx,GATE,INTx,S2,S1,C/T,Tcy,中断请求,.,方式1是13位的定时/计数方式,因而最大计数值(满值)为2的13次幂,等于8192。如计数值为N,则置入的初值X为:,X=8192-N,如定时/计数器T0的计数值为1000,则初值为7192,转换成二进制数为1110000011000B,则TH0=11100000B,TL0=00011000B。,二方式1,方式1的结构与方式0结构相同,只是把13位变成16位,16位的加法计数器被全部用上。,由于是16位的定时/计数方式,因而最大计数值(满值)为2的16次幂,等于65536。如计数值为N,则置入的初值X为:,X=65536-N,如定时/计数器T0的计数值为1000,则初值为65536-1000=64536,转换成二进制数为1111110000011000B,则TH0=11111100B,TL0=00011000B。,.,三方式2,振荡器,12,TLx,(8位),THx,(8位),TFx,与,或,Tx,TRx,GATE,INTx,S2,S1,C/T,Tcy,中断请求,重装初值,8,方式2下,16位的计数器只用了8位来计数,用的是TL0(或TL1)的8位来进行计数,而TH0(或TH1)用于保存初值。当TL0(或TL1)计满时则溢出,一方面使TF0(或TF1)置位,另一方面溢出信号又会触发图6.5上的三态门,使三态门导通,TH0(或TH1)的值就自动装入TL0(或TL1)。,.,由于是8位的定时/计数方式,因而最大计数值(满值)为2的8次幂,等于256。如计数值为N,则置入的初值X为:,X=256-N,如定时/计数器T0的计数值为100,则初值为256-100=156,转换成二进制数为10011100B,则TH0=TL0=10011100B。,注意:,由于方式2计满后,溢出信号会触发三态门自动地把TH0(或TH1)的值装入TL0(或TL1)中,因而如果要重新实现N个单位的计数,不用重新置入初值。,四方式3,方式3只有定时/计数器T0才有,当M1M0两位为11时,定时/计数器T0工作于方式3,方式3的结构如下图.,方式3下,定时/计数器T0被分为两个部分TL0和TH0,其中,TL0可作为定时/计数器使用,占用T0的全部控制位:GATE、C/T、TR0和TF0;而TH0固定只能作定时器使用,对机器周期进行计数,这时它占用定时/计数器T1的TR1位、TF1位和T1的中断资源。,.,振荡器,12,TL0,(8位),TF0,与,或,T0,TR0,GATE,INT0,S2,S1,C/T,Tcy,中断请求,TH0,(8位),TF1,S2,中断请求,T1,TR1,.,6.2.4 定时/计数器的初始化编程及应用,一定时/计数器的编程,MCS-51单片机定时/计数器初始化过程如下:,1根据要求选择方式,确定方式控制字,写入方式控制寄存器TMOD。,2根据要求计算定时/计数器的计数值,再由计数值求得初值,写入初值寄存器。,3根据需要开放定时/计数器中断(后面须编写中断服务程序)。,4设置定时/计数器控制寄存器TCON的值,启动定时/计数器开始工作。,5.等待定时/计数时间到,到则执行中断服务程序;如用查询处理则编写查询程序判断溢出标志,溢出标志等于1,则进行相应处理。,.,二定时/计数器的应用,通常利用定时/计数器来产生周期性的波形。利用定时/计数器产生周期性波形的基本思想是:利用定时/计数器产生周期性的定时,定时时间到则对输出端进行相应的处理。如产生周期性的方波只须定时时间到对输出端取反一次即可。,【例6-2】,设系统时钟频率为12MHZ,用定时/计数器T0编程实现从P1.0输出周期为500s的方波。,分析:从P1.0输出周期为500s的方波,只须P1.0每250s取反一次则可。当系统时钟为12MHZ,定时/计数器T0工作于方式2时,最大的定时时间为256s,满足250s的定时要求,方式控制字应设定为00000010B(02H)。系统时钟为12MHZ,定时250s,计数值N为250,初值X=256-250=6,则TH0=TL0=06H。,.,汇编程序:,ORG 0000H,LJMP MAIN,ORG 000BH ;中断处理程序,CPL P1.0,RETI,ORG 0100H ;主程序,MAIN:MOV TMOD,#02H,MOV TH0,#06H,MOV TL0,#06H,SETB EA,SETB ET0,SETB TR0,SJMP$,END,C语言程序:,#include /包含特殊功能寄存器库,sbit P1_0=P10;,void main(),TMOD=0 x02;,TH0=0 x06;TL0=0 x06;,EA=1;ET0=1;,TR0=1;,while(1);,void time0_int(void)interrupt 1 /中断服务程序,P1_0=!P1_0;,(1)采用中断处理方式的程序:,.,(2)采用查询方式处理的程序,汇编程序:,ORG 0000H,LJMP MAIN,ORG 0100H ;主程序,MAIN:MOV TMOD,#02H,MOV TH0,#06H,MOV TL0,#06H,SETB TR0,LOOP:JBC TF0,NEXT,;查询计数溢出,SJMP LOOP,NEXT:CPL P1.0,SJMP LOOP,SJMP$,END,C语言程序:,#include /包含特殊功能寄存器库,sbit P1_0=P10;,void main(),char i;,TMOD=0 x02;,TH0=0 x06;TL0=0 x06;,TR0=1;,for(;),if(TF0)TF0=0;P1_0=!P1_0;/查询计数溢出,.,如果定时时间大于65536s,这时用一个定时/计数器直接处理不能实现,这时可用两个定时/计数器共同处理或一个定时/计数器配合软件计数方式处理。,【例6-3】,设系统时钟频率为12MHZ,编程实现从P1.1输出周期为1s的方波。,根据例6-2的处理过程,这时应产生500ms的周期性的定时,定时到则对P1.1取反就可实现。由于定时时间较长,一个定时/计数器不能直接实现,可用定时/计数器T0产生周期性为10ms的定时,然后用一个寄存器R2对10ms计数50次或用定时/计数器T1对10ms计数50次实现。系统时钟为12MHZ,定时/计数器T0定时10ms,计数值N为10000,只能选方式1,方式控制字为00000001B(01H),初值X:,X=65536-10000=55536=1101100011110000B,则TH0=11011000B=D8H,TL0=11110000B=F0H。,.,(1)用寄存器R2作计数器软件计数,中断处理方式。,汇编程序:,ORG 0000H,LJMP MAIN,ORG 000BH,LJMP INTT0,ORG 0100H,MAIN:MOV TMOD,#01H,MOV TH0,#0D8H,MOV TL0,#0F0H,MOV R2,#00H,SETB EA,SETB ET0,SETB TR0,SJMP$,INTT0:MOV TH0,#0D8H,MOV TL0,#0F0H,INC R2,CJNE R2,#32H,NEXT,CPL P1.1,MOV R2,#00H,NEXT:RETI,END,.,C语言程序:,#include /包含特殊功能寄存器库,sbit P1_1=P11;,char i;,void main(),TMOD=0 x01;,TH0=0 xD8;TL0=0 xf0;,EA=1;ET0=1;,i=0;,TR0=1;,while(1);,void time0_int(void)interrupt 1 /中断服务程序,TH0=0 xD8;TL0=0 xf0;,i+;,if(i=50)P1_1=!P1_1;i=0;,.,(2)用定时/计数器T1计数实现,定时/计数器T1工作于计数方式时,计数脉冲通过T1(P3.5)输入,设定时/计数器T0定时时间到对T1(P3.5)取反一次,则T1(P3.5)每20ms产生一个计数脉冲,那么定时500ms只须计数25次,设定时/计数器T1工作于方式2,初值X=256-25=231=11100111B=E7H,TH1=TL1=E7H。因为定时/计数器T0工作于方式1,定时,则这时方式控制字为01100001B(61H)。定时/计数器T0和T1都采用中断方式工作。,汇编程序如下:,ORG 0000H,LJMP MAIN,ORG 000BH,MOV TH0,#0D8H,MOV TL0,#0F0H,CPL P3.5,RETI,ORG 001BH,CPL P1.1,RETI,.,ORG 0100H,MAIN:MOV TMOD,#61H,MOV TH0,#0D8H,MOV TL0,#0F0H,MOV R2,#00H,MOV TH1,#0E7H,MOV TL1,#0E7H,SETB EA,SETB ET0,SETB ET1,SETB TR0,SETB TR1,SJMP$,END,C语言程序如下:,#include /包含特殊功能寄存器库,sbit P1_1=P11;,sbit P3_5=P35;,void main(),.,TMOD=0 x61;,TH0=0 xD8;TL0=0 xf0;,TH1=0 xE7;TL1=0 xE7;,EA=1;,ET0=1;ET1=1;,TR0=1;TR1=1;,while(1);,void time0_int(void)interrupt 1 /T0中断服务程序,TH0=0 xD8;TL0=0 xf0;,P3_5=!P3_5;,void time1_int(void)interrupt 3 /T1中断服务程序,P1_1=!P1_1;,.,6.3 串行接口,6.3.1 通讯的基本概念,一并行通信和串行通信,计,算,机,0,1,0,0,1,0,0,1,计,算,机,0,1,0,0,1,0,0,1,(或外设),D0,D1,D2,D3,D4,D5,D6,D7,控制或选通,状态,计,算,机,计,算,机,(或外设),计算机与外界的通信有两种基本方式:并行通信和串行通信。,.,根据信息传送的方向,串行通信可以分为单工、半双工和全双工3种。,(a),A,B,(b),(c),A,B,A,B,s,s,二同步通信和异步通信,串行通信按信息的格式又可分为异步通信和同步通信两种方式。,1串行异步通信方式,串行异步通信方式的特点是数据在线路上传送时是以一个字符(字节)为单位,未传送时线路处于空闲状态,空闲线路约定为高电平“1”。传送一个字符又称为一帧信息,传送时每一个字符前加一个低电平的起始位,然后是数据位,数据位可以是58位,低位在前,高位在后,数据位后可以带一个奇偶校验位,最后是停止位,停止位用高电平表示,它可以是1位、1位半或2位。格式如图.,.,第n+1个字符,起始位,奇偶校验位,停止位,下一个起始位,D2,D1,D0,D3,D4,D5,D6,D7,数据位,D0,D1,0,0,1,0/1,0/1,0/1,0/1,0/1,0/1,0/1,0/1,0/1,0/1,0/1,D2,第n个字符,由于一次只传送一个字符,因而一次传送的位数比较少,对发送时钟和接收时钟的要求相对不高,线路简单,但传送速度较慢。,2串行同步通信方式,串行同步通信方式的特点是数据在线路上传送时以字符块为单位,一次传送多个字符,传送时须在前面加上一个或两个同步字符,后面加上校验字符,格式如图:,同步字符1,同步字符2,数据块,校验字符1,校验字符2,同步方式时一次连续传送多个字符,传送的位数多,对发送时钟和接收时钟要求较高,往往用同一个时钟源控制,控制线路复杂,传送速度快。,.,三波特率,波特率是指串行通信中,单位时间传送的二进制位数,单位为bps。,在异步通信中,传输速度往往又可用每秒传送多少个字节来表示(Bps)。它与波特率的关系为:,波特率(bps)=一个字符的二进制位数字符/秒(Bps),例如:每秒传送200个字符,每个字符1位起始位、8个数据位、1个校验位和1个停止位。则波特率为2200bps。,6.3.2 MCS-51单片机串行口功能与结构,一功能,MCS-51单片机具有一个全双工的串行异步通信接口,可以同时发送、接收数据,发送、接收数据可通过查询或中断方式处理,使用十分灵活,.,它有四种工作方式,分别是方式0、方式1、方式2和方式3。其中:,方式0,称为同步移位寄存器方式,一般用于外接移位寄存器芯片扩展I/O接口。,方式1,8位的异步通信方式,通常用于双机通信。,方式2和方式3,9位的异步通信方式,通常用于多机通信。,二结构,发送SBUF,接收SBUF,发送控制器,接收控制器,输入移位寄存器,串行口控制寄存器,波特率发生器,串行口中断,内部总线,门,+,RXD(P3.0),TXD(P3.1),RI,TI,.,MCS-51单片机串行口主要由发送数据寄存器、发送控制器、输出控制门、接收数据寄存器、接收控制器、输入移位寄存器等组成,从用户使用的角度,它由三个特殊功能寄存器组成:发送数据寄存器和接收数据寄存器合起用一个特殊功能寄存器SBUF(串行口数据寄存器),串行口控制寄存器SCON和电源控制寄存器PCON。,三串行口控制寄存器SCON,SCON,D7,D6,D5,D4,D3,D2,D1,D0,98H,SM0,SM1,SM2,REN,TB8,RB8,TI,RI,其中:,SM0、SM1:串行口工作方式选择位。用于选择四种工作方式,SM0,SM1,方式,功能,波特率,0,0,方式0,移位寄存器方式,f,osc,/12,0,1,方式1,8位异步通信方式,可变,1,0,方式2,9位异步通信方式,f,osc,/32或f,osc,/64,1,1,方式3,9位异步通信方式,可变,.,SM2:多机通信控制位。,REN:允许接收控制位。当REN=1,则允许接收,当REN=0,则禁止接收。,TB8:发送数据的第9位。,RB8:接收数据的第9位。,TI:发送中断标志位。,RI:接收中断标志位。,四电源控制寄存器PCON,PCON,D7,D6,D5,D4,D3,D2,D1,D0,87H,SMOD,当SMOD位为1,则串行口方式1、方式2、方式3的波特率加倍。,.,6.3.3 串行口的工作方式,一方式0,方式0通常用来外接移位寄存器,用作扩展I/O口。方式0工作时波特率固定为:fosc/12。工作时,串行数据通过RXD输入和输出,同步时钟通过TXD输出。发送和接收数据时低位在前,高位在后,长度为8位。,(1)发送过程,在TI=0时,当CPU执行一条向SBUF写数据的指令时,如MOV SBUF,A,就启动发送过程。经过一个机器周期,写入发送数据寄存器中的数据按低位在前,高位在后从RXD依次发送出去,同步时钟从TXD送出。8位数据(一帧)发送完毕后,由硬件使发送中断标志TI置位,向CPU申请中断。,(2)接收过程,.,在RI=0的条件下,将REN(SCON.4)置“1”就启动一次接收过程。串行数据通过RXD接收,同步移位脉冲通过TXD输出。在移位脉冲的控制下,RXD上的串行数据依次移入移位寄存器。当8位数据(一帧)全部移入移位寄存器后,接收控制器发出“装载SBUF”信号,将8位数据并行送入接收数据缓冲器SBUF中,同时,由硬件使接收中断标志RI置位,向CPU申请中断。,二方式1,方式1为8位异步通信方式,在方式1下,一帧信息为10位:1位起始位(0),8位数据位(低位在前)和1位停止位(1)。TXD发送数据端,RXD为接收数据端。波特率可变,由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定。,即:波特率=2,SMOD,(T1的溢出率)/32。,(1)发送过程,在TI=0时,当CPU执行一条向SBUF写数据的指令时,如MOV SBUF,A,就启动了发送过程。数据由TXD引脚送出,发送时钟由定时/计数器T1送来的溢出信号经过16分频或32分频后得到,,.,在发送时钟的作用下,先通过TXD端送出一个低电平的起始位,然后是8位数据(低位在前),其后是一个高电平的停止位,当一帧数据发送完毕后,由硬件使发送中断标志TI置位,向CPU申请中断,完成一次发送过程。,(2)接收过程,当允许接收控制位REN被置1,接受器就开始工作,由接收器以所选波特率的16倍速率对RXD引脚上的电平进行采样。当采样到从“1”到“0”的负跳变时,启动接收控制器开始接收数据。在接收移位脉冲的控制下依次把所接收的数据移入移位寄存器,当8位数据及停止位全部移入后,根据以下状态,进行响应操作。,如果RI=0、SM2=0,接收控制器发出“装载SBUF”信号,将输入移位寄存器中的8位数据装入接收数据寄存器SBUF,停止位装入RB8,并置RI=1,向CPU申请中断。,如果RI=0、SM2=1,那么只有停止位为“1”才发生上述操作。,RI=0、SM2=1且停止位为“0”,所接收的数据不装入SBUF,数据将会丢失。,如果RI=1,则所接收的数据在任何情况下都不装入SBUF,即数据丢失。,.,三方式2和方式3,方式2和方式3时都为9位异步通信接口,接收和发送一帧信息长度为11位,即1个低电平的起始位,9位数据位,1个高电平的停止位。发送的第9位数据放于TB8中,接收的第9位数据放于RB8中。TXD为发送数据端,RXD为接收数据端。方式2和方式3的区别在于波特率不一样,其中方式2的波特率只有两种:fosc/32或fosc/64,方式3的波特率与方式1的波特率相同,由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定,即:,波特率=2,SMOD,(T1的溢出率)/32。,在方式1时,也需要对定时/计数器T1进行初始化。,1发送过程,方式2和方式3发送的数据为9位,其中发送的第9位在TB8中,在启动发送之前,必须把要发送的第9位数据装入SCON寄存器中的TB8中。准备好TB8后,就可以通过向SBUF中写入发送的字符数据来启动发送过程,发送时前8位数据从发送数据寄存器中取得,发送的第9位从TB8中取得。一帧信息发送完毕,置TI为1。,.,2接收过程,方式2和方式3的接收过程与方式1类似,当REN位置1时也启动接收过程,所不同的是接收的第9位数据是发送过来的TB8位,而不是停止位,接收到后存放到SCON中的RB8中,对接收是否有判断也是用接收的第9位,而不是用停止位。其余情况与方式1相同。,6.3.4 串行口的编程及应用,一串行口的初始化编程,1串行口控制寄存器SCON位的确定。,根据工作方式确定SM0、SM1位;对于方式2和方式3还要确定SM2位;如果是接收端,则置允许接收位REN为1;如果方式2和方式3发送数据,则应将发送数据的第9位写入TB8中。,2设置波特率。,对于方式0,不需要对波特率进行设置。,对于方式2,设置波特率仅须对PCON中的SMOD位进行设置。,.,对于方式1和方式3,设置波特率不仅须对PCON中的SMOD位进行设置,还要对定时/计数器T1进行设置,这时定时/计数器T1一般工作于方式28位可重置方式,初值可由下面公式求得:,由于:,波特率=2,SMOD,(T1的溢出率)/32,则:,T1的溢出率=波特率32/2,SMOD,而T1工作于方式2的溢出率又可由下式表示:,T1的溢出率=fosc/(12(256-初值),所以:,T1的初值=256-fosc2,SMOD,/(12波特率32),二串行口的应用,通常用于三种情况:利用方式0扩展并行I/O口;利用方式1实现点对点的双机通信;利用方式2或方式3实现多机通信。,1利用方式0扩展并行I/O口,MCS-51单片机的串行口在方式0时,当外接一个串入并出的移位寄存器,就可以扩展并行输出口,当外接一个并入串出的移位寄存器时,就可以扩展并行输入口。,.,【例6-4】,用8051单片机的串行口外接串入并出的芯片CD4094扩展并行输出口控制一组发光二极管,使发光二极管从左至右延时轮流显示。,CD4094是一块8位的串入并出的芯片,带有一个控制端STB,当STB=0时,打开串行输入控制门,在时钟信号CLK的控制下,数据从串行输入端DATA一个时钟周期一位依次输入;当STB=1,打开并行输出控制门,CD4094中的8位数据并行输出。使用时,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接DATA,STB用P1.0控制,8位并行输出端接8个发光二极管。如图所示。,8051,RXD,TXD,P1.0,DATA,CLK,STB,.,设串行口采用查询方式,显示的延时依靠调用延时子程序来实现。程序如下:,汇编程序:,ORG 0000H,LJMP MAIN,ORG 0100H,MAIN:MOV SCON,#00H,MOV A,#01H,CLR P1.0,START:MOV SBUF,A,LOOP:JNB TI,LOOP,SETB P1.0,ACALL DELAY,CLR TI,RL A,CLR P1.0,SJMP START,DELAY:MOV R7,#05H,LOOP2:MOV R6,#0FFH,LOOP1:DJNZ R6,LOOP1,DJNZ R7,LOOP2,RET,END,.,C语言程序:,#include /包含特殊功能寄存器库,sbit P1_0=P10;,void main(),unsigned char i,j;,SCON=0 x00;,j=0 x01;,for(;),P1_0=0;,SBUF=j;,while(!TI);,P1_0=1;TI=0;,for(i=0;i=254;i+);,j=j*2;,if(j=0 x00)j=0 x01;,.,【例6-5】,用8051单片机的串行口外接并入串出的芯片CD4014扩展并行输入口,输入一组开关的信息。,CD4014是一块8位的并入串出的芯片,带有一个控制端P/S,当P/S=1时,8位并行数据置入到内部的寄存器;当P/S=0时,在时钟信号CLK的控制下,内部寄存器的内容按低位在前从QB串行输出端依次输出;使用时,8051串行口工作于方式0,8051的TXD接CD4094的CLK,RXD接QB,P/S用P1.0控制,另外,用P1.1控制8并行数据的置入。如图所示。,8051,RXD,TXD,P1.0,QB,CLK,P/S,P1.1,K0,K7,K,.,串行口方式0数据的接收,用SCON寄存器中的REN位来控制,采用查询RI的方式来判断数据是否输入。程序如下:,汇编程序:,ORG 0000H,LJMP MAIN,ORG 0100H,MAIN:SETB P1.1,START:JB P1.1,START,SETB P1.0,CLR P1.0,MOV SCON,#10H,LOOP:JNB RI,LOOP,CLR RI,MOV A,SBUF,.,C语言程序:,#include /包含特殊功能寄存器库,sbit P1_0=P10;,sbit P1_1=P11;,void main(),unsigned char i;,P1_1=1;,while(P1_1=1);,P1_0=1;,P1_0=0;,SCON=0 x10;,while(!RI);,RI=0;,i=SBUF;,.,2利用方式1实现点对点的双机通信,要实现甲与乙两台单片机点对点的双机通信,线路只须将甲机的TXD与乙机的RXD相连,将甲机的RXD与乙机的TXD相连,地线与地线相连。,【例6-6】,用汇编语言编程通过串行实现将甲机的片内RAM中30H3FH单元的内容传送到乙机的片内RAM的40H4FH单元中。,8051,8051,甲机,RXD,TXD,GND,TXD,RXD,GND,乙机,线路连接如图,甲、乙两机都选择方式1:8位异步通信方式,最高位用作奇偶校验,波特率为1200bps,甲机发送,乙机接收,因此甲机的串口控制字为40H,乙机的串口控制字为50H。,.,由于选择的是方式1,波特率由定时/计数器T1的溢出率和电源控制寄存器PCON中的SMOD位决定。则须对定时/计数器T1初始化。,设SMOD=0,甲、乙两机的振荡频率为12MHZ,由于波特率为1200。定时/计数器T1选择为方式2,则初值为:,初值=256-fosc2,SMOD,/(12波特率32),=256-12000000/(12120032)230=E6H,根据要求定时/计数器T1的方式控制字为20H。,甲机的发送程序:,TSTART:MOV TMOD,#20H,MOV TL1,#0E6H,MOV TH1,#0E6H,MOV PCON,#00H,MOV SCON,#40H,MOV R0,#30H,MOV R7,#10H,SETB TR1,LOOP:MOV A,R0,MOV C,P,MOV A.7,C,MOV SBUF,A,WAIT:JNB TI,WAIT,CLR TI,INC R0,DJINZ R7,LOOP,RET,.,乙机接收程序:,RSTART:MOV TMOD,#20H,MOV TL1,#0E6H,MOV TH1,#0E6H,MOV PCON,#00H,MOV R0,#40H,MOV R7,#10H,SETB TR11,LOOP:MOV SCON,#50H,WAIT:JNB RI,WAIT,MOV A,SBUF,MOV C,P,JC ERROR,ANL A,#7FH,MOV R0,A,INC R0,DJINZ R7,LOOP,RET,.,3多机通信,通过MCS-51单片机串行口能够实现一台主机与多台从机进行通信,主机和从机之间能够相互发送和接收信息。但从机与从机之间不能相互通信。,MCS-51单片机串行口的方式2和方式3是9位异步通信,发送信息时,发送数据的第9位由TB8取得,接收信息的第9位放于RB8中,而接收是否有效要受SM2位影响,当SM2=0时,无论接收的RB8位是0还是1,接收都有效,RI都置1;当SM2=1时,只有接收的RB8位等于1时,接收才有效,RI才置1。利用这个特性便可以实现多机通信。,多机通信时,主机每一次都向从机传送两个字节信息,先传送从机的地址信息,再传送数据信息,处理时,地址信息的TB8位设为1,数据信息的TB8位设为0。,多机通信过程如下:,(1)所有从机的SM2位开始都置为1,都能够接收主机送来的地址。,(2)主机发送一帧地址信息,包含8位的从机地址,TB8置1,表示发送的为地址帧。,.,(3)由于所有从机的SM2位都为1,从机都能接收主机发送来的地址,从机接收到主机送来的地址后与本机的地址相比较,如接收的地址与本机的地址相同,则使SM0位为0,准备接收主机送来的数据,如果不同,则不作处理。,(4)主机发送数据,发送数据时TB8置为0,表示为数据帧。,(5)对于从机,由于主机发送的第9位TB8为0,那么只有SM2位为0的从机可以接收主机送来的数据。这样就实现主机从多台从机选择一台从机进行通信了。,【例6-8】,要求设计一个一台主机,255台从机的多机通信的系统。,1)硬件线路图如下图,RXD,TXD,8051,GND,主机,.,RXD,TXD,GND,从#FE,RXD,TXD,GND,从#01,RXD,TXD,GND,从#00,.,2)软件设计,通信协议,通信时,为了处理方便,通信双方应制定相应的协议,在本例中主、从机串行口都设为方式3,波特率为1200bps,PCON中的SMOD位都取0,设fosc为12MHZ,根据例6.7定时/计数器T1的方式控制字为20H,初值为E6H,主机的SM2位设为0,从机的SM2开始设为1,从机地址从00HFEH。另外还制定如下几条简单的协议:,主机发送的控制命令:,00H:要求从机接收数据。(TB8=0),01H:要求从机发送数据。(TB8=0),FFH:命令所有从机的SM2位置1,准备接收主机送来的地址。(TB8=1),从机发给主机状态字格式如图,D7,D6,D5,D4,D3,D2,D1,D0,ERR,TRDY,RRDY,其中:,ERR=1,表示从机接收到非法命令。,TRDY=1,表示从机发送准备就绪。,RRDY=1,表示从机接收准备就绪。,.,开始,串口初始化,发送地址帧,发送命令帧,命令从机复位,命令分类,主机发送数据,主机接收数据,从机应答否?,从机应答地址?,从机应答否?,命令正确否?,从机接收就绪?,从机发送就绪?,未发完?,未接收完?,结束,否,否,否,否,否,否,否,否,是,是,是,是,是,是,是,是,01,00,主机的通信程序流程,.,从机采用中断处理,主程序中对串口初始化,中断系统初始化。中断服务程序中实现信息的接收与发送,从机中断服务程序流程见图,主程序略。,中断服务程序,CLR RI,现场保护,地址相符?,SM2=0,本机地址送主机,接收下一帧,是命令帧?,命令帧分类,ERR=1送主机,接收就绪?,发送就绪?,RRDY=0送主机,RRDY=1送主机,TRDY=1送主机,接收数据,发送数据,接收完?,发送完?,TRDY=0送主机,SM2=1,恢复现场,中断返回,否,否,否,否,否,否,是,是,是,是,是,是,01H,00H,非法命令,.,主机的通信程序设计,设发送、接收数据块长度为16字节。这里仅编写主机发16个字节到01号从机的程序和主机从02号从机接收16个字节的程序。(略),从机的通信程序设计,从机接收、发送数据块长度为16字节,所有的从机的程序相同,只是不同的从机的本机号SLAVE不一样。(略),.,6.4 中断系统,6.4.1 中断的基本概念,1中断源及中断请求,2中断优先权控制,3中断允许与中断屏蔽,4中断响应与中断返回,6.4.2 MCS-51单片机的中断系统,一中断源,1外部中断,和,外部引脚P3.2和P3.3输入,有两种触发方式:电平触发及跳变(边沿)触发。由特殊功能寄存器TCON来管理.,.,TCON,D7,D6,D5,D4,D3,D2,D1,D0,(88H),TF1,TR1,TF0,TR0,IE1,IT1,IE0,IT0,IT0(IT1):外部中断0(或1)触发方式控制位。IT0(或IT1)被设置为0,则选择外部中断为电平触发方式;IT0(或IT1)被设置为1,则选择外部中断为边沿触发方式。,IE0(IE1):外部中断0(或1)的中断请求标志位。,在电平触发方式时,CPU在每个机器周期的S5P2采样P3.2(或P3.3),若P3.2(或P3.3)引脚为高电平,则IE0(IE1)清0,若P3.2(或P3.3)引脚为低电平,则IE0(IE1)置1,向CPU请求中断;CPU响应后能够由硬件自动将IE0(或IE1)清零。在边沿触发方式时,若第一个机器周期采样到P3.2(或P3.3)引脚为高电平,第二个机器周期采样到P3.2(或P3.3)引脚为低电平时,由IE0(或IE1)置1,向CPU请求中断。,.,对于电平触发方式,只要P3.2(或P3.3)引脚为低电平,IE0(或IE1)就置1,请求中断,CPU响应后不能够由硬件自动将IE0(或IE1)清零。如果在中断服务程序返回时,P3.2(或P3.3)引脚还为低电平,则又会中断,这样就会出一次请求,中断多次的情况。为避免这种情况,只有在中断服务程序返回前撤消P3.2(或P3.3)的中断请求信号,即使P3.2(或P3.3)为高电平。通常通过下图所示外电路来实现.,INTx,8051,P1.0,Q,D,S,CLK,外部中断,请求信号,.,外部中断请求信号通过D触发器加到单片机P3.2
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 包罗万象 > 大杂烩

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服