📄 sci.c
字号:
//[SCI.c]串行通信----------------------------------------------------------*
//本文件包含: *
// (1)SCIInit:串行口初始化 *
// (2)SCISendOneByte:串行发送1个字节 *
// (3)SCISendString:串行发送字符串 *
// (4)SCIRevOneByte:串行接收1字节 *
// (5)SCIRevNByte:串行接收n字节 *
//硬件连接: *
// MCU的SCI0模块接口与PC方的串行口相连 *
//-------------------------------------------------------------------------*
#include "SCI.h"
#include <MC9S12UF32.h>
/*因为选择了USB所以总线频率为30Mhz*/
#define BUS_FRE 30000000L
//SCIInit:DG128串行口0初始化函数-------------------------------------------*
//功 能: *
// 开SCI0关SCI1,关串口中断,对串行口进行初始化,默认为允许SCI,正常码输出 *
// ,8位数据,无校验等,允许发送器允许接收器.查询方式收发,波特率为9600 *
//参 数:无 *
//返 回:无 *
//-------------------------------------------------------------------------*
void SCIInit(void)
{
UINT8 utemp;
/*设置波特率为9600 t = fbus/(16*bt)*/
SCIBD = BUS_FRE / 16 / 9600;
/*允许,正常码,8位,无校验*/
SCICR1 = 0x00;
/*读一下清空*/
utemp = SCIDRL;
utemp = SCISR1;
/*允许接受发送*/
SCICR2 = 0x0c;
}
//SCISendOneByte:串行发送1个字节-------------------------------------------*
//功 能:串行发送1个字节 *
//参 数:uSend=要发送的数据 *
//返 回:无 *
//-------------------------------------------------------------------------*
void SCISendOneByte(UINT8 uSend)
{
/*等待发送缓冲区为空*/
while(! (SCISR1 & SCISR1_TDRE_MASK));
/*发送*/
SCIDRL = uSend;
}
//SCISendString:串行发送字符串---------------------------------------------*
//功 能:发送字符串数据数据 *
//参 数:无 *
//返 回:无 *
//内部调用函数:SCISendNByte *
//-------------------------------------------------------------------------*
void SCISendString(char *str)
{
SCISendNByte(str,strlen(str));
}
void SCISendNByte(UINT8 *uSend, UINT16 uNum)
{
UINT16 i = 0;
for(i = 0; i < uNum; ++i)
{
SCISendOneByte(uSend[i]);
}
}
//SCIRevOneByte:串行接收字符串---------------------------------------------*
//功 能:串行接收字符串数据 *
//参 数:uRev *
//返 回:无 *
//内部调用函数:SCIRevOneByte *
//-------------------------------------------------------------------------*
BOOL SCIRevOneByte(UINT8 *uRev)
{
UINT16 i = 0;
for(i = 0; i < 0xfffe; ++i)
{
/*如果接受缓冲区不为空,则保存数据*/
if(SCISR1 & SCISR1_RDRF_MASK)
{
*uRev = SCIDRL;
return TRUE;
}
}
return FALSE;
}
//SCIRevNByte:串行接收N个字符串--------------------------------------------*
//功 能:串行接收字符串数据 *
//参 数:uRev接收缓冲区 *
// uNum接收的字节 *
//返 回:无 *
//内部调用函数:SCIRevOneByte *
//-------------------------------------------------------------------------*
UINT8 SCIRevNByte(UINT8 *uRev, UINT16 uNum)
{
UINT16 i;
for(i = 0; i < uNum; ++i)
{
if(SCIRevOneByte(uRev + i) == FALSE)
{
break;
}
}
return i;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -