⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sci.c

📁 freescale s12系列单片机驱动集。作者自己编写
💻 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 + -