📄 sci.c
字号:
#include "SCI.h"
#include "MC9S12.h"
#include <mc9s12dt256.h> /* derivative information */
#include <hidef.h> /* common defines and macros */
#include "Buzzer.h"
#if SCI_EN
//---------------------------------------------------
#if SCI_RECIEVE_INT_EN
unsigned char SCI_Recieve_Data[SCI_RECIEVE_BUFFER_NUM];
unsigned char SCI_Recieve_Num = 0;
unsigned char SCI_Rec_Int_Flg = 0;
#endif//SCI_RECIEVE_INT_EN
void SCI_Init(void){
unsigned int BR;//波特率常数
BR = (unsigned int)(BUS_CLOCK / (16 * (unsigned long)SCI_BAUD));
SCI0BDL = (unsigned char)BR & 0xff;//取低8位放入SCIBDL
SCI0BDH = (unsigned char)(BR >> 8) & 0xff;
SCI0CR1 = 0x00;//
SCI0CR2 = 0x2c;//一般的不用接受中断,若需要在下面设定
#if SCI_RECIEVE_INT_EN
// SCI0CR2 |= 0x20;
#endif// SCI_RECIEVE_INT_EN
}
unsigned int SCI_Transmit(char * Trans_Data){
unsigned int i, j = 0;//
char * SCI_Data = Trans_Data;
while(*SCI_Data){
for(i = 0; i < SCI_TimeOut; i ++){
if(SCI0SR1 & 0x80) break; //发送器空
}
if(!(SCI0SR1 & 0x80)) return 0;
PORTB_BIT4 = ~PORTB_BIT4;
SCI0DRL = *SCI_Data;
j ++;
SCI_Data = Trans_Data + j;
}
return j;
}
void SCI_Tran(unsigned char Data){
unsigned int i;
for(i = 0; i < SCI_TimeOut; i ++){
if(SCI0SR1 & 0x80) break; //发送器空
}
if(!(SCI0SR1 & 0x80)) return ;
// PORTB_BIT4 = ~PORTB_BIT4;
SCI0DRL = Data;
}
#if SCI_RECIEVE_INT_EN
interrupt 20 void SCI_Recieve(void){
unsigned int i;
unsigned char Tmp_uChar;
DisableInterrupts;
for(i = 0; i < SCI_TimeOut; i ++){
if(SCI0SR1 & 0x20) break;//接收完成
}
if(!(SCI0SR1 & 0x20)){
PORTB = 0xff;
// SCI_Transmit("SCI Wrong!");
return;
}
//SCI_Transmit("SCI ok!");
// Tmp_uChar = SCI0SR1;
Tmp_uChar = SCI0DRL;
// PORTB_BIT5 = 1;
// Buzzer(1, 300 ,200);
SCI_Recieve_Data[SCI_Recieve_Num ++] = Tmp_uChar;
if(SCI_Recieve_Num >= SCI_RECIEVE_BUFFER_NUM) SCI_Recieve_Num = 0x00;
SCI_Transmit((char *)SCI_Recieve_Data);
SCI_Rec_Int_Flg = 1;
EnableInterrupts;
}
#endif//SCI_RECIEVE_INT_EN
//---------------------------------------------------
#endif//SCI_EN
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -