双机通信系统的设计.doc_第1页
双机通信系统的设计.doc_第2页
双机通信系统的设计.doc_第3页
双机通信系统的设计.doc_第4页
双机通信系统的设计.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

单片机与接口技术课程设计课程设计 姓 名: 于 凇 学 号: 1305410115 指导教师: 孟威 题 目 名 称: 双机通信系统的设计 专业名称: 自动化13-1 所在学院: 信息工程学院 时 间: 2014年6月236月29日 一. 课程设计的目的与要求1.教学目的 培养学生利用所学的单片机知识进行独立地设计、开发产品分析问题和解决问题的能力。2.教学要求1) 在充分理解实验设备的工作原理的基础上,完成各题目的基本功能。从基本功能的实现中得到感性认识,进一步完成各课题。2) 独立完成电路及程序的设计、调试。设计结果达到课题技术要求,功能完善,运行稳定。3) 写出设计总结。要求条理清楚,重点突出,结构合理。并附有完整原理图及带有注释说明的完整的软件源程序清单。4) 课程设计期间按时作息,遵守纪律,爱护仪器、设备,保持良好、整洁的工作环境。3. 内容及要求 主要技术指标和要求:1) 基本功能:利用8031串行口发送和接收数据,并将接收的数据通过扩展i/o口74ls273输出到发光二极管显示,结合延时来模拟一个循环彩灯。2) 双机通信 甲机负责发送,乙机负责接收。从甲机的键盘上键入数字键0f,在两个实验箱上的数码管上显示出来。如果键入的不是数字按键,则显示“error”错误提示。二、实验原理 1.8031单片机串行口双机通信电路设计 mcs-51单片机的串行端口有4种基本工作方式,通过编程设置,可以使其工作在任一方式,以满足不同场合的需要。其中,方式0主要用于外接移位寄存器,以扩展单片机的io电路;工作方式1多用于双机之间或与外设电路的通信;方式2、3除有方式1的功能外,还可以作多机通信,以构成分布式多微机系统。 串行端口有两个控制寄存器scon、pcon,用于设置工作方式、发送或接收的状态、特征位、数据传送波特率每秒传送的位数以及作为中断标志等。串行端口有一个数据寄存器sbuf在特殊功能寄存器中的字节地址为99h,该寄存器为发送和接收所共用。 串行端口的波特率可以用程序来控制。在不同工作方式中,由时钟振荡频率的分频值或由定时器t1的定时溢出时间确定,使用十分方便灵活。1、串口控制寄存器方式1 输入:在(ren)=1时,串行口采样rxd引脚,当采样到1至o的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。只有当8位数据接收完,并检测到高电平停止位后,只有满足(r1)=0;(sm2)=0或接收到的第9位数据为1时,停止位才进入rb8,8位数据才能进入接收寄存器,并由硬件置位中断标志ri;否则信息丢失。所以在方式1接收时,应先用软件清零ri和sm2标志。方式2 方式2为固定波特率的11位uart方式。它比方式1增加了一位可程控为1或0的第9位数据。 输出:发送的串行数据由txd端输出一帧信息为11位,附加的第9位来自scon寄存器的tb8位,用软件置位或复位。它可作为多机通讯中地址数据信息的标志位,也可以作为数据的奇偶校验位。当cpu执行一条数据写入subf的指令且ti=0时,就启动发送器发送。发送一帧信息后,置位中断标志ti。输入:在(ren)=1时,串行口采样rxd引脚,当采样到1至o的跳变时,确认是串行发送来的一帧数据的开始位0,从而开始接收一帧数据。在接收到附加的第9位数据后,当满足(ri):0;(sm2)=0或接收到的第9位数据为1时,第9位数据才进入rb8,8位数据才能进入接收寄存器,并由硬件置位中断标志ri;否则信息丢失。且不置位ri。工作方式3 方式3为波特率可变的11位uart方式。除波特率外,其余与方式2相同。波特率的选择如前所述,在串行通讯中,收发双方的数据传送率(波特率)要有一定的约定。在mcs-51串行口的四种工作方式中,方式0和2的波特率是固定的,而方式1和3的波特率是可变的,由定时器t1的溢出率控制。1方式o:方式0的波特率固定为主振频率 的1/12。2方式2:方式2的波特率由pcon中的选择位smod来决定,可表示为:波特率=2smodfosc64也就是当smod=1时,波特率为132fosc,当smod=0时,波特率为164fosc。3方式1和方式3定时器t1作为波特率发生器,其公式如下:波特率=2smod32定时器t1溢出率t1溢出率=t1计数率产生溢出所需的周期数 式中t1计数率取决于它工作在定时器状态还是计数器状态。当工作于定时器状态时,t1计数率为fosc/2:当工作于计数器状态时,t1计数率为外部输入频率,此频率应小于fosc/24。产生溢出所需周期与定时器t1的工作方式、t1的预置值有关。定时器t1工作于方式o:溢出所需周期数=8192-定时器t1工作于方式1:溢出所需周期数=65536-x定时器t1工作于方式2:溢出所需周期数=256-x 因为方式2为自动重装入初值的8位定时器计数器模式,所以用它来做波特率发生器最恰当。这种方式下,t1的溢出率次秒计算式可以表示为:t1溢出率=fsoc12256-x2.利用8031单片机串行口,实现双机通信。 1.本实验系统中考虑用户可以方便使用串行口实现双机或和上位机通信,系统设计有用户专用串行接口,只要配上用户专用通信电缆线就可以实现和上位机通信,不影响监控系统和上位机的联机工作。j10就是用户专用串行接口,将j10用用户专用通信线连到上位机的串口上。注意不要和上位机系统用串行口冲突。 2.实验时需将1号机8031串行接收信号线p3.0(rxd)连到2号机8031串行口发送信号线p3.1(txd)。 实验线路图: 8031单片机串行口双机通信实验线路接线如图4.3所示,3根连线。实验步骤: 1.按图连好线路。 2.在两台dvcc实验系统处于p.状态下。 3.在1号机上运行h516s1.asm程序或输入四位起始地址0d00后,按exec 键连续运行程序,在1号机上显示电压值。 图4.3 8031单片机串行口双机通信 4.在2号机上h516s2.asm程序或输入四位起始地址0e30后,按exec键连续运行程序,在2号机上显示8031-2。 5.从1号机上的键盘上输入数字键,会显示在2号机的数码管上3.8031的功能简介 8031单片机是intel公司生产的mcs-51系列单片机中的一种,除无片内rom外,其余特性与mcs-51单片机基本一样。1)主电源引脚vcc和vss vcc(40脚)接+5v电压;vss(20脚)接地;2)外接晶体引脚xtal1和xtal2 xtal1(19脚)接外部晶体的一个引脚。在单片机内部,它是一个反相放大器的输入端,这个放大器 构成了片内振荡器。当采用外部振荡器时,对hmos单片机,此引脚应接地;对chmos单片机,此引脚作为驱动端。xtal2(18脚)接外晶体的另一端。在单片机内部,接至上述振荡器的反相放大器的输出端。采用外部振荡器时,对hmos单片机,该引脚接外部振荡器的信号,即把外部振荡器的信号直接接到内部时钟发生器的输入端;对xhmos,此引脚应悬浮。图4.4 8031管脚图3)控制或与其它电源复用引脚rst/vpd、ale/prog、psen和ea/vpp rst/vpd(9脚)当振荡器运行时,在此脚上出现两个机器周期的高电平将使单片机复位。推荐在此引脚与vss引脚之间连接一个约8.2k的下拉电阻,与vcc引脚之间连接一个约10f的电容,以保证可靠地复位。vcc掉电期间,此引脚可接上备用电源,以保证内部ram的数据不丢失。当vcc主电源下掉到低于规定的电平,而vpd在其规定的电压范围(50.5v)内,vpd就向内部ram提供备用电源。ale/prog(30脚):当访问外部存贮器时,ale(允许地址锁存)的输出用于锁存地址的低位字节。即使不访问外部存储器,ale端仍以不变的频率周期性地出现正脉冲信号,此频率为振荡器频率的1/6。因此,它可用作对外输出的时钟,或用于定时目的。然而要注意的是,每当访问外部数据存储器时,将跳过一个ale脉冲。ale端可以驱动(吸收或输出电流)8个ls型的ttl输入电路。 对于eprom单片机(如8751),在eprom编程期间,此引脚用于输入编程脉冲(prog)。 psen(29脚):此脚的输出是外部程序存储器的读选通信号。在从外部程序存储器取指令(或常数)期间,每个机器周期两次psen有效。但在此期间,每当访问外部数据存储器时,这两次有效的psen信号将不出现。psen同样可以驱动(吸收或输出)8个ls型的ttl输入。ea/vpp(引脚):当ea端保持高电平时,访问内部程序存储器,但在pc(程序计数器)值超过0fffh(对851/8751/80c51)或1fffh(对8052)时,将自动转向执行外部程序存储器内的程序。当ea保持低电平时,则只访问外部程序存储器,不管是否有内部程序存储器。对于常用的8031来说,无内部程序存储器,所以ea脚必须常接地,这样才能只选择外部程序存储器。 对于eprom型的单片机(如8751),在eprom编程期间,此引脚也用于施加21v的编程电源(vpp)。4、输入/输出(i/o)引脚p0、p1、p2、p3(共32根) p0口(39脚至32脚):是双向8位三态i/o口,在外接存储器时,与地址总线的低8位及数据总线复用,能以吸收电流的方式驱动8个ls型的ttl负载。 p1口(1脚至8脚):是准双向8位i/o口。由于这种接口输出没有高阻状态,输入也不能锁存,故不是真正的双向i/o口。p1口能驱动(吸收或输出电流)4个ls型的ttl负载。对8052、8032,p1.0引脚的第二功能为t2定时/计数器的外部输入,p1.1引脚的第二功能为t2ex捕捉、重装触发,即t2的外部控制端。对eprom编程和程序验证时,它接收低8位地址。 p2口(21脚至28脚):是准双向8位i/o口。在访问外部存储器时,它可以作为扩展电路高8位地址总线送出高8位地址。在对eprom编程和程序验证期间,它接收高8位地址。p2可以驱动(吸收或输出电流)4个ls型的ttl负载。 p3口(10脚至17脚):是准双向8位i/o口,在mcs-51中,这8个引脚还用于专门功能,是复用双功能口。p3能驱动(吸收或输出电流)4个ls型的ttl负载。 作为第一功能使用时,就作为普通i/o口用,功能和操作方法与p1口相同。作为第二功能使用时,各引脚的定义如表所示。值得强调的是,p3口的每一条引脚均可独立定义为第一功能的输入输出或第二功能。表4.2 p3各口线的第二功能定义口线引脚第二功能p3.010rxd(串行输入口)p3.111 txd(串行输出口)p3.212int0(外部中断0)p3.313int1(外部中断1)p3.414t0(定时器0外部输入)p3.515t1(定时器1外部输入)p3.616wr(外部数据存储器写脉冲)p3.717rd(外部数据存储器读脉冲)三、软件设计1、流程图及其说明a机流程图:b机流程图:四、课程设计的结果1、基本功能利用8031串行口发送和接收数据,并将接收的数据通过扩展i/o口74ls273输出到发光二极管显示,结合延时来模拟一个循环彩灯。彩灯变化花样可自行设计。例:l1、l2、l8依次点亮;l1、l2、l8依次熄灭;l1、l2、l8全亮、全灭。各时序间隔为0.5秒。让发光二极管按以上规律循环显示下去。;8031的txd接rxd;74ls273的cs273接cs0;so0so7接发光二极管的l1l8;csegat0000hljmpstartcsegat4100hportequ0cfa0hstart:movtmod,#20h; movtl1,#0f2h; movth1,#0f2hmov87h,#00h;setbtr1;movscon,#50h;movr1,#12h;movdptr,#tablemova,dplmovdptr,#l1clrc subba,dpl;movr5,a;movr0,asend: mova,r0 movca,a+pc;l1:movsbuf,a;wait:jbcri,l2; sjmpwaitl2:clrriclrtimova,sbufmovdptr,#port movxdptr,aacalldelayincr0 djnzr1,sendmovr1,#12h mova,r5 movr0,a jmpsendtable:db01h,03h,07h,0fh,1fh,3fh,7fh,0ffh,0feh db0fch,0f8h,0f0h,0e0h,0c0h,80h,00h,0ffh,00hdelay:movr4,#05hdel1:movr3,#200 del2:movr2,#126 del3:djnzr2,del3 djnzr3,del2 djnzr4,del1retend2、双机通信系统的设计发送机portequ0cfa0hcsegat0000hljmpfmt_t_scsegat4100hfmt_t_s:movtmod,#20h; movth1,#0f3h; movtl1,#0f3h setbtr1; movscon,#50h; orlpcon,#80h;tx_ack:mova,#06h; movsbuf,await1:jbcti,rx_yes; sjmpwait1rx_yes:jbcri,next1; sjmprx_yesnext1:mova,sbuf; cjnea,#00h,tx_ack;fmt_ram0:movr3,#00h;tx_news:movdptr,#table; mova,r3 movca,a+dptr; movr0,a; movsbuf,a;wait3:jbcti,next2; sjmpwait3next2:mova,r0; movp1,a lcalldelaydelay:movr1,#7fh;del1:movr4,#200del2:djnzr4,del2 djnzr1,del1rx_0fh:jbcri,if_0fh; sjmprx_0fhif_0fh:mova,sbuf; cjnea,#0fh,tx_news incr3 cjner3,#21,tx_news; sjmpfmt_ram0;table:db0feh,0fch,0f8h,0f0h,0e0h,0c0h,80h,00h; db80h,0c0h,0e0h,0f0h,0f8h,0fch,0feh,0ffh; db00h,0ffh; db0f0h,0fh,00h;end接收机portequ0cfa0hcsegat0000hljmpfmt_t_scsegat4100hfmt_t_s:movtmod,#20h; movth1,#0f3h; movtl1,#0f3h setbtr1;movscon,#50h;movpcon,#80h;fmt_ram:movr6,#00h;rx_ack:jbcri,if_06h; sjmprx_ackif_06h:mova,sbuf; cjnea,#06h,tx_15htx_00h:mova,#00h movsbuf,await1:jbcti,rx_news; sjmpwait1tx_15h:mova,#15h movsbuf,await2:jbcti,have1;sjmpwait2have1:ljmprx_ackrx_news:jbcri,have3; sjmprx_newshave3:mova,sbuf; movp1,a; mova,#0fh; movsbuf,await3:jbcti,rx_news; sjmpwait3tx_err:mova,#0f0h; movsbuf,await4:jbcti,again; sjmpwait4again:ljmphave3end现象:8个led小灯按表中取出的指令顺序点亮五、设计过程中遇到的问题及解决方法1、软件方面的问题在设计的过程中,软件设计中主要有遇到三大问题:一、电压值采集不到,或者是采集到了也不稳定;二、发送数据不过去;三、接收程序过程时间太长,造成发送方采样不稳定,时间过短。电压值采集不到的主要原因是中断子程序并没有用到,在用到子程序之前程序已经返回了,后来通过修改中断程序前面的程序,使之能够顺利运行到中断子程序部分,从而得到了电压值。接收方没有数值显示或者是出现乱码的问题主要是发送程序过程中,取用到的数值a并不是所采集到的电压值的总个数值,因此才会出现这样的结果,后面我把发送数值放在显示子程序中,在显示采集到的数值之前把数值发送过去,最终在接收方也得到了准确的电压值,并且也没有再出现乱码的情况,显示出了正确的数值。因为接收发送过去的数值时间过长,而发送方又是等数值发送过去完全才能显示准确的数值的,所以最开始因为延时时间不够,造成了发送方的采集到的八段数码管上显示的电压值闪烁过快,而查看不到准确的数值。后来我将显示子程序中的延时时间加长以后,不仅接收方,发送方也能够准确且稳定的显示采集到的电压值。2、硬件方面的问题另外,在硬件设计方面,最开始根本就采集不到数值,主要是因为硬件板上的-5v的电压值是不准确的,应该另外通过万能表调节电压值到-5v来提供,否则出不来数据。六、系统调试及使用说明本次的课程设计必须在软件和硬件共同的作用下才能准确的进行,实现电压的采样和双机通信。打开俩台计算机,都在dvcc试验系统下的dv51h试验系统中建立一个新的文件夹,在有5g14433的那一方建的文件夹中放入的是发送程序,而在另一台计算机里边则是放入接收子程序,并进行保存。然后按照电路图连接电路,将硬件中的各支路线都连接好以后,检查好硬件连线后,就可以接通试验箱的电源了,在试验箱上的八段数码管最后一个上边显示闪烁的p后,按键盘上的pcdbg键,然后在db51h系统中进行联接、编译、调试、运行。在运行程序过程中有值得非常注意的一

温馨提示

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

最新文档

评论

0/150

提交评论