mc9sdg128b 键盘实例程序 实现键盘输入的功能
源代码在线查看: sci.c
//[SCI.c]串行通信----------------------------------------------------------*
//本文件包含: *
// (1)SCIInit:串行口初始化 *
// (2)SCISend1:串行发送1个字节 *
// (3)SCISendN:串行发送n字节 *
// (4)SCIRe1:串行接收1字节 *
// (5)SCIReN:串行接收n字节 *
//硬件连接: *
// MCU的SCI0模块接口与PC方的串行口相连 *
//-------------------------------------------------------------------------*
//头文件
#include "SCI.h" //串行通信头文件
//SCIInit:DG128串行口0初始化函数-------------------------------------------*
//功 能: *
// 开SCI0关SCI1,关串口中断,对串行口进行初始化,默认为允许SCI,正常码输出 *
// ,8位数据,无校验等,允许发送器允许接收器.查询方式收发,波特率为9600 *
// (设fBUS=19.6608Mhz) *
//参 数:无 *
//返 回:无 *
//说 明: *
// (1)若初始化SCI1,只需SCI0->SCI1 *
// (2)该初始化函数与芯片有关 *
//-------------------------------------------------------------------------*
void SCIInit(void)
{
INT8U t;
//定义波特率Bt=9600,SCI0BD=fBUS/(16*Bt)
SCI0BDL = 0x80; //须先给低8位赋值
SCI0BDH = 0x00; //再给高8位赋值
SCI0CR1 = 0x00; //设置允许SCI,正常码输出,8位数据,无校验
t = SCI0DRL; //读数据寄存器(清0)
t = SCI0SR1; //读状态寄存器(清0)
SCI0CR2 = 0x0C; //允许SCI0接收和发送 查询方式
}
//SCISend1:串行发送1个字节-------------------------------------------------*
//功 能:串行发送1个字节 *
//参 数:o=要发送的数据 *
//返 回:无 *
//-------------------------------------------------------------------------*
void SCISend1(INT8U o)
{
//判断ReStatusR的第SendTestBit位是否为1,是1可以发送
while (1)
if ((ReSendStatusR & (1 {
ReSendDataR = o;
break;
}
}
//SCISendN:串行发送N个字节-------------------------------------------------*
//功 能:发送数组中的N个字节数据 *
//参 数:n=待发送的数据字节数,ch=存放待发送数据的数组首地址 *
//返 回:无 *
//内部调用函数:SCISend1 *
//-------------------------------------------------------------------------*
void SCISendN(INT8U n,INT8U ch[])
{
INT8U i;
for (i=0; 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 if ((ReSendStatusR & (1 {
i = ReSendDataR;
*p = 0x00;
break;
}
//接收失败
if (k >= 0xfbbb)
{
i=0xff;
*p=0x01;
}
return i; //返回接收到的数据
}
//SCIReN:HC08串行接收N个字节-----------------------------------------------*
//功 能:接收N个字节数据,并存放在ch数组中 *
//参 数:n=待接收的数据字节数,ch=存放待接收数据的数组首地址 *
//返 回:接收标志=0收到数据,=1未收到数据 *
//内部调用函数:SCIRe1 *
//-------------------------------------------------------------------------*
INT8U SCIReN(INT8U n,INT8U ch[])
{
INT8U m;
INT8U fp;
m = 0;
//接收n个数据
while (m {
ch[m] = SCIRe1(&fp);
if (fp == 1) return 1; //只要有1个字节数据没接收到就返回报错
m++;
}
return 0;
}