?? 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個字節 *
//參 數:要發送的數據 *
//返 回:無 *
//-------------------------------------------------------------------------*
void SCISend1(INT8U o)
{
//判斷ReStatusR的第SendTestBit位是否為1,是1可以發送
while (1)
if ((ReSendStatusR & (1<<SendTestBit)) != 0)
{
ReSendDataR = o;
break;
}
}
//SCISendN:串行發送N個字節-------------------------------------------------*
//功 能:發送數組中的N個字節數據 *
//參 數:待發送的數據字節數及存放待發送數據的數組首地址 *
//返 回:無 *
//內部調用函數:SCISend1 *
//-------------------------------------------------------------------------*
void SCISendN(INT8U n,INT8U ch[])
{
INT8U i;
for (i=0; i<n; 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<0xfbbb; k++)
if ((ReSendStatusR & (1<<ReTestBit)) != 0)
{
i = ReSendDataR;
*p = 0x00;
break;
}
//接收失敗
if (k >= 0xfbbb)
{
i=0xff;
*p=0x01;
}
return i; //返回接收到的數據
}
//SCIReN:串行接收N個字節---------------------------------------------------*
//功 能:接收N個字節數據,并存放在ch數組中 *
//參 數:待接收的數據字節數及其存放的數組首地址 *
//返 回:接收標志=0收到數據,=1未收到數據 *
//內部調用函數:SCIRe1 *
//-------------------------------------------------------------------------*
INT8U SCIReN(INT8U n,INT8U ch[])
{
INT8U m;
INT8U fp;
m = 0;
//接收n個數據
while (m<n)
{
ch[m] = SCIRe1(&fp);
if (fp == 1) return 1; //只要有1個字節數據沒接收到就返回報錯
m++;
}
return 0;
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -