单片机相互之间的串口通讯程序

发布者:DreamBig123最新更新时间:2014-02-10 来源: dqjsw关键字:单片机  串口通讯  数据函数 手机看文章 扫描二维码
随时随地手机看文章

#include
#define uchar unsigned char
#define SLAVE 0x00
#define BN 16

uchar idata tdata[16];
uchar idata rdata[16];
bit trdy;
bit rrdy;
void main(void)
{
  TMOD=0x20;                        //定时器T1为模式2
  TL1=0xfd;                        //定时器初值
  TH1=0xfd;
  PCON=0x00;
  TR1=1;
  SCON=0xf0;                        //串行口方式3
  ES=1;EA=1;                        //开串行口中断
  while(1){trdy=1;rrdy=1;}                //准备好发送和接收
}

void slave(void) interrupt 4 using 1
{
  void str(void);
  void sre(void);
  uchar a;
  RI=0;                            //关串行口中断
  ES=0;
  if(SBUF!=SLAVE){ES=1;goto reti;}        //非本机地址,继续监听
  SM2=0;                            //取笑监听状态
SBUF=SLAVE;                    //发回从机地址
while(TI!=1);TI=0;
while(RI!=1);RI=0;
if(RB8==1){SM2=1;ES=1;goto reti;}        //确认地址不符,从机复位
a=SBUF;                        //接收命令
if(a==1){                        //从机接收主机的数据
if(rrdy==1) SBUF=0x01;            //接收准备好,发回0x01
else
SBUF=0x00;
while(TI!=1);TI=0;
while(RI!=1);RI=0;
if(RB8==1){SM2=1;ES=1;goto reti;}
sre();                        //接收数据
}
else
{
if(a==0x02)                    //从机向主机发送数据
{
if(trdy==1) SBUF=0x02;        //发送准备好
else
SBUF=0x00;
while(TI!=1);TI=0;
while(RI!=1);RI=0;
if(RB8==1){SM2=1;ES=1;goto reti;}
str( );                    //发送数据
}
else
{
SBUF=0x80;                //命令非法
while(TI!=1);TI=0;
SM2=1;ES=1;                //恢复监听
}
}
reti:;
}

void str(void)                        //发送数据函数
{uchar p,i;
 trdy=0;
 do{p=0;                            //初始校验和为0
    for(i=0;i     {SBUF=tdata[i];                    //发送数据
      p+=tdata[i];
      while(TI!=1);TI=0;
     }
  SBUF=p;                        //发送校验和
while(TI!=1);TI=0;
while(RI!=1);RI=0;
}while(SBUF!=0);                    //主机接收不正确,重新发送

SM2=1;ES=1;
}

void sre(void)                        //接收数据函数
{uchar p,i;
 rrdy=0;
 while(1)
{p=0;                                //初始化校验和为0
   for(i=0;i{while(RI!=1);RI=0;
   tdata[i]=SBUF;                    //接收数据
   p+=rdata[i];
  }
  while(RI!=1);RI=0;
if(SBUF==p){SBUF=0x00;break;}        //校验和相同,发00H
else{
SBUF=0xFF;while(TI!=1);TI=0;        //校验和不同,发FFH,重新接收
 }
}
SM2=1;ES=1;
}

关键字:单片机  串口通讯  数据函数 引用地址:单片机相互之间的串口通讯程序

上一篇:单片机编程下载线制作
下一篇:比赛用竞速机器人系统研究

推荐阅读最新更新时间:2024-03-16 13:35

基于68HC908MR16单片机的光伏正弦波逆变电源
摘要:介绍了一种基于MOTOROLA公司生产的68HC908MR16单片机的光伏正弦波逆变电源。该系统应用SPWM技术将经太阳电池阵列充电后的蓄电池电压,逆变为标准的正弦单相220V、50Hz交流电压,同时采用新型的数字式PI调节器实现稳压控制,并通过与外界键盘监控系统进行串行通信实现参数调节和系统监控。 关键词:光伏逆变;MR16单片机;PI调节器;串行通信   1 引言 随着能源危机的日益加剧和人类环保意识的提高,新能源的开发利用越来越受到人们的重视。而太阳能作为取之不尽用之不竭的高效无污染的能源近来更受人们的青睐。本文介绍的光伏正弦逆变电源系统正是一种适于户用的、特别适于无电少电的西部边远地区用户的一种电
[单片机]
基于68HC908MR16<font color='red'>单片机</font>的光伏正弦波逆变电源
大联大品佳集团推出Infineon低成本汽车照明单片机解决方案
大联大品佳集团推出基于Infineon产品的低成本汽车照明通用单片机解决方案 2021年11月4日,致力于亚太地区市场的领先半导体元器件分销商---大联大控股宣布,其旗下品佳推出基于英飞凌(Infineon)CK8CKIT-044评估板的低成本汽车照明通用单片机解决方案。 图示1-大联大品佳基于Infineon产品的低成本汽车照明通用单片机方案的展示板图 如今,汽车已成为人们生活中必不可少的交通工具,其安全问题也受到社会极大的关注。在汽车所有的组成部分中,尾灯对于汽车安全性的重要性不言而喻,它的存在大幅度减少了交通事故的发生。因此,如何设计尾灯的各种功能以最大化其价值,是各大厂商亟需解决的问题。随着技术的发展,当今
[汽车电子]
大联大品佳集团推出Infineon低成本汽车照明<font color='red'>单片机</font>解决方案
专家视点:MCU用户面临三大挑战
在日益全球化和竞争激烈的环境中,微控制器的用户(OEM厂商)正在努力求得生存与发展。美国经济萎靡不振,使得他们的生存环境变得更加严峻。这些用户面临三种挑战:首先,他们正在努力通过功能特点、性能或价格使其终端产品实现差异化。其次,他们正在努力加快产品上市速度,以收回在复杂的设计上面所耗费的越来越多的投资。第三,他们试图在不增加成本的情况下实现上述两个目标。MCU用户面临的这些挑战为MCU的下一步发展奠定了基础。 为了使终端产品实现差异化,OEM厂商更加热衷于增加额外的功能特点,比如用户界面与连接性。用户界面正在迅速从按键型向触摸感应型转变。尤其是在家电产业,触摸感应用户界面在外观和功能性方面都具有优势。比如煤气灶表面可
[单片机]
专家视点:<font color='red'>MCU</font>用户面临三大挑战
基于89C52单片机和MB90092芯片实现视频图像叠加应用系统的设计
1、引言 随着监控现场的扩展和探头数量增多,在监控端的图像显示系统中,经常需要接收外部数据并把相关的信息实时地连同图像显示在监控屏幕上,以便使用人员知道该图像信息以何种方式来自何处及与之相关的信息,时间,地区徽标,实时数据显示在屏幕上。但是对于监控人员而言,监控端遭到攻击是一个值得担心的问题,因此,改善技术方案和增强安全性是对目前状况提出的一种迫切要求。监控人员希望所看到的是得到验证的真实图像,无论时间、环境、探头位置、角度和焦距都必须得到保证。在远程监控场合,有关重要部门的监控者往往对于接收图像的实时性和真实性不完全放心,尤其是如果对高科技对象实时监控,那么,当监控者因故临时离开监控台一段时间后,由于不知道被监控方是否对监控系统
[单片机]
基于89C52<font color='red'>单片机</font>和MB90092芯片实现视频图像叠加应用系统的设计
单片机数码管的真值表
数码管的 8 个段,我们直接当成 8 个 LED 小灯来控制,那就是 a、b、c、d、e、f、g、dp 一共 8 个 LED 小灯。我们通过图 5-3 可以看出,如果点亮 b 和 c 这两个 LED 小灯,也就是数码管的 b 段和 c 段,其他的所有的段都熄灭的话,就可以让数码管显示出一个数字 1,那么这个时候实际上 P0 的值就是 0b11111001,十六进制就是 0xF9。那么我们写一个程序进去,来看一看数码管显示的效果。 #include reg52.h sbit ADDR0 = P1^0; sbit ADDR1 = P1^1; sbit ADDR2 = P1^2; sbit ADDR3 = P1^3; sbit ENLE
[单片机]
浅析51单片机P0口上拉电阻的选择应用
  P0口作为I/O口输出的时候时,输出低电平为0 输出高电平为高组态(并非5V,相当于悬空状态,也就是说P0 口不能真正的输出高电平)。给所接的负载提供电流,因此必须接上拉电阻(一电阻连接到VCC),由电源通过这个上拉电阻给负载提供电流。   P0作输入时不需要上拉电阻,但要先置1。因为P0口作一般I/O口时上拉场效应管一直截止,所以如果不置1,下拉场效应管会导通,永远只能读到0。因此在输入前置1,使下拉场效应管截止,端口会处于高阻浮空状态,才可以正确读入数据。     由于P0口内部没有上拉电阻,是开漏的,不管它的驱动能力多大,相当于它是没有电源的,需要外部的电路提供,绝大多数情况下P0口是必需加上拉电阻的。   1.一般51
[单片机]
关于中颖4位单片机AD转换中的一些经验
关于中颖4位机10位AD篇章中的数据处理,10位数据也即: 1111,1111,XX11 或 X111,1111,111X ; 1,起初以为10位数据取8位,把低两位直接省掉就可以了,准备开始写程序了,偶然看到论坛里的一个人也在这里; 于是重新进入中颖网站,原来 1111,1111,XX11 得合并为 1111,1111,11 然后再求和,取平均值; 处理方法,最低位和0011相于,把中位用ADDM左移两位空出低,并上低位, ,得低位;再把中位右位两位得 ,等 待高位,然后把高位左移两位 与中位相或,得中位,最后把高右移位两位,即数据变为 11,1111,1111 ; 想一下吧,是不是很简单?! 2,我根据上面的思路,自已
[单片机]
海速芯8位MCU-TM52F1376用于电动剃须刀
电动剃须刀由不锈钢网罩、内刀片、微型电动机和壳体组成,其中主控方面控制按键开关、电机驱动、电源管理等,为保证性能,电动剃须刀需要选用一个稳定性能好的MCU。本文将推荐海速芯高性能、高稳定性的8位MCU-TM52F1376应用于电动剃须刀。 海速芯8位MCU-TM52F1376的主要应用优势特点如下: ①采用8051内核、8bit的MCU,主频高达18MHz,因而拥有高性价比、稳定性好的特点,适合电动剃须刀上的应用,节约成本; ②拥有3ch PWM控制资源,满足电动剃须刀对于电机方面的控制; ③封装形式多样,满足不同设计需求,同时可以有效简化PCB面积; ④工作温度为-40℃~85℃,非常适合对于消费类电子产品即电动剃须刀上的应
[单片机]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
热门活动
换一批
更多
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

更多精选电路图
换一换 更多 相关热搜器件
更多每日新闻
随便看看
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved