双机通信-单片机课程设计.doc下载

weixin_39821228 2023-03-19 16:00:20
单片机课程设计 双机通信 一、设计目的 1、掌握单片机89C52的程序设计,掌握单片机通信程序编制方法。 2、了解单片机实现通信的硬件环境。 3、掌握双机通信的原理和方法。 二、设计要求 1、用两片单片机,实现双机通信; 2、用与A机连接的按键控制A机对B机的信息传输,每按一次键,首先发送端显示要发送 数据,两台机器的发光二极管的显示相同。 3、用与B机连接的按键控制B机对A机的信息传输,每次按键,数码管的显示自动加一。 三、设计器材 "器件名称 "个数 " "STC8952RC "2 " "晶振 "2 " "电容(30PF) "4 " "电容(10uF) "2 " "LED "4 " "电阻(10K) "4 " "电阻(330) "2 " "电阻(8.2K) "2 " "开关 "4 " "数码管 "2 " "三极管(NPN) "1 " "排阻 "1 " 四、设计思路及方案 1、设计思路 计划采用主从共两片STC8952RC单片机来实现双机通信的,我们采用单片机直接交叉 连接的方式,上位机发送的数据由串行口TXD端输出,直接由下位机的串行口数据接收端 RXD接收。需要注意的是一定要保证主从机相同的数据传输速率,即要求设置相同的波特 率。电路分为数码管显示模块,单片机工作的基本复位、晶振模块。 2、设计原理 (1)原理概述 双机通信系统通过主从单片机的串行口来实现数据的收发。主单片机通过开关电路 来启动发送程序,当开关按下时向从机发送一个数据,从机通过接收中断来接收主机发 送过来的数据,并通过编写好的数据代码在LED数码管上显示主机发送过来的数据。同时 从机给主机发送一个应答信号来表示已经接收到了主机发送过来的数据,在主机接收应 答并校验正确,以二极管显示,这样就完成了一个数据的通信过程,等待按键按下,然 后继续下一次数据的发送直到结束。 (2)串行通信 串行数据通信要解决两个关键问题,一个是数据传送,另一个是数据转换。所谓数 据传送就是指数据以什么形式进行传送。所谓数据转换就是指单片机在接收数据时,如 何把接收到的串行数据转化为并行数据,单片机在发送数据时,如何把并行数据转换为 串行数据进行发送。单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端 和接收端使用的不是同一个时钟。异步串行通信通常以字符(或者字节)为单位组成字 符帧传送。字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。而对 于两个单片机之间的串行通信,由于具有相同的数据格式及电平且是短距离通信则不必 要使用一些电平转化芯片便可直接实现串行通讯,需要注意的是两单片机硬件要共地, 软件中需要设置相同波特率。 五、软件系统实现 1、软件仿真图 单片机晶振电路 复位电路 2、软件程序代码 (1)甲机程序代码 /* 名称:甲机串口程序 说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管 上。*/ #include #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0; sbit LED2=P1^3; sbit K1=P1^7; uchar Operation_No=0; //操作代码 //数码管代码 uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i++); } //向串口发送字符 void Putc_to_SerialPort(uchar c) { SBUF=c; while(TI==0); TI=0; } //主程序 void main() { LED1=LED2=1; P0=0x00; SCON=0x50; //串口模式 1,允许接收 TMOD=0x20; //T1 工作模式 2 PCON=0x00; //波特率不倍增 TH1=0xfd; TL1=0xfd; TI=RI=0; TR1=1; IE=0x90; //允许串口中断 while(1) { DelayMS(100); if(K1==0) //按下 K1 时选择操作代码 0,1,2,3 { while(K1==0); Operation_No=(Operation_No+1)%4; switch(Operation_No)//根据操作代码发送 A/B/C 或停止发送 { case 0: Putc_to_SerialPort('X'); LED1=LED2=1; break; case 1: Putc_to_SerialPort('A'); , 相关下载链接:https://download.csdn.net/download/qq_43934844/87506388?utm_source=bbsseo
...全文
15 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复
单片机课程设计 双机通信 一、设计目的 1、掌握单片机89C52的程序设计,掌握单片机通信程序编制方法。 2、了解单片机实现通信的硬件环境。 3、掌握双机通信的原理和方法。 二、设计要求 1、用两片单片机,实现双机通信; 2、用与A机连接的按键控制A机对B机的信息传输,每按一次键,首先发送端显示要发送 数据,两台机器的发光二极管的显示相同。 3、用与B机连接的按键控制B机对A机的信息传输,每次按键,数码管的显示自动加一。 三、设计器材 "器件名称 "个数 " "STC8952RC "2 " "晶振 "2 " "电容(30PF) "4 " "电容(10uF) "2 " "LED "4 " "电阻(10K) "4 " "电阻(330) "2 " "电阻(8.2K) "2 " "开关 "4 " "数码管 "2 " "三极管(NPN) "1 " "排阻 "1 " 四、设计思路及方案 1、设计思路 计划采用主从共两片STC8952RC单片机来实现双机通信的,我们采用单片机直接交叉 连接的方式,上位机发送的数据由串行口TXD端输出,直接由下位机的串行口数据接收端 RXD接收。需要注意的是一定要保证主从机相同的数据传输速率,即要求设置相同的波特 率。电路分为数码管显示模块,单片机工作的基本复位、晶振模块。 2、设计原理 (1)原理概述 双机通信系统通过主从单片机的串行口来实现数据的收发。主单片机通过开关电路 来启动发送程序,当开关按下时向从机发送一个数据,从机通过接收中断来接收主机发 送过来的数据,并通过编写好的数据代码在LED数码管上显示主机发送过来的数据。同时 从机给主机发送一个应答信号来表示已经接收到了主机发送过来的数据,在主机接收应 答并校验正确,以二极管显示,这样就完成了一个数据的通信过程,等待按键按下,然 后继续下一次数据的发送直到结束。 (2)串行通信 串行数据通信要解决两个关键问题,一个是数据传送,另一个是数据转换。所谓数 据传送就是指数据以什么形式进行传送。所谓数据转换就是指单片机在接收数据时,如 何把接收到的串行数据转化为并行数据,单片机在发送数据时,如何把并行数据转换为 串行数据进行发送。单片机的串行通信使用的是异步串行通信,所谓异步就是指发送端 和接收端使用的不是同一个时钟。异步串行通信通常以字符(或者字节)为单位组成字 符帧传送。字符帧由发送端一帧一帧地传送,接收端通过传输线一帧一帧地接收。而对 于两个单片机之间的串行通信,由于具有相同的数据格式及电平且是短距离通信则不必 要使用一些电平转化芯片便可直接实现串行通讯,需要注意的是两单片机硬件要共地, 软件中需要设置相同波特率。 五、软件系统实现 1、软件仿真图 单片机晶振电路 复位电路 2、软件程序代码 (1)甲机程序代码 /* 名称:甲机串口程序 说明:甲机向乙机发送控制命令字符,甲机同时接收乙机发送的数字,并显示在数码管 上。*/ #include #define uchar unsigned char #define uint unsigned int sbit LED1=P1^0; sbit LED2=P1^3; sbit K1=P1^7; uchar Operation_No=0; //操作代码 //数码管代码 uchar code DSY_CODE[]={0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f}; //延时 void DelayMS(uint ms) { uchar i; while(ms--) for(i=0;i<120;i++); } //向串口发送字符 void Putc_to_SerialPort(uchar c) { SBUF=c; while(TI==0); TI=0; } //主程序 void main() { LED1=LED2=1; P0=0x00; SCON=0x50; //串口模式 1,允许接收 TMOD=0x20; //T1 工作模式 2 PCON=0x00; //波特率不倍增 TH1=0xfd; TL1=0xfd; TI=RI=0; TR1=1; IE=0x90; //允许串口中断 while(1) { DelayMS(100); if(K1==0) //按下 K1 时选择操作代码 0,1,2,3 { while(K1==0); Operation_No=(Operation_No+1)%4; switch(Operation_No)//根据操作代码发送 A/B/C 或停止发送 { case 0: Putc_to_SerialPort('X'); LED1=LED2=1; break; case 1: Putc_to_SerialPort('A');

12,943

社区成员

发帖
与我相关
我的任务
社区描述
CSDN 下载资源悬赏专区
其他 技术论坛(原bbs)
社区管理员
  • 下载资源悬赏专区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧