?? sci.c
字號(hào):
//[SCI.c]串行通信----------------------------------------------------------*
//本文件包含: *
// (1)SCIInit:串行口初始化 *
// (2)SCISend1:串行發(fā)送1個(gè)字節(jié) *
// (3)SCISendN:串行發(fā)送n字節(jié) *
// (4)SCIRe1:串行接收1字節(jié) *
// (5)SCIReN:串行接收n字節(jié) *
//硬件連接: *
// MCU的SCI0模塊接口與PC方的串行口相連 *
//-------------------------------------------------------------------------*
//頭文件
#include "SCI.h" //串行通信頭文件
//SCIInit:DG128串行口0初始化函數(shù)-------------------------------------------*
//功 能: *
// 開(kāi)SCI0關(guān)SCI1,關(guān)串口中斷,對(duì)串行口進(jìn)行初始化,默認(rèn)為允許SCI,正常碼輸出 *
// ,8位數(shù)據(jù),無(wú)校驗(yàn)等,允許發(fā)送器允許接收器.查詢方式收發(fā),波特率為9600 *
// (設(shè)fBUS=19.6608Mhz) *
//參 數(shù):無(wú) *
//返 回:無(wú) *
//說(shuō) 明: *
// (1)若初始化SCI1,只需SCI0->SCI1 *
// (2)該初始化函數(shù)與芯片有關(guān) *
//-------------------------------------------------------------------------*
void SCIInit(void)
{
INT8U t;
//定義波特率Bt=9600,SCI0BD=fBUS/(16*Bt)
SCI0BDL = 0x80; //須先給低8位賦值
SCI0BDH = 0x00; //再給高8位賦值
SCI0CR1 = 0x00; //設(shè)置允許SCI,正常碼輸出,8位數(shù)據(jù),無(wú)校驗(yàn)
t = SCI0DRL; //讀數(shù)據(jù)寄存器(清0)
t = SCI0SR1; //讀狀態(tài)寄存器(清0)
SCI0CR2 = 0x0C; //允許SCI0接收和發(fā)送 查詢方式
}
//SCISend1:串行發(fā)送1個(gè)字節(jié)-------------------------------------------------*
//功 能:串行發(fā)送1個(gè)字節(jié) *
//參 數(shù):o=要發(fā)送的數(shù)據(jù) *
//返 回:無(wú) *
//-------------------------------------------------------------------------*
void SCISend1(INT8U o)
{
//判斷ReStatusR的第SendTestBit位是否為1,是1可以發(fā)送
while (1)
if ((ReSendStatusR & (1<<SendTestBit)) != 0)
{
ReSendDataR = o;
break;
}
}
//SCISendN:串行發(fā)送N個(gè)字節(jié)-------------------------------------------------*
//功 能:發(fā)送數(shù)組中的N個(gè)字節(jié)數(shù)據(jù) *
//參 數(shù):n=待發(fā)送的數(shù)據(jù)字節(jié)數(shù),ch=存放待發(fā)送數(shù)據(jù)的數(shù)組首地址 *
//返 回:無(wú) *
//內(nèi)部調(diào)用函數(shù):SCISend1 *
//-------------------------------------------------------------------------*
void SCISendN(INT8U n,INT8U ch[])
{
INT8U i;
for (i=0; i<n; i++)
SCISend1(ch[i]);
}
//SCIRe1:串行收一個(gè)字節(jié)數(shù)據(jù)------------------------------------------------*
//功 能:從串行口接收1個(gè)字節(jié)的數(shù)據(jù) *
//參 數(shù):p=標(biāo)志指針 *
//返 回:接收到的數(shù)據(jù)(若接收失敗,返回0xff) *
//說(shuō) 明:參數(shù)*p帶回接收標(biāo)志=0收到數(shù)據(jù),=1未收到數(shù)據(jù) *
//-------------------------------------------------------------------------*
INT8U SCIRe1(INT8U *p)
{
INT16U k;
INT8U i;
//ReStatusR第ReTestBit位為1表示可接收數(shù)據(jù)
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; //返回接收到的數(shù)據(jù)
}
//SCIReN:HC08串行接收N個(gè)字節(jié)-----------------------------------------------*
//功 能:接收N個(gè)字節(jié)數(shù)據(jù),并存放在ch數(shù)組中 *
//參 數(shù):n=待接收的數(shù)據(jù)字節(jié)數(shù),ch=存放待接收數(shù)據(jù)的數(shù)組首地址 *
//返 回:接收標(biāo)志=0收到數(shù)據(jù),=1未收到數(shù)據(jù) *
//內(nèi)部調(diào)用函數(shù):SCIRe1 *
//-------------------------------------------------------------------------*
INT8U SCIReN(INT8U n,INT8U ch[])
{
INT8U m;
INT8U fp;
m = 0;
//接收n個(gè)數(shù)據(jù)
while (m<n)
{
ch[m] = SCIRe1(&fp);
if (fp == 1) return 1; //只要有1個(gè)字節(jié)數(shù)據(jù)沒(méi)接收到就返回報(bào)錯(cuò)
m++;
}
return 0;
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -