📄 sci.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 + -