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

📄 sci.c

📁 《嵌入式系统-使用HCS12微控制器的设计与应用》在CodeWarrior开发环境下的源程序。
💻 C
字号:
//-------------------------------------------------------------------------*
//文件描述:本文件包含了串行通信的5子程序,分别为:                           *
//(1)SCIInit:串行口初始化子程序                                            *
//(2)SCISend1:串行发送1字节                                                *
//(3)SCISendN:串行发送n字节                                                *
//(4)SCIRe1:串行接收1字节                                                  *
//(5)SCIReN:串行接收n字节                                                  *
//-------------------------------------------------------------------------*

//包含头文件   
#include "SCI.h"  //SCI头文件

//SCIInit:串行口初始化子程序-----------------------------------------------*
//功 能:对串行口进行初始化,默认为允许SCI0,正常码输出,8位数据,无校验等,允许 *
//      发送器允许接收器.中断方式接收,波特率为9600(fBUS=4.9152MHz)        *
//参 数:无                                                                 *
//返 回:无                                                                 *
//-------------------------------------------------------------------------*
void SCIInit(void)
{ 
    unsigned char Tmp; 
    //定义波特率Bt=9600,SCI0BD=fBUS/(16*Bt)
    //SCI0BDL=0x34;   //须先给低8位赋值,默认的总线频率为晶振的一半
    SCI0BDL=0x20;
    SCI0BDH=0x00;   //再给高8位赋值
    //设置允许SCI,正常码输出、8位数据、无校验   
    SCI0CR1=0x00;
    //读数据寄存器(清0)
    Tmp=SCI0DRL;
    //读状态寄存器(清0) 
    Tmp=SCI0SR1; 
    //允许SCI0接收和发送 关接收中断 允许唤醒
    SCI0CR2=0x0C;
}

//SCISend1:串行发送1个字节-------------------------------------------------*
//功  能:串行发送1个字节                                                   *
//参  数:要发送的数据                                                      *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void SCISend1(unsigned char o)
{   //判断ReStatusR的第SendTestBit位是否为1,是1可以发送
    while(1)	
        if ((ReSendStatusR & (1<<SendTestBit)) != 0)
            { 
                ReSendDataR=o;
                break;
            }
}
 
//SCISendN:串行发送N个字节-------------------------------------------------*
//功  能:发送数组中的N个字节数据                                           *
//参  数:待发送的数据字节数及其要存放的数组首地址                          *          
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void SCISendN(unsigned char n,unsigned char ch[])
{
    unsigned int i;
    for(i=0;i<n;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<<ReTestBit)) != 0)
	        {
	            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[])
{
    unsigned int m;                  
    unsigned char fp;
    m=0;
    while (m<n)
	{ 	          
	    ch[m]=SCIRe1(&fp); 
	    if (fp==1) return 1;
	    m++;
	} 
    return 0;	 
}

⌨️ 快捷键说明

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