单片机之间串口通信
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
专业课程设计Ⅰ
题目
单片机间串口通信设计
院系:自动化学院
专业班级:智能0903班
小组成员:
指导教师:
日期:2012.03.26-2012.04.06
1.课程设计描述
近年来,单片机以其极高的性价比越来越多的在智能式仪表和工业过程控制中得到广泛的应用。但由于其本身资源有限,在一些复杂过程或功能较多的控制中就难以满足要求,需要将单片机的数据送到上一级的微机进行处理。因此实现上位机(PC机)与下位机(单片机)之间的数据可靠通信是必须解决的主要问题之一,在数据传输量不大的情况下,按照RS232标准进行串行通信越来越多的服务于各种应用系统中。实验要求利用简单的51单片机实现双机通信使得两片51都能够发送并接收信息。
2. 课程设计具体要求
2.1 了解单片机及其应用,明确课程学习内容及目标
2.2学会仿真图的设计
2.3选一个带有232接口的单片机,和电脑进行通信,或者两个都带有232接口的单片机,相互通信,一个做人机界面和通信程序.另外一个做采集程序和通信程序,通过人机界面获取命令,然后通过通信程序发送到另外一个单片机,另外一个单片机接收到命令后做相应的采集处理。
3.主要元器件
两片C52,两个11.0592晶振,烙铁,学生电源,104瓷片电容8个,22pf电容4个,4个LED灯,四脚开关两个,max232两个。
4.基本原理阐述
串行通信是指数据按位顺序传送的通信。串行数据传送的特点是:通信线路简单,最多只需一对传输线即可实现通信,成本低但速度慢,其通信线路既能传送数据信息,又能传送控制信息。它对信息的传送格式有固定要求,具体分为异步和同步两种信息格式.与此相应有异步通信和同步通信两种方式;在串行通信中,对信息的逻辑定义与TTL 不兼容,需要进行逻辑电平转换:计算机与外界的数据传送大多是串行的,其传送的距离可以从几米到几千公里。单片机中使用的串行通信通常都是异步方式的。
5.实验方案
5.1:硬件设计
5.2 软件程序
甲机程序:
//说明:甲机向乙机发送字符,本身也完成相应动作
#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[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,0xff}; //数码管代码
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=0xff;
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');
LED1=~LED1;LED2=1;
break;
case 2: Putc_to_SerialPort('B');
LED2=~LED2;LED1=1;
break;
case 3: Putc_to_SerialPort('C');
LED1=~LED1;LED2=LED1;
break;
}
}
}
}
void Serial_INT() interrupt 4 //甲机串口接收中断函数
{
if(RI)
{
RI=0;
if(SBUF>=0&&SBUF<=10) P0=DSY_CODE[SBUF];
else P0=0xff;
}
}
乙机程序:
// 说明:乙机接收到甲机发送的信号后,根据相应信号控制LED完成不同闪烁动作。
#include
#define uchar unsigned char
#define uint unsigned int
sbit LED1=P1^0;
sbit K2=P1^7;
sbit LED2=P1^3;
uchar NumX=-1;
void DelayMS(uint ms) //延时
{
uchar i;
while(ms--)
for(i=0;i<120;i++);
}
void main() //主程序
{
LED1=LED2=1;
SCON=0x50; //串口模式1,允许接收
TMOD=0x20; //T1工作模式2
TH1=0xfd; //波特率9600
TL1=0xfd;
PCON=0x00; //波特率不倍增
RI=0;