mc9sdg128b 键盘实例程序 实现键盘输入的功能

源代码在线查看: sci.c

软件大小: 225 K
上传用户: qq448792326
关键词: 9sdg 128b 128 mc9
下载地址: 免注册下载 普通下载 VIP

相关代码

				//[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;
				}
							

相关资源