ImageVerifierCode 换一换
格式:DOCX , 页数:16 ,大小:158.72KB ,
资源ID:11745823      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/11745823.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(单片机C语言教程LED彩灯串行控制器制作.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

单片机C语言教程LED彩灯串行控制器制作.docx

1、单片机C语言教程LED彩灯串行控制器制作LED彩灯串行控制器制作知识目标掌握串行口各个特殊功能寄存器使用方法; 掌握串行口通信编程方法。技能目标会设定串行口各个特殊功能寄存器;会编写串行口通信程序。任务一单片机外部结构任务导论设定串行口各个特殊功能寄存器是初学者较易出错的地方之一,设定出错串行通信不会成功,会造成不知是硬件问题还是程序编写问题,通信不成功牵涉到三方面问题,硬件、程序和设定,实践中发现不工作往往是特殊功能寄存器设定出错。任务分析串行口通信技术是实际应用较多的技术之一,通信技术牵涉到通信协议、各个特殊功能寄存器设定和硬件设计,单片机与PC机通信时,因为PC机是采用232通信方式,因

2、而单片机要外加232芯片才能通信成功。232芯片的通信距离只有十几米远,最长距离不会超过16米,若远距离通信时,工业上常用485通信方式。串口还有一个主要应用方面,就是外接串转并接口芯片。相关知识一、串行口控制寄存器MCS-51单片机内部的串行接口是全双工的,即能同时发送和接收数据。发送缓冲器只能写入不能读出,接收缓冲器只能读出不能写入。串行口还有接收缓冲作用,即从接收寄存器中读出前一个已收到的字节之前就能开始接收第二字节。两个串行口数据缓冲器(实际上是两个寄存器)通过特殊功能寄存器SBUF来访问。写入SBUF的数据储存在发送缓冲器,用于串行发送,从SBUF读出的数据来自接收缓冲器。两个缓冲器

3、共用一个地址99H(特殊功能寄存器SBUF的地址)。控制串行口的寄存器有两个特殊功能寄存器:即串行口控制寄存器SCON和电源控制器PCON(下面将分别对其进行介绍)。1. PCON中的波特率选择位电源控制器PCON是一个特殊功能寄存器,如图8-6所示。PCON没有位寻址功能,字节地址为87H。D7 D6 D5 D4 D3 D2 D1 D0SMOD 无定义位图9-6 PCON寄存器如图8-6中所示D7位(SMOD)为波特率选择位(波特率定义可参见本书相应的章节),其他位均无意义。复位时的SMOD值为0,可用MOV PCON,#80H或MOV 87H,#80H指令使该位置“1”。当SMOD=1时,

4、在串行口方式1、2或3情况下,波特率将提高一倍。2. 串行口控制寄存器SCON串行口控制寄存器SCON用于定义串行口的操作方式和控制它的某些功能。其字节地址为98H。寄存器中各位内容如图8-7所示。D7 D6 D5 D4 D3 D2 D1 D0SM0SM1SM2RENTB8RB8T1R1图9-7 SCON寄存器SM0,SM1:串行口操作方式选择位,两个选择位对应于4种状态,所以串行口能以4种方式工作,如表8-1所示。SM2:允许方式2和3的多机通信使能位。在方式2或3中,如果SM2置为“1”,且接收到的第9位数据(RB8)为0,则接收中断标志RI不会被激活。在方式1中,如果SM2=1,则只有收

5、到有效的停止位时才会激活RI。在方式0中,SM2必须置为“0”。3REN:允许串行接收位。由软件置位或清零,使允许接收或禁止接收。4TB8:是在方式2和3中要发送的第9位数据,可按需要由软件置位或复位。5RB8:是方式2和3中已接收到的第9位数据。在方式1中,如果SM2=0,RB8是接收到的停止位。在方式0中,不使用RB8位。6TI:发送中断标志。在方式0中,当串行发送完第8位数据时由硬件置位。在其他方式中,在发送停止位的开始时由硬件置位。当TI=1时,申请中断,CPU响应中断后,发送下一帧数据。在任何方式中,该位都必须由软件清0。7RI:接收中断标志。在方式0中,串行接收到第8位结束时由硬件

6、置位。在其他方式中,在接收到停止位的中间时刻由硬件置位。RI=1时申请中断,要求CPU取走数据。但在方式1中,当SM2=1时,如果未接收到有效的停止位,则不会对RI置位。在任何工作方式中,该位都必须由软件清0。在系统复位时,SCON中的所有位都被清0。表8-1 串行口方式选择SM0 SM1方 式功 能 说 明波 特 率0 00移位寄存器方式fosc/120 118位UART可变1 029位UARTfosc/64或 fosc/321 139位UART可变二、串行接口工作方式串行口的操作方式由SM0,SM1定义,编码与功能如表8-1所示,下面将针对方式0、1、2、3进行介绍。1. 方式0串行口的工

7、作方式0为移位寄存器输入输出方式,可外接移位寄存器,以扩展I/O口,也可外接同步输入输出设备。 方式0输出(发送)串行数据通过RXD引脚输出,而在TXD引脚输出移位时钟,作移位脉冲输出端。当一个数据写入串行口数据缓冲器时,就开始发送。在此期间,发送控制器送出移位信号,使发送移位寄存器的内容右移一位,直至最高位(D7位)数字移出后,停止发送数据和移位时钟脉冲。完成发送一帧数据的过程,置TI为“1”,申请中断,如果CPU响应中断,则从0023H单元开始执行串行口中断服务程序。 方式0输入(接收)当串行口定义为方式0时,RXD端为数据输入端,TXD端为同步脉冲信号输出端。接收器以振荡频率的1/12的

8、波特率接收TXD端输入的数据信息。REN(SCON.4)为串行口接收器允许接收控制位。当REN=0时,禁止接收;当REN=1时,允许接收。当串行口置为方式0,且满足REN=1和RI(SCON.0)=0的条件时,就会启动一次接收过程。在机器周期的S6P2时刻,接收控制器向输入移位寄存器写入11111110,并使移位时钟由TXD端输出。从RXD端(P3.0引脚)输入数据,同时使输入移位寄存器的内容左移一位,在其右端补上刚由RXD引脚输入的数据。这样,原先在输入移位寄存器中的“1”就逐位从左端移出,而在RXD引脚上的数据就逐位从右端移入。当写入移位寄存器中的最右端的一个0移到最左端时,其右边已经接收

9、了7位数据。这时,将通知接收控制器进行最后一次移位,并把所接收的数据装入SBUF。在启动接收过程开始后的第10个机器周期的S1P1时刻,SCON中的RI位被置位,从而发出中断申请。至此,完成了一帧数据的接收过程,如果CPU响应中断,则去执行由0023H作为入口地址的中断服务程序。MCS-51单片机串行口可以外接串行输入并行输出移位寄存器作为输出口,也可以外接并行输入串行输出移位寄存器作为输入口。方式0发送或接收完8位数据后由硬件置位,并发送中断标志TI或接收中断标志RI。但CPU响应中断请求转入中断服务程序时并不将TI或RI清口。因此,中断标志TI或RI必须由用户在程序中清0(可用CLR TI

10、或CLR RI;也可以用ANL SCON,#0FEH或ANL SCON,#0FDH等指令)。2. 方式1串行口工作于方式1时,被控制为波特率可变的8位异步通信接口。传送一帧信息为10位,即1位起始位(0),8位数据位(低位在先)和1位停止位(1)。数据位由TXD发送,由RXD接收。波特率是可变的,取决于定时器1或2的溢出速率。 方式1发送CPU执行任何一条以SBUF为目标寄存器的指令,就启动发送。先把起始位输出到TXD,然后把移位寄存器的输出位送到TXD,接着发出第一个移位脉冲(SHIFT),使数据右移一位,并从左端补入0。此后数据将逐位由TXD端送出,而其左端不断补入0。当发送完数据位时,置

11、位中断标志位TI。 方式1接收串行口以方式1输入时,当检测到RXD引脚上由1到0的跳变时开始接收过程,并复位内部16分频计数器,以实现同步。计数器的16个状态把1位时间等分成16份,并在第7,8,9个计数状态时采样RXD的电平,因此每位数值采样三次,当接收到的三个值中至少有两个值相同时,这两个相同的值才被确认接收,这样可排除噪声干扰。如果检测到起始位的值不是0,则复位接收电路,并重新寻找另一个1到0的跳变。当检测到起始位有效时,才把它移入移位寄存器并开始接收本帧的其余部分。一帧信息也是10位,即1位起始位,8位数据位(先低位),1位停止位。在起始位到达移位寄存器的最左位时,它使控制电路进行最后

12、一次移位。在产生最后一次移位脉冲时能满足下列两个条件:RI=0;接收到的停止位为1或SM2=0时,停止位进入RB8,8位数据进入SBUF,且置位中断标志RI。3. 方式2和方式3串行工作于方式2和方式3时,被自定义为9位的异步通信接口,发送(通过TXD)和接收(通过RXD)一帧信息都是11位,1位起始位(0),8位数据位(低位在先),1位可编程位(即第9位数据)和1位停止位(1)。方式2和方式3的工作原理相似,唯一的差别是方式2的波特率是固定的,为fosc/32或fosc/64。方式3的波特率是可变的,利用定时器T1或定时器T2作波特率发生器。 方式2和方式3发送方式2和方式3的发送过程是由执

13、行任何一条以SBUF作为目的寄存器的指令来启动的。由“写入SBUF”信号把8位数据装入SBUF,同时还把TB8装到发送移位寄存器的第9位位置上(可由软件把TB8赋予0或1),并通知发送控制器要求进行一次发送。发送开始后,把一个起始位(0)放到TXD端,经过一位时间后,数据由移位寄存器送到TXD端,通过第一位数据,出现第一个移位脉冲。在第一次移位时,把一个停止位“1”由控制器的停止位送入移位寄存器的第9位。此后,每次移位时,把0送入第9位。因此,当TB8的内容移到移位寄存器的输出位置时,其左面一位是停止位“1”,再往左的所有位全为“0”。这种状态由零检测器检测到后,就通知发送控制器作最后一次移位

14、,然后置TI=1,请求中断。第9位数据(即SCON中 的TB8的值)由软件置位或清零,可以作为数据的奇偶校验位,也可以作为多机通信中的地址,即数据标志位。如果把TB8作为奇偶校验位,可以在发送中断服务程序中,在数据写入SBUF之前,先将数据的奇偶位写入TB8。 方式2和方式3接收方式2和方式3的接收过程与方式1类似。数据从RXD端输入,接收过程由RXD端检测到负跳变时开始(CPU对RXD不断采样,采样速率为所建立的波特率的16倍),当检测到负跳变,16分频计数器就立即复位,同时把1FFH写入输入移位寄存器,计数器的16个状态把一位时间等分成16份,在每一位的第7,8,9个状态时,位检测器对RX

15、D端的值采样。如果所接收到的起始位不是0,则复位接收电路等待另一个负跳变的来到,如果起始位有效(=0),则起始位移入移位寄存器,并开始接收这一帧的其余位。当起始位0移到最左面时,通知接收控制器进行最后一次移位。把8位数据装入接收缓冲器,第9位数据装入SCON中的RB8,并置中断标志RI=1。数据装入接收缓冲器和RB8,并置位RI,只在产生最后一个移位脉冲时,并且要满足两个条件:RI=0,SM2=0;接收到的第9位数据为1时,才会进行。三 波特率在串行通信中,一个重要的指标是波特率,通信线上传送的所有信号都保持一致的信号持续时间,每一位的信号持续时间都由数据传送速度确定,而传送速度是以每秒多少个

16、二进制位来衡量的,将串行口每秒钟发送(或接收)的位数称为波特率。假设发送一位数据所需要的时间为T,则波特率为。它反映了串行通信的速率,也反映了对于传输通道的要求。波特率越高,要求传输通道的频带越宽。如果数据以300个二进制位每秒在通信线上传送,那么传送速度为300波特(通常记为300b/s)。MCS-51单片机的异步通信速度一般在50b/s9600b/s之间。由于异步通信双方各用自己的时钟源,要保证捕捉到的信号正确,最好采用较高频率的时钟,一般选择时钟频率比波特率高16倍或64倍。如果时钟频率等于波特率,则频率稍有偏差便会产生接收错误。在异步通信中,收、发双方必须事先规定两件事:一是字符格式,

17、即规定字符各部分所占的位数、是否采用奇偶校验以及校验的方式(偶校验还是奇校验)等通信协议;二是采用的波特率以及时钟频率和波特率的比例关系。串行口以方式0工作时,波特率固定为振荡器频率的1/12。以方式2工作时,波特率为振荡器频率的1/64或1/32,它取决于特殊功能寄存器PCON中的SMOD位的状态。如果SMOD=0(复位时SMOD=0),波特率为振荡器频率的1/64;如果SMOD=1,波特率为振荡器频率的1/32。方式1和3的波特率由定时器1的溢出率所决定。当定时器T1作波特率发生器时,波特率由下式确定:波特率=(定时器T1溢出率)/n上式中,定时器T1溢出率=定时器T1的溢出次数/秒,n为

18、32或16,取决于特殊功能寄存器PCON中的SMOD位的状态。如果SMOD=0,则n=32。如果SMOD=1,则n=16。对于定时器的不同工作方式,得到的波特率的范围是不一样的,这主要由定时器1的计数位数不同所决定。对于非常低的波特率,应选择16位定时器方式(即TMOD.5=0,TMOD.4=1),并且在定时器T1中断程序中实现时间常数重新装入。在这种情况下,应该允许定时器T1中断 (IE.3=1)。在任何情况下,如果定时器T1的C/ =0,则计数率为振荡器频率的1/12。如果C/=1,则计数率为外部输入频率,它的最大可用值为振荡器频率的1/24。任务实施实例1 PC机与单片机串行接口通信模块

19、制作。串行口通讯调试是比较困难的工作,因为只有当通讯双方的硬件和软件都正确无误时才能实现成功的通讯。可以采用分别调试的方法,即按通讯规约双方各自调试好,然后再联调。1原理图设计原理图如图9-8所示,用MAX232芯片,外加9芯串口插座,组成与PC机通信接口电路。先用PC终端来进行单片机通讯口的调试。只要方式设置正确,一般通信会成功。因为PC终端已具有正常的通讯功能,如果通讯不正常便是单片机部分引起的,这样便于查出存在的故障。2.硬件制作自己购买器件,用万能板焊接电路。3.程序编写下面给出的串行口调试程序,其功能是对串行口的工作方式编程,然后在串行口上输出字符串:MCS-51 Microcomp

20、uter,接着从串行口上输入字符,又将输入的字符从串行口上输出,将PC终端键盘上输入的字符在屏幕上显示出来。这个功能实现以后,串行口的硬件和串行口的编程部分就调试成功,接着便可以按通讯规约,实现单片机和终端之间串行通讯,完成通讯软件的调试工作。图9-8 串行口通讯口调试电路编写程序如下:#include #define uchar unsigned char#define uint unsigned intuchar code asab=M,S,C,-, M,i,c,r,o,c,o,m,p,u,t,e,r,0x0a,0x0d,0;void main() uchar i,temp; TMOD=0

21、x20; /定时器1方式2 TL1=0xe8; TH1=0xe8; SCON=0xda; TR1=1; i=0;next: temp=asabi; if(temp=0) loop: while(RI=0); RI=0; temp=SBUF; while(TI=0); TI=0; SBUF=temp; goto loop; else while(TI=0); TI=0; SBUF=temp; i+; goto next; 在Keil C中输入以上程序汇编通过后,全速运行该程序,仿真时,打开(Peripherale/Serial)串行口通道(Serial Channel)如图9-9所示。图9-9

22、串行口调试图由上图可见串行口通道窗口中有各种标志位,程序每次运行到TSO3时,要在TI前的复选框选中“”,程序才继续运行。将A中数送到串口缓冲器(SBUF)中,可在SBUF文本框中看到传入的数据。每选中一次“”传送一个数。4.Proteus软件仿真在图9-8基础上添加虚拟终端,如图9-10所示。VSM虚拟终端允许用户通过PC的键盘和屏幕与仿真微处理器系统收发RS232异步串行数据。在显示用户编写程序产生的调试/跟踪信息时非常有用。 图9-10 Proteus软件串口仿真导入第3步所生成的HEX文件,全速运行后,出现如图9-10所示结果,在虚拟终端显示转输的数据。但是数据进行了转换,与程序中的字

23、符不一致。实例2 LED彩灯串口控制器制作。1.电路原理图设计利用串行口的方式0输出,可以扩展多个移位寄存器,作为并行输出口,这种扩展方法接口简单,单片机和移位寄存器之间信息传输线少,适用于远距传送的输出设备(例如智能显示屏与状态显示板)。如果在一个MCS-51单片机的应用系统中,在串行口上扩展两个移位寄存器74LS164,作为16路状态指示灯接口,如图9-11所示。2.硬件制作自己购买器件,用万能板焊接电路。3.程序编写设计一个输出程序,其功能为:将内部40H、41H单元的状态缓冲器中内容输出到移位寄存器。每当系统中状态变化时,首先改变状态缓冲器中相应状态,然后调用该子程序,状态指示即实时地

24、发生变化。图9-11 状态指示灯接口板编写程序如下:#include #define uchar unsigned char#define uint unsigned intuchar x0,x1;void main() SCON=0x00; TI=0; SBUF=x0; while(TI=0); TI=0; SBUF=x1;4.Proteus软件仿真在Proteus中设计原理图,如图9-12所示,图中为图9-11的一个完整全图。 硬件制作自己购买器件,用万能板焊接电路。软件编写本题利用表格的方式,建立一组数据,利用UART发送至8BIT串入并出的IC74164。这组数据将使74164的8个L

25、ED 左移2次,右移2次,闪烁2次。这是另一种编程控制方式。 图9-12 Proteus软件串口仿真程序如下:#include #define uchar unsigned char#define uint unsigned intuchar code table=0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, 0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80, 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, 0x80,0x40,0x20,0x10,0x08,0x04,0x02,0x01, 0x00,0xff,0x00,0xff,0x03;void delay() uint j; for(j=0;j20000;j+);void main() uchar i,temp; SCON=0x00; i=0;loop: temp=tablei; if(temp!=0x03) temp=temp; SBUF=temp; while(TI=0); TI=0; delay(); i+; else i=0; goto loop;

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1