找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 294|回复: 0
收起左侧

简单的单片机串口通信训练

[复制链接]
ID:1152570 发表于 2025-6-7 12:00 来自触屏版 | 显示全部楼层 |阅读模式
#include<reg51.h>       //包含单片机寄存器的头文件
/*****************************************************
函数功能:接收一个字节数据
***************************************************/
unsigned char Receive(void)
{
  unsigned char dat;
  while(RI==0)  //只要接收中断标志位RI没有被置“1”
           ;    //等待,直至接收完毕(RI=1)
          RI=0;      //为了接收下一帧数据,需将RI清0
     dat=SBUF;  //将接收缓冲器中的数据存于dat
          return dat;
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
   TMOD=0x20;  //定时器T1工作于方式2
   SCON=0x50;  //SCON=0101 0000B,串口工作方式1,允许接收(REN=1)
   PCON=0x00;  //PCON=0000 0000B,波特率9600
   TH1=0xfd;  //根据规定给定时器T1赋初值
   TL1=0xfd;  //根据规定给定时器T1赋初值      
   TR1=1;    //启动定时器T1   
   REN=1;    //允许接收
  while(1)
   {
             P1=Receive(); //将接收到的数据送P1口显示               
   }
}



#include<reg51.h>       //包含单片机寄存器的头文件
unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
//流水灯控制码,该数组被定义为全局变量

/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void Send(unsigned char dat)
{
   SBUF=dat;
   while(TI==0)
         ;
    TI=0;
}
/**************************************************************
函数功能:延时约150ms
**************************************************************/
void delay(void)   
{
   unsigned char m,n;
         for(m=0;m<200;m++)
          for(n=0;n<250;n++);
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
   unsigned char i;
   TMOD=0x20;  //TMOD=0010 0000B,定时器T1工作于方式2
   SCON=0x40;  //SCON=0100 0000B,串口工作方式1
   PCON=0x00;  //PCON=0000 0000B
   TH1=0xfd;   //根据规定给定时器T1赋初值,波特率9600
   TL1=0xfd;   //根据规定给定时器T1赋初值
   TR1=1;      //启动定时器T1   
  while(1)
   {
          for(i=0;i<8;i++)   //模拟检测数据
             {
                    Send(Tab[ i]);        //发送数据i
                          delay();   //50ms发送一次检测数据                          
                  }               
   }
}



#include<reg51.h>       //包含单片机寄存器的头文件
unsigned char code Tab[ ]={0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F};
//流水灯控制码,该数组被定义为全局变量

/*****************************************************
函数功能:向PC发送一个字节数据
***************************************************/
void Send(unsigned char dat)
{
   SBUF=dat;
   while(TI==0)
         ;
    TI=0;
}
/**************************************************************
函数功能:延时约150ms
**************************************************************/
void delay(void)   
{
   unsigned char m,n;
         for(m=0;m<200;m++)
          for(n=0;n<250;n++);
}
/*****************************************************
函数功能:主函数
***************************************************/
void main(void)
{
   unsigned char i;
   TMOD=0x20;  //TMOD=0010 0000B,定时器T1工作于方式2
   SCON=0x40;  //SCON=0100 0000B,串口工作方式1
   PCON=0x00;  //PCON=0000 0000B
   TH1=0xfd;   //根据规定给定时器T1赋初值,波特率9600
   TL1=0xfd;   //根据规定给定时器T1赋初值
   TR1=1;      //启动定时器T1   
  while(1)
   {
          for(i=0;i<8;i++)   //模拟检测数据
             {
                    Send(Tab[ i]);        //发送数据i
                          delay();   //50ms发送一次检测数据                          
                  }               
   }
}
mmexport1749268776329.png

评分

参与人数 1黑币 +50 收起 理由
admin + 50 共享资料的黑币奖励!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表