欢迎来到天天文库
浏览记录
ID:40633390
大小:419.50 KB
页数:12页
时间:2019-08-05
《单片机串行通信》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、武汉理工大学《单片机原理与应用》课程设计说明书1.基本原理1.18051单片机串行口工作原理MCS-51系列单片机片内有一个串行I/O端口,通过引脚RXD(P3.0)和TXD(P3.1)可与外设电路进行全双工的串行异步通信。8051单片机的串行端口有4种基本工作方式,通过编程设置,可以使其工作在任一方式,以满足不同应用场合的需要。其中,方式0主要用于外接移位寄存器,以扩展单片机的I/O电路;方式1多用于双机之间或与外设电路的通信;方式2,3除有方式l的功能外,还可用作多机通信,以构成分布式多微机系统。串行端口有两个控制寄存器(SCO
2、N和PCON),用来设置工作方式、发送或接收的状态、特征位、数据传送的波特率(每秒传送的位数)以及作为中断标志等。串行端口有一个数据寄存器SBUF(在特殊功能寄存器中的字节地址为99H),该寄存器为发送和接收所共同。发送时只写不读;接收时,只读不写。在一定条件下,向SBUF写入数据就启动了发送过程;读SBUf就启动了接收过程。串行通信的波特率可以程控设定。在不同工作方式中,由时钟振荡频率的分频值或由定时器T1的溢出率确定,使用十分方便灵活。1.2波特率的设定12武汉理工大学《单片机原理与应用》课程设计说明书在串行通信中,收发双方对发
3、送和接收数据的速率(即波特率)要有一定的约定,8051的波特率发生器的时钟来源有两种:一是来自于系统时钟的分频值,由于系统时钟的频率是固定的,所以此种方式的波特率是固定的;另一种是由定时器T1提供的,波特率由溢出率控制,T1的计数初值是可以用软件改写的,因此是一种可变波特率方式,此时T1工作于定时方式2(8位自动重装入方式)。波特率是否提高一倍由PCON的SMOD值确定,SMOD=1时,波特率加倍。串行口的工作方式中,方式0和方式2采用固定波特率,方式1和方式3采用可变波特率。2.电路的设计2.1自发自收电路图3.1自发自收电路上图
4、是本次课程设计的第一个要求:用自发自收的方式,实现串行中的自检,当串口正常时,发光二极管亮,否则,灯不亮。因此只需要一个单片机即可实现该功能。12武汉理工大学《单片机原理与应用》课程设计说明书2.2串行通信电路图3.2串行通信电路上图是实现第二个要求:甲乙两机采用串行方式1通信。的图。在本次的设计中,两边都是采用相同的波特率为4800.。其中甲机为主机,发送程序;已机为从机,接收数据,并在乙机上显示器上显示出甲机发送的数据:0,1,2,3,4,…….1F.。12武汉理工大学《单片机原理与应用》课程设计说明书3.串行通信程序设计3.1
5、程序设计流程图设定T1和scon设定发送数据地址指针和块长度计数器开中断开关EA允许串行口中断发送等待中断清T1修改数据地址指针和块长度计数器全部数据发送完发送中断返回清EA或ESYN主程序中断服务程序(a)中断方式发送程序12武汉理工大学《单片机原理与应用》课程设计说明书主程序设定T1和SCON置位REN允许接收开中断开关EA允许串行口中断等待中断中断服务程序清R1接收数据数据送接收缓冲器数据块接收完清EA或ES中断返回NY设定接收缓冲区首址置接收数据个数计数器(b)中断方式接收程序图2.1串行通信中断方式流程图串行通信可采用两种
6、方式:查询方式和中断方式,T1和R1是一帧发送完否或一帧数据到齐否的标志。当采用中断方式:发送程序:发送一个数据-----等待中断,在中断中再发送下一个数据。接收程序:等待中断,在中断中再接收一个数据。两种方式中,当发送或接收数据后都要注意清T1或R1。为保证收、发双方的协调,除两边的波特率要一致外,双方可以约定以某个标志字符作为发送数据的起始,发送方先发这个标志字符,待对方收到该字符,并给以回应后再正式发数据。以上是针对点对点的通信,如果是多机通信,标志字符就是各个分机的地址。12武汉理工大学《单片机原理与应用》课程设计说明书3.
7、2自发自收程序ORG0000HMOVTMOD,#20HMOVTH1,#0CCHMOVTL1,#0CCH;设定波特率SETBTR1MOVSCON,#50HABC:CLRTIMOVP1,#0FEH;LED灭ACALLDAY;延时MOVA,#0FFHMOVSBUF,A;发送数据FFHJNBRI,$;RI≠1等待CLRRIMOVA,SBUF;接收数据,A=FFHMOVP1,A;灯亮JNBTI,$;TI≠1等待ACALLDAY;延时SJMPABCDAY:MOVR0,#0DAL:MOVR1,#0DJNZR1,$DJNZR0,DALRETEND3
8、.3发送程序及分析#includeunsignedinti;unsignedchartable[]={"0123456789abcdefg"};voidinit(){TMOD=0x20;//设定定时器T1TH1=0x
此文档下载收益归作者所有