⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 c51uart_test.txt

📁 单片机C51串口中断接收和发送测试例程(含通信协议的实现)
💻 TXT
字号:
单片机C51串口中断接收和发送测试例程(含通信协议的实现) 

通信协议:第1字节,MSB为1,为第1字节标志,第2字节,MSB为0,为非第一字节标志,其余类推……,最后一个字节为前几个字节后7位的异或校验和。
测试方法:可以将串口调试助手的发送框写上 95 10 20 25,并选上16进制发送,接收框选上16进制显示,如果每发送一次就接收到95 10 20 25,说明测试成功。
//这是一个单片机C51串口接收(中断)和发送例程,可以用来测试51单片机的中断接收 
//和查询发送,另外我觉得发送没有必要用中断,因为程序的开销是一样的 


#i nclude <reg51.h>
#i nclude <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);
           }
     }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -