单片机
返回首页

串行通信中断方式子程序

2016-01-07 来源:eefocus

/*-----------------------------------------------------*

*文件描述:本文件包含了串行通信的4子程序,分别为:       
*(1)SCISend1:串行发送1字节                             *
*(2)SCISendN:串行发送n字节                             *
*(3)SCIRe1:串行接收1字节                               *
*(4)SCIReN:串行接收n字节                               *
//[以下为子程序源代码]
//[包含头文件]
#include 'SCI.h'
/*SCISend1:串行发送1个字节-----------------------------*
*功  能:串行发送1个字节                                *
*参  数:要发送的数据                                   *
*返  回:无                                             *
*-----------------------------------------------------*/
void SCISend1(unsigned char o)
 {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
   while(1) 
      if ((ReSendStatusR & (1<          { ReSendDataR=o;
           break;}
 }
/*SCISendN:串行发送N个字节-----------------------------*
*功  能:发送数组中的N个字节数据                        *
*参  数:待发送的数据字节数及其要存放的数组首地址              
*返  回:无                                             *
*-----------------------------------------------------*/
void SCISendN(unsigned char n,unsigned char ch[])
  {int i;
   for(i=0;i        
 SCISend1(ch[i]);
  }
/*SCIRe1:串行收一个字节数据----------------------------*
*功  能:从串行口接收1个字节的数据                            
*参  数:标志指针p                                      *
*返  回:接收到的数据(若接收失败,返回0xff)           *
*说  明:参数*p带回接收标志=0收到数据,=1未收到数据     
*-----------------------------------------------------*/
unsigned char SCIRe1(unsigned char *p)
 { unsigned int k;
   unsigned char i;
   //ReStatusR第ReTestBit位为1表示可接收数据
 for(k=0;k<0xfbbb;k++)
   if ((ReSendStatusR & (1<       {i=ReSendDataR;
       *p=0x00;
       break;}
 if(k>=0xfbbb)
   {i=0xff;
    *p=0x01;}   
    return i;             //返回接收到的数据
 }
/*SCIReN:HC08串行接收N个字节---------------------------*
*功  能:接收N个字节数据,并存放在ch数组中                   
*参  数:待接收的数据字节数及其存放的数组首地址             
*返  回:接收标志=0收到数据,=1未收到数据                *
*-----------------------------------------------------*/
unsigned char SCIReN(unsigned char n,unsigned char ch[])
 {int m;                 
   unsigned char fp;
   m=0;
   while (m  {           
   ch[m]=SCIRe1(&fp);
   if (fp==1) return 1;
   m++;
  }
   return 0; 
 }

进入单片机查看更多内容>>
相关视频
  • RISC-V嵌入式系统开发

  • SOC系统级芯片设计实验

  • 云龙51单片机实训视频教程(王云,字幕版)

  • 2022 Digi-Key KOL 系列: 你见过1GHz主频的单片机吗?Teensy 4.1开发板介绍

  • TI 新一代 C2000™ 微控制器:全方位助力伺服及马达驱动应用

  • MSP430电容触摸技术 - 防水Demo演示

精选电路图
  • 家用电源无载自动断电装置的设计与制作

  • 短波AM发射器电路设计图

  • 带有短路保护系统的5V直流稳压电源电路图

  • 如何调制IC555振荡器

  • 基于ICL296的大电流开关稳压器电源电路

  • 基于TDA2003的简单低功耗汽车立体声放大器电路

    相关电子头条文章