51单片机的双击通信_第1页
51单片机的双击通信_第2页
51单片机的双击通信_第3页
51单片机的双击通信_第4页
51单片机的双击通信_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、一 设计题目:双机通信系统二 实验描述:设计一个双机通信系统,实现按键数据的互发及显示功能。三 实验要求:利用两片8051单片机完成双机通信(a机和b机),a、b机发至对方数据可用数码管显示,通信过程用按键控制,发送内容自定。四 实验元件:st89c51(两片)、电容(30pf*4、10uf*4)、数码管(共阳)、晶振(11.059 2mhz)、小按键等。五 具体设计:1:设计介绍1.1 串行通信介绍广义地讲,终端(如计算机等)与其他终端、终端与外部设备(如打印机、显示器等)之间的信息交换称为数据通信(data communication)。数据通信方式有两种:串行通信和并行通信。并行通信:数

2、据的各位同时进行传送(接收和发送),其优点是传递速度快、效率高,多用在实时、快速的场合。串行通信:数据逐位传送,优点是数据只需要一根数据线就能完成传送,联结介质简单,成本低。1.2 8051简介51内部结构: 8051单片机包含中央处理器、程序存储器(rom)、数据存储器(ram)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,·中央处理器:    中央处理器(cpu)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,cpu负责控制、指挥和调度整个单元系统协调的

3、工作,完成运算和控制输入输出功能等操作。·数据存储器(ram):    8051内部有128个8位用户数据存储单元 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的的ram只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。·程序存储器(rom):    8051共有4096个8位掩膜rom,用于存放用户程序,原始数据或表格。 

4、83;定时/计数器(rom):    8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。 ·并行输入输出(i/o)口:    8051共有4组8位i/o口(p0、 p1、p2或p3),用于对外部数据的传输。 ·全双工串行口:    8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。 ·中断系统: &#

5、160;  8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。 8051单片机包含中央处理器、程序存储器(rom)、数据存储器(ram)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明: ·时钟电路:    8051内置最高频率达12mhz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。mcs-51系列单片机的内部结构示意图51引脚

6、图:vss(20脚):接地 vcc(40脚): 主电源+5v xtal1(19脚):接外部晶体的一端。在片内它是振荡电路反相放大器的输入端。在采用外部时钟时,对于hmos单片机,该端引脚必须接地;对于chmos单片机,次xtal2(18脚): 接外部晶体的另一端。在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。若需采用外部时钟电路,对于hmos单片机,该引脚输入外部时钟脉冲;对于chmos单片机,此引脚应悬浮。 引脚作为驱动端。rst(9脚): 单片机刚接上电源时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(reset) 

7、0;psen(29脚): 在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。cpu在向片外存储器取指令期间,psen信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效psen信号不出现。psen端同样可驱动8个lsttl负载。我们根据psen、ale和xtal2输出端是否有信号输出,可以判别80c51是否在工作。  ale/prog(30脚):在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。cpu在向片外存储器取指令期间,psen信号在12个时钟周期中两次生效。不过,在访问片外数据存储器时,这两次有效psen信号不出现。psen端同样可驱动

8、8个lsttl负载。我们根据psen、ale和xtal2输出端是否有信号输出,可以判别80c51是否在工作。  ea/vpp(31脚): 当ea端输入高电平时,cpu从片内程序存储器地址0000h单元开始执行程序。当地址超出4kb时,将自动执行片外程序存储器的程序。当ea输入低电平时,cpu仅访问片外程序存储器。在对87c51eprom编程时,此引脚脚用于施加编程电压vpp。 输入/输出引脚: (1)p0.0p0.7    (39脚32脚) (2)p1.0p1.7   (1脚8脚) (3)p2.0p2.7   (2

9、6脚21脚) (4)p3.0p3.7   (10脚17脚)1.3 双击通信图2 软件设计c语言程序:#include <reg52.h>#define uchar unsigned char#define uint unsigned intsbit ge=p23;sbit shi=p22;sbit deng_1=p20 ;sbit deng_2=p21; void delay (uint z);uchar b=0;uchar t=0;uchar flag;void init () tmod=0x20; 计数器一工作方式2th1=0xfd; 计数器初值tl1=0x

10、fd;scon=0x50; 串口工作方式0ex0=1; 外部中1tr1=1; 计数器开始计数es=1; 串口中断使能ea=1; cpu总中断void disp ( ucharm )switch(m)case 0x00 : p0 = 0xc0;break;case 0x01 : p0 = 0xf9;break;case 0x02 : p0 = 0xa4;break;case 0x03 : p0 = 0xb0;break;case 0x04 : p0 = 0x99;break;case 0x05 : p0 = 0x92;break;case 0x06 : p0 = 0x82;break;case

11、0x07 : p0 = 0xf8;break;case 0x08 : p0 = 0x80;break;case 0x09 : p0 = 0x90; break ;case 0x0a : p0 = 0x88;break;case 0x0b : p0 = 0x83;break;case 0x0c : p0 = 0xc6;break;case 0x0d : p0 = 0xa1;break;case 0x0e : p0 = 0x86;break;case 0x0f: p0 = 0x8e;break;default : p0 = 0x00 ; void extern_int0 (void) interr

12、upt 0 t=p1; sbuf=t; while(!ti) ; ti=0; flag=1; deng_1=deng_1; delay(100); deng_1=deng_1; void serial_serve(void) interrupt 4 uchar a; flag+; a=sbuf; while(!ri) ; ri=0; b=a; deng_2=deng_2; delay(100); deng_2=deng_2; void delay(uint z) uint x,y;for(x=0;x<z;x+)for(y=0;y<121;y+); void main() init(

13、);while(1)if(flag=1)shi=0;ge=1; disp(0x0f&t) ;delay(1);ge=0;shi=1; disp(0xf0&t)>>4);delay(1); else shi=0;ge=1; disp(0x0f&b) ;delay(1);ge=0;shi=1; disp(0xf0&b)>>4);delay(1); 汇编程序:程序框图:是否有中断开始初始化是外部中断0发送p1口的数据接收数据是串行口中断是否有中断显示数据2ms结束p2.7=0等待 org 0000hstart:ljmp main org 000

14、3h ljmp int0_int org 0023h ljmp uart_intmain: mov dptr,#tabh mov pcon,#00h mov scon,#50h mov tmod,#20h mov th1, #0fdh mov tl1, #0fdh setb tr1 setb it0 setb ex0 setb es setb ea setb p2.7qq: jnb p2.7,dis sjmp qqint0_int: mov a,p1 mov sbuf,a mov r4,a jnb ti,$ clr ti clr p2.7 mov r5,#06habc:lcall delay2

15、 cpl p2.0 djnz r5,abc reti uart_int: jnb ri,$ clr ri mov a, sbuf mov r4,a clr p2.7 mov r5,#06hcba:lcall delay2 cpl p2.1 djnz r5,cba retidelay: mov r7,#85 del1: mov r6,#85 del3: nop nop nop nop nop djnz r6,del3 djnz r7,del1 retdis:mov a,r4 anl a,#0fh movc a,a+dptr mov p0,asetb p2.3clr p2.2 lcall dela

16、ycpl p3.7 mov a,r4 swap a anl a,#0fh movc a,a+dptr mov p0,a setb p2.2 clr p2.3 lcall delay sjmp distabh:db 0c0h,0f9h,0a4h,0b0h db 99h,92h,82h,0f8h db 80h,90h,88h,83h db 0c6h,0a1h,86h,8ehdelay2: mov r7,#255del2: mov r6,#255 nopdel4: djnz r6,del4 djnz r7,del2 ret end4 硬件连接图:六 仿真:七 实验心得:这次课程设计的题目比较简单,我

17、们感觉自己完成的也比较出色。我们采用了两位动态显示的数码管,掌握了多位数码管的工作原理;我们在硬件连接完成好以后进行检测,当我们检测所有的焊点都没有问题后,让单片机发送数据,可是另外一个单片机没有显示,而且仿真也没有错误。当我们不知所措时,我们意识到可能是单片机的程序没有烧正确,于是又重新将程序烧进去,结果应证了我们的猜测是对的。我们既用了汇编程序控制通信,也用了c语言程序,两个都实现了实验的要求,只不过汇编程序的参数设定的不够理想,数码管在高频闪动,我们也研究过好长时间,但还是不能够达到我们的要求。通过两个星期的学习,我们在巩固和学习硬件知识的同时,用软件控制协调硬件实现现实功能,通过硬件完

18、成软件的功能等方面的融会贯通,取得了一定的效果。软件编写时,对于某些指令的功能,功能模块的连接,芯片地址选择等都遇到了很大的障碍,不过我们查阅资料得到了解决,与此同时,了解了不少的问题。例如,51系列单片机具有多级中断功能,为了不至于在保护现场或恢复现场的的同时,由于cpu响应其他中断请求,而使现场破坏,一般规定,在保护和恢复现场时,cpu不响应外界的中断请求,即关中断。另外,设计中犯一些常识性的错误,对设计进程造成了一定的影响。例如,程序调试时,由于粗心录入程序时,将程序敲错,比如将0和字母o混淆,还有中文标点符号和英文标点符号混淆等。这样的错误很难发现,以至于花费了很多时间。本次设计是通过两块简单的8051单片机实现信息的串行通信。设计过程中,从双机通信背景的了解,到8051单片机具体功能的了解,从串行通信的原理的熟悉,到掌握具体串行通信在双机之间的实现;从硬件电路设计到程序编写;从硬件调试到软件模拟实

温馨提示

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

评论

0/150

提交评论