c51: 串口通信2

发布者:机器人总动员最新更新时间:2016-10-13 来源: elecfans关键字:C51  串口通信 手机看文章 扫描二维码
随时随地手机看文章
一、程序功能

pc向c51发送字符串"hello",c51收到"hello"表示通信测试正常,点亮P1.0脚。向pc发送"ok"

二、代码

 

/*程序功能:                                                              

pc向c51发送字符串"hello",c51收到"hello"表示通信测试正常,点亮P1.0脚。向pc发送"ok"

*/

 

#include

#define uchar unsigned char

 

//定义变量

uchar recbuf[10]; //接收数据缓存

uchar recnum;

 

//定义引脚,P1口的0脚控制指示灯,

//light=0,表示指示灯亮,light=1, 表示指示灯暗

sbit light=P1^0;

 

//定义通信联络信号

char buf[2]={'o','k'};

 

//初始化工作,

//T0、T1 设置为工作方式2,一个作波特率发生器,一个作定时器定时发送控制信号

//串口设置,

void init();

 

//声明处理函数

void answer();

 

//主函数

void main()

{

 

  init();

  while(1)

  {

   

      answer();

  }

 

 

 

}

 

//初始化工作,

//T0、T1 设置为工作方式2,一个作波特率发生器,一个作定时器定时发送控制信号

//串口设置,

void init()

{

  //定时器设置

  //T1,方式2,自动重载作波特率发生器

  //T0,方式0,13位计数器,作定时器,超时溢出

  TMOD=0x20;

 

  //T1常数计算,baud=9600,f=11.0592MHZ

  //晶振->12分频->定时器输入,8位计数,定时器输出->2分频(默认SMOD=0,如SMOD=1不分频)->16分频->波特率

  //常数TC=2^8-f/12/2/16/baud 

  TL1=0xfd;

  TH1=0xfd;

 

  //串口设置

  //串口方式1,允许接收

  SCON=0x50;

 

  //中断设置,串口开中断

  ES=1;    //串口开中断

  EA=1;   //打开 总允许

 

 

 

  //启动定时器

  TR1=1;

 

 

 

}

 

 

//定义串口中断程序,不需要声明

void serial() interrupt 4

{

 

  //关中断

  TI=0;

  ES=0;  //关键语句,关闭中断,程序可顺序向下执行

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

  TR0=1;

 

  //

  recnum=0;

 

  //----- 收到第一个字节

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第一个字节数据

  recbuf[recnum++]=SBUF;

 

 

  //----- 收到第二个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第二个字节数据

  recbuf[recnum++]=SBUF;

 

  //----- 收到第三个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第三个字节数据

  recbuf[recnum++]=SBUF;

 

  //----- 收到第四个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第四个字节数据

  recbuf[recnum++]=SBUF;

 

  //----- 收到第五个字节

 

  //启动定时器,超时推出

  TH0=0x00;

  TL0=0x00;

 

  //没有收到数据,未超时,等待

  while((RI==0) && (TF0==0));

  //手动复位

  RI=0;

  //如果超时,返回

  if(TF0==1)

  goto mm;

                                                                                                                                                             

  //收到第五个字节数据

  recbuf[recnum++]=SBUF;

 

 

  //关闭T0

mm:TR0=0;

    TF0=0;

  ES=1;

 

       

}

 

 

//定义处理函数

void answer()

{

 

 

 

    //

  uchar i;

 

   //关中断发送数据

   RI=0;

   TI=0;

   ES=0;

 

   if(recnum>0)

   {

     if( (recbuf[0]=='h') && (recbuf[1]=='e') && (recbuf[2]=='l') && (recbuf[3]=='l') && (recbuf[4]=='o') )

      {

        //点亮指示灯

        light=0;

 

        //发送OK,表示通信正常

        for(i=0;i<2;i++)

        {

          SBUF=buf[i];

             while(TI==0);

             TI=0;

 

        }

      }

 

   recnum=0;

 

   }

 

   ES=1;

 

}

关键字:C51  串口通信 引用地址:c51: 串口通信2

上一篇:c51:延时程序
下一篇:C51:串口程序

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

基于C51的嵌入式实时控制模块的设计与实现
  随着现代通信技术的发展,通信测试仪器不断推陈出新。各种新型设备对系统的实时响应能力的要求越来越高,一种通信测试仪器的实时响应性能,就成为系统设计能否成功的关键因素之一。笔者曾在多个通信测试仪器项目中,成功地应用ARM处理器、C51 单片机 等为主控芯片的嵌入式系统,实现了对仪器相关模块的实时控制功能。因此提出一种在某通信测试仪器中使用C51单片机来实现实时控制的设计方案。   1 硬件设计与实现   1.1 总体方案设计   在该通信测试仪器中,实时控制模块主要实现对射频接收频综、射频发生频综、 滤波器 组件、射频输入模块、射频输出模块等实时控制作用。对射频检波信号进行A/D转换以获取数据。与上位计算机进行通信等功能。   根
[单片机]
基于<font color='red'>C51</font>的嵌入式实时控制模块的设计与实现
C51中如何实现软复位?
可以定义一个指向复位向量(0x0000)的函数指针,然后在C程序中需要软复位的地方调用该函数: ((void (code *) (void)) 0x0000) (); 例如,以下程序不断地复位: void reset (void) {   ((void (code *) (void)) 0x0000) (); } void main (void) {   reset (); } 也许你会注意到前面所提到的复位程序并不恢复8051的中断系统,它也不去复位任何的8051外设。若上述代码在一个中断例程中执行,则8051 会阻止同级中断的产生。因此,在中断服务例程中不能使用这个复位程序。 以下的一小段汇编过程同样
[单片机]
【51单片机】(手把手教你)串口通信-基础篇
通信方式 并行 适合短距离通信,并行通信控制简单、相对传输速度快(8位一起传输)。 串行 只能一位一位的传送。 同步(了解) 建立发送方时钟对接收方时钟的直接控制,使双方达到完全同步。此时,传输数据的位之间的距离均为“位间隔”的整数倍,同时传送的字符间不留间隙。 发送方对接收方的同步可以通过外同步和自同步 异步(常) 以字符(构成的帧)为单位进行传输。数据位从低到高传送。 格式: 这里的空闲时间是任意的。 串行通信的制式(传输方向) 单工(仅能沿一个方向) 半双工(可进行双向,但需分时) 全双工 串行通信的错误校验 奇偶校验 在发送数据时,数据位尾随的1位为奇偶校验位(1/0)。
[单片机]
【51单片机】(手把手教你)<font color='red'>串口通信</font>-基础篇
AD7705应用 C51源程序
源程序有很多不妥之处:1、程序中电压结果换算不好,没用 % 取余方法 2、没有对最小精度进行换,方法是2.5/65535=38.14uV,然后用T_Voltage*38.14uV。另有问题请指出;希望大家能共享自己的原创,谢谢!游客说AD7710源程序与此差不多,不知是否能帮得上忙。 #include reg52.h #include absacc.h #include intrins.h #include math.h sbit Number_BIT0 = P2^7; sbit Number_BIT1 = P2^6; sbit Number_BIT2 = P2^5; sbit Number_BIT3 = P2^4; sb
[单片机]
c51:延时程序
#include reg52.h #define uchar unsigned char //f=11.0592 void delay(uchar ms) //约n(ms)延时 { int i; while(ms--) { i=97; while(i--); //循环1此约1ms } } main() { delay(1); delay(5); delay(10); delay(100); delay(1); //上述语句设置断点,观察sec参数,了解延时时间。 } /*约15ms延时 ,需较准确延时:
[单片机]
c51 bit使用
如i=0时,tab 的值为0x3f,那么这句bit_dat((bit)(tab &0x80));的作用是: 第一步:tab 与0x80作位与,即0x3f与0x80作位与(与0x40相位与就是取了第6位),这样的效果是取得了0x3f的最高位(第7位),其它位全部被屏蔽为0 第二步:作int向bit强制转换,向bit转换有一个规则,只要待转换前变量是非零,转换后的bit类型变量即为1,否则为0,这里,0x3f&0x80的结果为0,也就是((bit)(tab &0x80))的结果为0 第三步:调用bit_dat函数,向外设写入这一位。 后面的(bit_dat((bit)(tab &0x40))句子就是取次高位,后面的依此类推,就可以从高
[单片机]
C51程序设计中的数组和指针关系
一、指针是地址 各种类型的数据被分配合适的内存。比如整形数据通常被分配两个连续的存储单元(字节)存放。对数据的访问是通过分配给数据的内存首地址来实现的。我们称这些内存地址为指针。 二、指针变量是存放地址的变量 如果我们定义了一些变量来存放数据的地址(指针),这样的变量就是指针变量。也就是说,指针变量有两个特征:首先它作为变量会分配内存空间;其次,它存放的内容应该是内存地址。 比如,当我们声明了一个整形变量i并且赋予初始值10;同时我们声明了一个整形的指针变量p,将它指向变量i。当我们运行代码时,内存中可能是这样的: i - |0AH| FFF0H |00H|FFF1H |...| p - |0F0H | FFFAH |0FFH
[单片机]
DSP与PC间高速串口通信的实现
    摘要: 利用UART解决DSP与PC机间通信时速率匹配问题,并给出了具体实现电路。     关键词: DSP UART 串行通信 FIFO DSP是一种专门用来实现信号处理算法的微处理器芯片,主要优点有:硬件乘法器,哈佛总线结构,多种寻址方式,零耗循环(zero overhead loop),程序执行时间可预测等。     正是由于DSP的诸多优点能够满足密集的数学计算,而且DSP应用的另一个突出特点是实时性,使其在通信、雷达、数字电视等领域得到了广泛的应用,而且日益渗透到人们的日常生活的各个方面。     在实时信号处理中已经离不开DSP,这些处理系统中包含了各种数据通
[工业控制]
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

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

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

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