C51串口中断接收和发送程序

简介: //这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 //和查询发送,另外我觉得发送没有必要用中断#include #include #define INBUF...
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 
//和查询发送,另外我觉得发送没有必要用中断

#include <reg51.h>
#include <string.h>

#define INBUF_LEN 4    //数据长度

unsigned  char inbuf1[INBUF_LEN];
unsigned  char checksum,count3;
bit read_flag=0;

void init_serialcomm( void)
{
    SCON  = 0x50;        //SCON: serail mode 1, 8-bit UART, enable ucvr 
    TMOD |= 0x20;        //TMOD: timer 1, mode 2, 8-bit reload 
    PCON |= 0x80;        //SMOD=1; 
    TH1 = 0xF4;        //Baud:4800  fosc=11.0592MHz 
    IE |= 0x90;        //Enable Serial Interrupt 
    TR1 = 1;           // timer 1 run 
    // TI=1; 
}

//向串口发送一个字符 
void send_char_com( unsigned  char ch)
{
    SBUF=ch;
     while(TI==0);
    TI=0;
}

//向串口发送一个字符串,strlen为该字符串长度 
void send_string_com( unsigned  char *str, unsigned  int strlen)
{
     unsigned  int k=0;
     do 
    {
        send_char_com(*(str + k));
        k++;
    }  while(k < strlen);
}

//串口接收中断函数 
void serial () interrupt 4 using 3 
{
     if(RI)
    {
         unsigned  char ch;
        RI = 0;
        ch=SBUF;
         if(ch>127)
        {             count3=0;
             inbuf1[count3]=ch;
             checksum= ch-128;
        }
         else 
        {
             count3++;
             inbuf1[count3]=ch;
             checksum ^= ch;
              if( (count3==(INBUF_LEN-1)) && (!checksum) )
             {
                 read_flag=1;   //如果串口接收的数据达到INBUF_LEN个,且校验没错, 
                                //就置位取数标志 
             }
        }
    }
}

main()
{
    init_serialcomm();   //初始化串口 
     while(1)
    {
           if(read_flag)   //如果取数标志已置位,就将读到的数从串口发出 
          {
               read_flag=0;  //取数标志清0 
               send_string_com(inbuf1,INBUF_LEN);
          }     }
}
目录
相关文章
|
2月前
|
监控
LabVIEW与串口通讯在运行一段时间后出现数据接收中断的问题
LabVIEW与串口通讯在运行一段时间后出现数据接收中断的问题
65 0
|
4月前
环形队列+DMA空闲中断+接收串口数据
环形队列+DMA空闲中断+接收串口数据
113 0
|
11月前
|
索引
串口助手(串口发送接收数据, 定时, 清空, hex显示)
串口助手(串口发送接收数据, 定时, 清空, hex显示)
718 0
STM32CubeMX串口USART中断发送接收数据
上一篇文章 详细介绍了 USART 串口 不使用中断 发送接收数据 ,这篇文章 将介绍如何 使用中断控制 USART 串口 发送接收数据。 对于如何根据 CubeMX 生成 USART 的工程,可以参考我的上篇文章,也介绍了 关于生成 usart.c 代码的解析 : STM32Cube串口USART发送接收数据
293 0
|
C语言 芯片
STM32学习笔记(5) 串口通讯-接收与发送
一个码元就是一个脉冲信号,一个脉冲信号有可能携带1bit数据,也有可能携带2bit数据、4bit数据!你发送一个脉冲信号,如果就可以携带4bit数据,肯定发送速率更快啊!
398 0
|
Linux 芯片
stm32-HAL使用usart发送中断判断发送库的一个问题
stm32-HAL使用usart发送中断判断发送库的一个问题
198 0
stm32-HAL使用usart发送中断判断发送库的一个问题
|
移动开发 缓存 物联网
串口接收并处理数据流程|学习笔记
快速学习串口接收并处理数据流程
621 0
串口接收并处理数据流程|学习笔记
|
数据采集 异构计算
FPGA-串口通信的接收模块(发送接收模块)
FPGA-串口通信的接收模块(发送接收模块)
203 0
串口助手数据发送与接收(中断法)
串口助手数据发送与接收(中断法) 宏定义 初始化 数据发送 数据接收 主函数 中断
211 0