当前位置: 首页 > news >正文

STC15W1K16S和VC6.0串口通讯收发测试实例

/*********************************************

STC USB 串口板 2014 4 7 20:12 发送接收数据

使用STC串口调试助手通讯正常,L161

**********************************************/

          #include   "reg51.h"

          #include   "intrins.h"

          #define    uint unsigned int  

          #define    uchar unsigned char

 typedef    uchar BYTE;

          typedef    uint  WORD;

          #define    SLAVE 1                 //定义从机编号,0 为从机 1, 1 为从机 2

          #if        SLAVE==0

          #define    SAMASK 0x33             //从机 1 地址屏蔽位

          #define    SERADR 0x55             //从机 1 的地址为 xx01,xx01

          #define    ACKTST 0x78             //从机 1 应答测试数据

          #else

          #define    SAMASK 0x3C             //从机 2 地址屏蔽位

          #define    SERADR 0x5A             //从机 2 的地址为 xx01,10xx

          #define    ACKTST 0x49             //从机 2 应答测试数据

          #endif

          #define    URMD 2                  //0:使用定时器 2 作为波特率发生器

 sfr        AUXR=0x8e;              //辅助寄存器

          sfr        SADDR=0xA9;             //从机地址寄存器

          sfr        SADEN=0xB9;             //从机地址屏蔽寄存器

 char       count;

          sfr        P4=0xc0;

          sfr        P5=0xc8;

 sbit       out=P1^5;//

     sbit       out1=P4^5;//

          sbit       out2=P1^6;//

 sbit       out3=P1^7;//

 sbit       key1=P0^0;//

          sbit       key2=P0^1;//

 int        Buff;

 void       sw_out(unsigned char a);//开关量输出

/*--------UART 中断服务程序-------------------*/

         void Uart() interrupt 4 using 1

          {

          if(RI)

           {

           Buff=SBUF;

           RI=0;

           }

          }

/*------------初始化串口---------------------*/

         void InitUart()

          {

           SADDR=SERADR;

           SADEN=SAMASK;

           SCON=0x50;                //8位数据,可变波特率允许接收

           #if URMD==0

           T2L=0xDF;                        //设置波特率重装值

           T2H=0xFE;                        //9600bps(65536-11059200/4/9600)

           AUXR &=0x40;            //定时器1时钟为Fosc/12,即12T

      AUXR&=0xFE;                //串口1选择定时器1为波特率发生器

           #elif URMD==1

           AUXR=0x40;                       //定时器 1 为 1T 模式

           TMOD=0x20;                //设定定时器1为16位自动重装方式

      TL1=0xDF;                //设定定时初值

      TH1=0xFE;                //设定定时初值

      ET1=0;                    //禁止定时器1中断

      TR1=1;                    //启动定时器1

           #else

           TMOD=0x20;                       //设置定时器 1 为 8 位自动重装载模式

           AUXR=0x40;                       //定时器 1 为 1T 模式

  TL1=TH1=0xDB;                    // 9600 bps(256 - 11059200/32/9600)

           TR1=1;

           #endif

          }

/*******************************************/

 void  delay(uint t) 

          { 

           uint i,j; 

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

           {

            for(j=0;j<121;j++); 

           } 

          }

/*******************************************/

          void send(unsigned temp) 

            { 

             unsigned serial;

    serial=temp;

    SBUF=(unsigned char)temp;

             while(TI!=1);

    TI=0;

           }  

/*******************************************/   

           void  main(void)   

          {   

           unsigned char a=255;    

  InitUart();                       //初始化串口

           ES = 1;

           EA = 1;                                 

           P0=0XFF;

  out1=0;

  out2=1;

  out3=1;

  delay(2000); 

  out1=1;

  out2=0;

  out3=1;

  delay(2000); 

  out1=1;

  out2=1;

  out3=0;

  delay(2000); 

  out1=1;

  out2=1;

  out3=1;

           while(1)

           {

if(!key1) 

   {

   send(0X1F);

out1=0;

delay(1000);

out1=1;

   }

  if(!key2) 

   {

   send(0XF1);

out1=0;

delay(1000);

out1=1;

   }

       sw_out(Buff);            //输出开关量   

out=0;

   delay(2000);

   out=1;   

delay(2000);    

           }   

 }

/*******************************************/  

     void sw_out(unsigned char a)

     {

  if(a==0x01)

      {

   out1=0;

out2=1;

out3=1;

   }

    else if(a==0x02)

  {

   out1=1;

out2=0;

out3=1;

  }

  else if(a==0x04)

  {

   out1=1;

out2=1;

out3=0;

   }

  else if(a==0x00)

  {

   out1=1;

out2=1;

out3=1;

  }

       }

http://www.lryc.cn/news/343281.html

相关文章:

  • Python程序设计 函数(三)
  • linux之ssh
  • excel如何将多列数据转换为一列?
  • 【Java 刷题记录】前缀和
  • NVIDIA: RULER新测量方法让大模型现形
  • 2024数学-微积分和线性代数/本科研究生专业考试/考研/论文/重点公式考点汇总/最难公式投票
  • 代码随想录训练营Day33(贪心算法):Leetcode1005、134、135(难得有一天能完全独立做出题目)
  • Flutter笔记:Widgets Easier组件库(12)使用消息吐丝(Notify Toasts)
  • 从《春色寄情人》学习如何面对死亡
  • 使用moveit控制机械臂
  • Mysql报错红温集锦(一)(ipynb配置、pymysql登录、密码带@、to_sql如何加速、触发器SIGNAL阻止插入数据)
  • ASP.NET Core SignalR 配置与集成测试究极指南
  • JENKINS 安装,学习运维从这里开始
  • 大语言模型从Scaling Laws到MoE
  • 四级英语翻译随堂笔记
  • Nacos支持的配置格式及其在微服务架构中的应用
  • 2024年华为OD机试真题-小明找位置-(C++)-OD统一考试(C卷D卷)
  • 机器人系统ros2内部接口介绍
  • 跟随Facebook的足迹:社交媒体背后的探索之旅
  • 面试题分享之Java并发篇
  • bpmn-js 多实例配置MultiInstanceLoopCharacteristics实现或签会签
  • 【gpedit.msc】组策略编辑器的安装,针对windows家庭版,没有此功能
  • 带EXCEL附件邮件发送相关代码
  • 【算法作业】均分卡牌,购买股票
  • python作业
  • 【Linux的文件篇章 - 管道文件】
  • C# 局部静态函数,封闭方法中的最佳选择
  • 【MySQL】MySQL 8.4.0 长期支持版(LTS)安装
  • nest中的ORM
  • TCP(Transmission Control Protocol,传输控制协议)如何保证数据的完整性?