📄 sci.c
字号:
/* Include Files */
#include <MC68HC908GZ16.h> /* include peripheral declarations */
#include "Sci.h"
#include "Type.h"
#include "MSCAN08.h"
#include "MCU.h"
#pragma MESSAGE DISABLE C2705 /*Disable warning C2705 "possible loss of data"*/
/* Global Variables */
UINT8 SciRxFlag;
UINT8 SciRxData[5];
/*****************************************************************************
* SCIInit:SCI模块初始化
* Input: None
* Output: None
* Parameters: None
*
****************************************************************************/
void SCIInit(void){
SCC1=0X40;//允许sci模块
SCC2=0X2C;//使能发送和接收,使能接收中断
SCC3=0x00;
//SCBR=0X30;//BPD=13,BD=1,BAUD=8000000/64/13/1=9615
SCBR=0X01;//BPD=1,BD=1,BAUD=8000000/64/1/2/(3+0.25)=19230
SCPSC=0X48;//PD=3,PDFA=0.25
}
/*****************************************************************************
* PutChar_SCI:使用SCI发送一个字节
* Input: None
* Output: None
* Parameters: None
*
****************************************************************************/
void PutChar_SCI(UINT8 ch){
while(SCS1_SCTE==0);
SCDR=ch;
}
/*****************************************************************************
* SciTx_ISR:中断服务程序,串口发送缓冲空中断
* Input: None
* Output: None
* Parameters: None
*
****************************************************************************/
interrupt 14 void SciTx_ISR(void){
static UINT8 TxDataNum=0;
asm SEI;
switch (++TxDataNum){
case 1:PutChar_SCI(SCITxData[0]); break;
case 2:PutChar_SCI(SCITxData[1]); break;
case 3:PutChar_SCI(SCITxData[2]); break;
case 4:PutChar_SCI(SCITxData[3]); break;
case 5:PutChar_SCI(SCITxData[4]); break;
case 6:PutChar_SCI(SCITxData[5]); break;
case 7:PutChar_SCI(SCITxData[6]); break;
case 8:PutChar_SCI(SCITxData[7]); break;
case 9:PutChar_SCI(SCITxData[8]); break;
default:SciTxDisable;break;// SCC2_SCTIE=0;
}
asm CLI;
}
/*****************************************************************************
* SciRx_ISR:中断服务程序,串口接收缓冲满中断
* Input: None
* Output: None
* Parameters: None
*
****************************************************************************/
interrupt 13 void SciRx_ISR(void){
static UINT8 counter;
UINT8 i=0,Ch;
asm SEI;
while(!SCS1_SCRF);
Ch=SCDR;
if(Ch>127){
counter=0;
SciRxData[counter]=Ch;
}
else{
counter++;
SciRxData[counter]=Ch;
if (counter==4) SciRxFlag=1;
}
asm CLI;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -