历史上的今天
返回首页

历史上的今天

今天是:2025年01月09日(星期四)

正在发生

2018年01月09日 | 单片机与单片机串口通讯程序

2018-01-09 来源:eefocus

单片机 与单片机串口通讯程序

#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; 


推荐阅读

史海拾趣

Electro-Mech Components Inc公司的发展小趣事

随着公司业务的不断发展壮大,EMC开始积极实施全球化战略。公司在全球范围内寻找合适的合作伙伴和销售渠道,努力将其产品推向更广阔的市场。通过与国际知名品牌的合作和交流,EMC不断提升自身的品牌形象和市场影响力。同时,公司还加强了对海外市场的调研和分析工作,以便更好地满足不同地区客户的需求和期望。

请注意,以上故事是基于已知信息构建的框架性内容,具体细节和情节需要根据实际情况进行填充和完善。

淩志比高公司的发展小趣事

在电子行业的浪潮中,淩志比高公司由几位充满激情的创业者创立。创业初期,公司面临着资金短缺、市场竞争激烈等挑战。然而,凭借对技术的深刻理解和敏锐的市场洞察力,淩志比高成功开发出一款具有创新性的电子产品,迅速在市场上获得了一席之地。

Baneasa SA公司的发展小趣事

Baneasa SA公司成立之初,便专注于电子元器件的研发与生产。公司凭借创始团队的技术积累和市场洞察力,成功开发出一款高性能的半导体芯片,迅速在行业内崭露头角。这款芯片以其出色的稳定性和可靠性赢得了市场的广泛认可,为Baneasa SA的发展奠定了坚实的基础。

德欣(COV)公司的发展小趣事

随着技术的不断成熟和产品的不断优化,德欣公司开始积极拓展市场。公司通过参加各类行业展会、举办技术交流会等方式,与国内外客户建立了广泛的联系。同时,德欣公司还注重品牌建设,通过优质的产品和服务赢得了客户的信任和认可。逐渐地,德欣品牌在电子行业中崭露头角,成为了一家备受瞩目的企业。

Bellin Dynamic Systems公司的发展小趣事

随着公司规模的扩大和业务范围的拓展,Bellin Dynamic Systems开始注重品牌建设和市场推广。公司加大了对品牌形象的宣传力度,通过参加行业展会、举办技术研讨会等方式提升品牌知名度。同时,公司还加强了与媒体和客户的沟通互动,积极传递公司的价值观和企业文化。这些举措有效地提升了Bellin Dynamic Systems在市场上的影响力和竞争力。

GPD Optoelectronics Corp公司的发展小趣事

在面临激烈的市场竞争时,Bellin Dynamic Systems选择与行业内的其他领军企业展开战略合作。通过与这些企业的合作,Bellin Dynamic Systems不仅获得了更多的技术资源和市场渠道,还共同推动了整个行业的发展。这种合作共赢的模式使得Bellin Dynamic Systems在竞争中保持了领先地位。

问答坊 | AI 解惑

12864C系列中文液晶显示模块使用说明书

C系列中文模块可以显示字母、数字符号、中文字型及图形,具有绘图及文字画面混合显示功能。提供 三种控制接口,分别是8位微处理器接口,4位微处理器接口及串行接口(OCMJ4X16A/B无串行接口)。所 有的功能,包含显示RAM,字型产生器,都包含在一 ...…

查看全部问答>

03月31日 【EEWORLD带你DIY】示波器方案讨论

报名页面:https://www.eeworld.com.cn/formguide/index.php?formid=90 (请在备注中注明自己所参与的部分) DIY示波器活动QQ群:16254999 在整体方案上参考上的示波器设计方案,采用STM32F103RBT6作为主控CPU,LPC2103作为辅助CPU,对于原有模拟 ...…

查看全部问答>

热电偶测温晶闸管调压不稳的问题

用热电偶测温,经单片机pid调节,触发固态继电器实现线性升温 但当电网电压变化时,升温曲线不稳定,很不线性 原因到底出在哪里呢,高次谐波?继电器?pid参数?还是其它因素,希望大家各抒己见,十分希望能得到各位的帮助,谢谢!…

查看全部问答>

mp3文件如何存入到nor flash中

给分虽然少,但已经是本人分数的多一半了,不好意思哈 现在具体说一下问题的内容: 核心是把mp3文件烧录到arm7板的片外nor flash中,如果没有操作系统,也没有文件系统的话,我应该怎么考虑呢?按照字节串口传输吗?我该如何把mp3文件转成字节的 ...…

查看全部问答>

vc编的程序转为evc4在WINCE上运行问题

VC6编的程序,想在ARM9模块上运行,程序是关于串口输入输出的,还有同上位机数据库连接的内容,用了MFC。 请问一下,我这个程序转为EVC4程序,要作些什么,难度几何?…

查看全部问答>

.net 1.0 调用.net 2.0的 dll

做一个程序 需在WinCE系统.net 1.0 上运行,有什么方法用.net 2.0里实现的功能吗?比如实现WebBrowser功能,能否引用System.Windows.Forms.dll来实现? 虽然几乎不可能,但我还是要问,想知道为什么不行?…

查看全部问答>

111

111222222 [ 本帖最后由 lelede1987 于 2011-3-30 18:11 编辑 ]…

查看全部问答>

Spartan-6 LX9 Microboard不用XCF04怎么实现配置

Spartan-6 LX9 Microboard开发板中不用XCF04怎么实现配置的。   想知道原来装有XCFO4,怎样去掉。 好像只有TDO信号没连拉到JTAG。   [ 本帖最后由 sdjntl 于 2011-8-4 17:39 编辑 ]…

查看全部问答>

移相

请问下有谁知道移相的芯片,最好是带宽比较大的那种,能实现移相位的功能,想要对某一带宽 内的信号进行移相,希望得到大家的帮助,非常感谢!…

查看全部问答>

220V交流电压采集疑惑

采集220V交流电压的时候,交流信号的N线是不是和运放的地是一个啊,无论220是先经过电阻分压还是互感器,220V经过AC/DC给运放供电,都没法让N线和运放的地共起来啊!求指点 …

查看全部问答>