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

📄 sci.c

📁 为苏州一家公司所做的的恒温恒湿车间控制 系统
💻 C
字号:
/*-----------------------------------------------------*
*文件描述:本文件包含了串行通信的4子程序,分别为:        * 
*(1)SCIInit:SCI初始化
*(2)SCISend1:串行发送1字节                             *
*(3)SCISendN:串行发送n字节                             *
*(4)SCIRe1:串行接收1字节                               *
*(5)SCIReN:串行接收n字节                               *
*-------------《嵌入式应用技术基础教程》--------------*/
//[以下为子程序源代码]
//[包含头文件]
#include "Includes.h"
/*SCIInit:串行口初始化子程序---------------------------*
*功 能:对串行口进行初始化,默认为允许SCI,正常码输出,8位 *
*      数据,无校验等,允许发送器允许接收器.查询方式收发,*
*      波特率为9600(设fBUS=2.4576MHz)                 *
*参 数:无                                              *
*返 回:无                                              *
*-----------------------------------------------------*/
void SCIInit(void)
 { 
 	//总线频率fBUS=2.4576MHz,定义波特率Bt=9600
    SCBR=0b00000010;
    //设置允许SCI,正常码输出、8位数据、无校验
    SCC1=0b01000000; 
    //设置允许发送、允许接收,查询方式收发     
    SCC2=0b00001100; 
 }
/*SCISend1:串行发送1个字节-----------------------------*
*功  能:串行发送1个字节                                *
*参  数:要发送的数据                                   *
*返  回:无                                             *
*-----------------------------------------------------*/
void SCISend1(INT8U o)
 {//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
   INT8U i,j;
   while(1)	
      if ((ReSendStatusR & (1<<SendTestBit)) != 0)
         { ReSendDataR=o;
           for(i=0;i<100;i++)
             for(j=0;j<50;j++);
           break;}
 }
/*SCISendN:串行发送N个字节-----------------------------*
*功  能:发送数组中的N个字节数据                        *
*参  数:待发送的数据字节数及其要存放的数组首地址       *          
*返  回:无                                             *
*-----------------------------------------------------*/
void SCISendN(INT8U n,INT8U ch[])
  {INT16U i;
   for(i=0;i<n;i++)          
	SCISend1(ch[i]);
  }
/*SCIRe1:串行收一个字节数据----------------------------*
*功  能:从串行口接收1个字节的数据                      *         
*参  数:标志指针p                                      *
*返  回:接收到的数据(若接收失败,返回0xff)           * 
*说  明:参数*p带回接收标志=0收到数据,=1未收到数据      *  
*-----------------------------------------------------*/
INT8U SCIRe1(INT8U *p)
 { INT16U k;
   INT8U i;
   //ReStatusR第ReTestBit位为1表示可接收数据
	for(k=0;k<0xfbbb;k++)
	  if ((ReSendStatusR & (1<<ReTestBit)) != 0)
	     {i=ReSendDataR;
	      *p=0x00; 
	      break;} 
	if(k>=0xfbbb) 
	  {i=0xff;
	   *p=0x01;}  	
    return i;             //返回接收到的数据
 }
/*SCIReN:HC08串行接收N个字节---------------------------*
*功  能:接收N个字节数据,并存放在ch数组中               *       
*参  数:待接收的数据字节数及其存放的数组首地址         *       
*返  回:接收标志=0收到数据,=1未收到数据                * 
*-----------------------------------------------------*/
INT8U SCIReN(INT8U n,INT8U ch[])
 { INT16U m;                  
   INT8U fp;
   m=0;
   while (m<n)
	{ 	          
	  ch[m]=SCIRe1(&fp); 
	  if (fp==1) return 1;
	  m++;
	 } 
   return 0;	 
 }
/*RS485Init:RS485初始化子程序--------------------------*
*功 能:对RS485进行初始化,默认为允许SCI,正常码输出,8位  *
*      数据,无校验等,允许发送器允许接收器.查询方式收发,*
*      波特率为2400(设fBUS=2.4576MHz)                 *
*参 数:无                                              *
*返 回:无                                              *
*-----------------------------------------------------*/
void RS485Init(void)
 { 
 	//总线频率fBUS=2.4576MHz,定义波特率Bt=2400
    SCBR=0b00100010;
    //设置允许SCI,正常码输出、8位数据、无校验
    SCC1=0b01000000; 
    //设置允许发送、允许接收,查询方式收发     
    SCC2=0b00001100; 
 }

⌨️ 快捷键说明

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