51单片机的双击通信.docx
- 文档编号:23705787
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:16
- 大小:155.63KB
51单片机的双击通信.docx
《51单片机的双击通信.docx》由会员分享,可在线阅读,更多相关《51单片机的双击通信.docx(16页珍藏版)》请在冰豆网上搜索。
51单片机的双击通信
一设计题目:
双机通信系统
二实验描述:
设计一个双机通信系统,实现按键数据的互发及显示功能。
三实验要求:
利用两片8051单片机完成双机通信(A机和B机),A、B机发至对方数据可用数码管显示,通信过程用按键控制,发送内容自定。
四实验元件:
ST89C51(两片)、电容(30PF*4、10UF*4)、数码管(共阳)、晶振(11.0592MHZ)、小按键等。
五具体设计:
1:
设计介绍
1.1串行通信介绍
广义地讲,终端(如计算机等)与其他终端、终端与外部设备(如打印机、显示器等)之间的信息交换称为数据通信(DataCommunication)。
数据通信方式有两种:
串行通信和并行通信。
并行通信:
数据的各位同时进行传送(接收和发送),其优点是传递速度快、效率高,多用在实时、快速的场合。
串行通信:
数据逐位传送,优点是数据只需要一根数据线就能完成传送,联结介质简单,成本低。
1.28051简介
51内部结构:
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,
·中央处理器:
中央处理器(CPU)是整个单片机的核心部件,是8位数据宽度的处理器,能处理8位二进制数据或代码,CPU负责控制、指挥和调度整个单元系统协调的工作,完成运算和控制输入输出功能等操作。
·数据存储器(RAM):
8051内部有128个8位用户数据存储单元 8051内部有128个8位用户数据存储单元和128个专用寄存器单元,它们是统一编址的,专用寄存器只能用于存放控制指令数据,用户只能访问,而不能用于存放用户数据,所以,用户能使用的的RAM只有128个,可存放读写的数据,运算的中间结果或用户定义的字型表。
·程序存储器(ROM):
8051共有4096个8位掩膜ROM,用于存放用户程序,原始数据或表格。
·定时/计数器(ROM):
8051有两个16位的可编程定时/计数器,以实现定时或计数产生中断用于控制程序转向。
·并行输入输出(I/O)口:
8051共有4组8位I/O口(P0、P1、P2或P3),用于对外部数据的传输。
·全双工串行口:
8051内置一个全双工串行通信口,用于与其它设备间的串行数据传送,该串行口既可以用作异步通信收发器,也可以当同步移位器使用。
·中断系统:
8051具备较完善的中断功能,有两个外中断、两个定时/计数器中断和一个串行中断,可满足不同的控制要求,并具有2级的优先级别选择。
8051单片机包含中央处理器、程序存储器(ROM)、数据存储器(RAM)、定时/计数器、并行接口、串行接口和中断系统等几大单元及数据总线、地址总线和控制总线等三大总线,现在我们分别加以说明:
·时钟电路:
8051内置最高频率达12MHz的时钟电路,用于产生整个单片机运行的脉冲时序,但8051单片机需外置振荡电容。
MCS-51系列单片机的内部结构示意图
51引脚图:
Vss(20脚):
接地
VCC(40脚):
主电源+5V
XTAL1(19脚):
接外部晶体的一端。
在片内它是振荡电路反相放大器的输入端。
在采用外部时钟时,对于HMOS单片机,该端引脚必须接地;对于CHMOS单片机,次XTAL2(18脚):
接外部晶体的另一端。
在片内它是一个振荡电路反相放大器的输出端,振荡电路的频率是晶体振荡频率。
若需采用外部时钟电路,对于HMOS单片机,该引脚输入外部时钟脉冲;对于CHMOS单片机,此引脚应悬浮。
引脚作为驱动端。
RST(9脚):
单片机刚接上电源时,其内部各寄存器处于随机状态,在该脚输入24个时钟周期宽度以上的高电平将使单片机复位(RESET)
PSEN(29脚):
在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。
CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。
不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。
PSEN端同样可驱动8个LSTTL负载。
我们根据PSEN、ALE和XTAL2输出端是否有信号输出,可
以判别80C51是否在工作。
ALE/PROG(30脚):
在访问片外程序存储器时,此端输出负脉冲作为存储器读选通信号。
CPU在向片外存储器取指令期间,PSEN信号在12个时钟周期中两次生效。
不过,在访问片外数据存储器时,这两次有效PSEN信号不出现。
PSEN端同样可驱动8个LSTTL负载。
我们根据PSEN、ALE和XTAL2输出端是否有信号输出,
可以判别80C51是否在工作。
EA/VPP(31脚):
当EA端输入高电平时,CPU从片内程序存储器地址0000H单元开始执行程序。
当地址超出4KB时,将自动执行片外程序存储器的程序。
当EA输入低电平时,CPU仅访问片外程序存储器。
在对87C51EPROM编程时,此引脚
脚用于施加编程电压VPP。
输入/输出引脚:
(1)P0.0—P0.7 (39脚—32脚)
(2)P1.0—P1.7 (1脚—8脚)
(3)P2.0—P2.7 (26脚—21脚)
(4)P3.0—P3.7 (10脚—17脚)
1.3双击通信图
2软件设计
C语言程序:
#include
#defineucharunsignedchar
#defineuintunsignedint
sbitge=P2^3;
sbitshi=P2^2;
sbitdeng_1=P2^0;
sbitdeng_2=P2^1;
voiddelay(uintz);
ucharb=0;
uchart=0;
ucharflag;
voidinit()
{
TMOD=0x20;计数器一工作方式2
TH1=0xfd;计数器初值
TL1=0xfd;
SCON=0x50;串口工作方式0
EX0=1;外部中1
TR1=1;计数器开始计数
ES=1;串口中断使能
EA=1;cpu总中断
}
voiddisp(ucharm)
{
switch(m)
{
case0x00:
P0=0xc0;break;
case0x01:
P0=0xf9;break;
case0x02:
P0=0xa4;break;
case0x03:
P0=0xb0;break;
case0x04:
P0=0x99;break;
case0x05:
P0=0x92;break;
case0x06:
P0=0x82;break;
case0x07:
P0=0xf8;break;
case0x08:
P0=0x80;break;
case0x09:
P0=0x90;break;
case0x0a:
P0=0x88;break;
case0x0b:
P0=0x83;break;
case0x0c:
P0=0xc6;break;
case0x0d:
P0=0xa1;break;
case0x0e:
P0=0x86;break;
case0x0f:
P0=0x8e;break;
default:
P0=0x00;
}
}
voidextern_int0(void)interrupt0
{
t=P1;
SBUF=t;
while(!
TI);
TI=0;
flag=1;
deng_1=~deng_1;
delay(100);
deng_1=~deng_1;
}
voidserial_serve(void)interrupt4
{
uchara;
flag++;
a=SBUF;
while(!
RI);
RI=0;
b=a;
deng_2=~deng_2;
delay(100);
deng_2=~deng_2;
}
voiddelay(uintz)
{
uintx,y;
for(x=0;x for(y=0;y<121;y++) ; } voidmain() { init(); 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); } } } 汇编程序: 程序框图: 是否有中断 ORG0000H START: LJMPMAIN ORG0003H LJMPINT0_INT ORG0023H LJMPUART_INT MAIN: MOVDPTR,#TABH MOVPCON,#00H MOVSCON,#50H MOVTMOD,#20H MOVTH1,#0FDH MOVTL1,#0FDH SETBTR1 SETBIT0 SETBEX0 SETBES SETBEA SETBP2.7 QQ: JNBP2.7,DIS SJMPQQ INT0_INT: MOVA,P1 MOVSBUF,A MOVR4,A JNBTI,$ CLRTI CLRP2.7 MOVR5,#06H ABC: LCALLDELAY2 CPLP2.0 DJNZR5,ABC RETI UART_INT: JNBRI,$ CLRRI MOVA,SBUF MOVR4,A CLRP2.7 MOVR5,#06H CBA: LCALLDELAY2 CPLP2.1 DJNZR5,CBA RETI DELAY: MOVR7,#85 DEL1: MOVR6,#85 DEL3: NOP NOP NOP NOP NOP DJNZR6,DEL3 DJNZR7,DEL1 RET DIS: MOVA,R4 ANLA,#0FH MOVCA,@A+DPTR MOVP0,A SETBP2.3 CLRP2.2 LCALLDELAY CPLP3.7 MOVA,R4 SWAPA ANLA,#0FH MOVCA,@A+DPTR MOVP0,A SETBP2.2 CLRP2.3 LCALLDELAY SJMPDIS TABH: DB0C0H,0F9H,0A4H,0B0H DB99H,92H,82H,0F8H DB80H,90H,88H,83H DB0C6H,0A1H,86H,8EH DELAY2: MOVR7,#255 DEL2: MOVR6,#255 NOP DEL4: DJNZR6,DEL4 DJNZR7,DEL2 RET END 4硬件连接图: 六仿真: 七实验心得: 这次课程设计的题目比较简单,我们感觉自己完成的也比较出色。 我们采用了两 位动态显示的数码管,掌握了多位数码管的工作原理;我们在硬件连接完成好以 后进行检测,当我们检测所有的焊点都没有问题后,让单片机发送数据,可是另 外一个单片机没有显示,而且仿真也没有错误。 当我们不知所措时,我们意识到 可能是单片机的程序没有烧正确,于是又重新将程序烧进去,结果应证了我们的 猜测是对的。 我们既用了汇编程序控制通信,也用了C语言程序,两个都实现 了实验的要求,只不过汇编程序的参数设定的不够理想,数码管在高频闪动,我 们也研究过好长时间,但还是不能够达到我们的要求。 通过两个星期的学习,我们在巩固和学习硬件知识的同时,用软件控制协调硬件实现现实功能,通过硬件完成软件的功能等方面的融会贯通,取得了一定的效果。 软件编写时,对于某些指令的功能,功能模块的连接,芯片地址选择等都遇到了很大的障碍,不过我们查阅资料得到了解决,与此同时,了解了不少的问题。 例如,51系列单片机具有多级中断功能,为了不至于在保护现场或恢复现场的的同时,由于CPU响应其他中断请求,而使现场破坏,一般规定,在保护和恢复现场时,CPU不响应外界的中断请求,即关中断。 另外,设计中犯一些常识性的错误,对设计进程造成了一定的影响。 例如,程序调试时,由于粗心录入程序时,将程序敲错,比如将0和字母O混淆,还有中文标点符号和英文标点符号混淆等。 这样的错误很难发现,以至于花费了很多时间。 本次设计是通过两块简单的8051单片机实现信息的串行通信。 设计过程中,从双机通信背景的了解,到8051单片机具体功能的了解,从串行通信的原理的熟悉,到掌握具体串行通信在双机之间的实现;从硬件电路设计到程序编写;从硬件调试到软件模拟实现等过程,都是在自己的努力下,有条不紊地进行。 这次课程设计总体来说比较简单,所以也没有太多的问题。 在这次 设计中,我收获不少东西,也遇到了不少的问题。 首先,在完成单片机课程学习任务后,对内容的掌握不够,缺乏灵活运用的能力,对于知识的扩展也存在一定的问题,因此,初面对设计课题,无法系统地进行设计思路的拟定。 通过本次课程设计,不仅使理论知识得到了实践,有效巩固了知识。 同时对于单片机发展历史、强大功能、应用领域以及系列知识得到了大概的系统认识,同时也初步了解了一个完整的系统开发的过程,对于创造思维的培养和开发能力的锻炼,本次设计,为此提供了一个很好的平台。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 51 单片机 双击 通信