飞思卡尔烟雾传感器main.c

转载 2012年03月30日 16:20:28
#include <hidef.h>      /* common defines and macros */
#include <MC9S12XS128.h>     /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
#include "stdio.h" 
#include "math.h"
#include "LQ12864.h"

#define uchar unsigned char
#define uint  unsigned int

float  data;
uchar Number[140]='0';


void SCIInit(void)
{
      byte tmp;       //定义一个临时变量,用来读寄存器
      SCI0BD =   40000000/16/9600;  //波特率
      SCI0CR1 = 0x00;   //8位数据位,无校验
      SCI0CR2_RE = 1;   
      SCI0CR2_TE = 1;   //允许发送+接收
      SCI0CR2_RIE = 1;  //接收中断
      SCI0CR2_TCIE = 0; //禁止发送完毕中断
      tmp=SCI0SR1;
      SCI0DRH=0x00;
}
unsigned char SciRead()
{
      char ch;
      while (!(SCI0SR1 & 0x20));       //等待接收数据完毕
      SCI0SR1_RDRF = 1;
      ch = SCI0DRL;
      return ch;
 }

 

//SCISend1:串行发送1个字节
void SCiSend(unsigned char o)   
{
      while (!(SCI0SR1&0x80));
      SCI0DRH=0;
      SCI0DRL=o;
}

 

//串口发送N个字节
void SCISend_N(char *a)   
{
    int i=0;
    while(a[i])
    {SCiSend(a[i]);
     i++;
    }
}


//总线时钟初始化
void SetBusCLK_40M(void)
{   
  CLKSEL=0X00;    //disengage PLL to system
  PLLCTL_PLLON=1;   //turn on PLL
  REFDV=1;   
  SYNR=4;  //  总线周期=16Mhz*(SYNR+1)/(REFDV+1)=40MHz 
  while(0==CRGFLG_LOCK);        //  等待  VCO 稳定 
  CLKSEL=0x80;            //  锁相环打开 
  _asm(nop);
  while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
  CLKSEL_PLLSEL =1;          //engage PLL to system; 
}
  
  
//AD初始化
void AD_N_Init(void)
{

      
      ATD0CTL1=0X00;     //8位精度,转换前不放电
      ATD0CTL2=0x40;     // 快速清零, 无等待模式, 禁止外部触发, 中断禁止
      ATD0CTL3=0x88;     // 右对齐无符号,转换序列长度为1, No FIFO, Freeze模式下继续转换
      ATD0CTL4=0x01;     // 为确定值 转换4个时钟, ATDClock=[BusClock*0.5]/[PRS+1]=8MHz; PRS=0,
                         /* 转换时间 = Initial Sample Time + Programmed Sample Time + Resolution Period
                           =2+4+10=16ATDclock=16*1/8=2us */
                          // 要求每隔约2us采集一点 (或更小) 一行采26点
      ATD0CTL5=0x20;     //单通道采样,持续采样,选择通道0   
      ATD0DIEN=0x00;   // 禁止数字输入

     
}


//获取AD值
int AD_N(int i){
 int IOCcnt; 
  char myst[20]=""; 
  
  ATD0CTL2=0x40;
  switch(i){
    case 0:   ATD0CTL5=0x20;break;  
    case 1:   ATD0CTL5=0x21;break; 
    case 2:   ATD0CTL5=0x22;break; 
    case 3:   ATD0CTL5=0x23;break; 
    case 4:   ATD0CTL5=0x24;break; 
    case 5:   ATD0CTL5=0x25;break; 
    case 6:   ATD0CTL5=0x26;break; 
    case 7:   ATD0CTL5=0x27;break; 

    
  }
  
   while(!ATD0STAT0_SCF);
  
  IOCcnt=ATD0DR0L; 
  return   IOCcnt;
}

//液晶显示
void Display() 
{    
    
    
    sprintf(Number,"%.2f",data);
    LCD_P6x8Str(1,1,Number);
}

void delay_1us(void)            //1ms延时函数
{
uint i;
for (i=0;i<3;i++);
}

void delay_nus(uint n)  //N us延时函数
{
 uint j=0;
 for (j=0;j<n;j++)
 delay_1us();
}

 


//IO口初始化
void IOkouInit() 
{SetBusCLK_40M();  
 LCD_Init();
 LCD_CLS();
 AD_N_Init();
 DDRB=0xff;
 PORTB=0xff;
 SCIInit();
}

 

 

void main(void) {
IOkouInit();
while(1) 
        
{       
        data=AD_N(0)/51.0;
        Display();    
        delay_nus(100);
        _FEED_COP(); /* feeds the dog */
 
}
}

 
 #pragma  CODE_SEG NON_BANKED
 void interrupt 20 SCI0_re(void) 
 {
     char ch;
     DisableInterrupts;
    
     ch=SciRead();
     SCISend(ch); 
     
     if(ch=='k') {
  
     
     }  else if(ch=='c') {
       
       }
        
      EnableInterrupts;  
                        
 }  

飞思卡尔电磁双车----电磁传感器---Double LigHtning

在飞思卡尔智能车竞赛中,有光电组,电磁组,摄像头组之分。其中,它们的区别就是使用的传感器获取识别道路的方式不一样而区分。电磁组是在道路中心铺上导线,通上20KHZ交变的电流而产生交变磁场。电磁组车必须...
  • luodonghuan1
  • luodonghuan1
  • 2015年04月20日 14:14
  • 1535

第十一届飞思卡尔电磁组程序流程分析

今年大二了,打算参加一届飞思卡尔。一开始想选择信标组,但是由于我们学校是第二届参加,所以我选择了电磁组,用E车模。 我们团队从11月份开始做车,一直做到现在到3月初,寒假只过了2个星期。 现在电磁...
  • qq_24085431
  • qq_24085431
  • 2016年03月04日 17:16
  • 2988

飞思卡尔IIC总线

芯片之间通讯总线,双线:SCL,SDA   相关寄存器:   IICA(地址寄存器):作为从机时的地址,作为主机时不用。用高7位。   IICF(频率分配寄存器):包含IIC波特率乘数因子...
  • ziyoulangzi019
  • ziyoulangzi019
  • 2015年02月02日 12:20
  • 637

飞思卡尔单片机 时钟初始化及配置

系统时钟可选择内部或外部时钟,时钟频率可倍频,总线时钟为系统时钟的1/2,定时器时钟可选择时钟源,时钟源可选择总线时钟或者是外部时钟等(我程序里选择的为总线时钟),并可以进行分频。 如我选择的为外部时...
  • ziyoulangzi019
  • ziyoulangzi019
  • 2015年01月13日 22:44
  • 1428

飞思卡尔MCU自定义中断向量的相关问题 bootloader程序过程中的问题

自定义中断向量的情况说明 #pragma CODE_SEG NON_BANKED // 声明外部中断函数 extern void  Timer0_C0(void);    extern...
  • NO_007
  • NO_007
  • 2014年06月13日 13:12
  • 1752

飞思卡尔电磁双车----车跑了(狂喜!)---Double LigHtning

今天车子跑起来了,速度还蛮快的,虽然参数都还没调 用速度PID+舵机PD+三次方程曲线拟合算法...
  • luodonghuan1
  • luodonghuan1
  • 2015年04月21日 19:45
  • 1427

飞思卡尔单片机DZ60---EEPROM读写

//向EEPROM中写入数据,然后读出数据,赋值给PORTD,点亮相应的LED灯 #include /* for EnableInterrupts macro */ #include "de...
  • crazyvoice
  • crazyvoice
  • 2013年07月24日 16:40
  • 2968

freescale Project.map 详解

FILE SECTION :该段中列举了所有的.o文件,也就是是你的工程中所有相关的目标文件,即我们常说的模块。 STARTUP SECTION :该段故名思义,是程序开始的地方。 SECTI...
  • bodogbo11
  • bodogbo11
  • 2012年12月14日 15:16
  • 1410

第九届飞思卡尔,调到现在才想起来总结,确实有点不应该。

第九届飞思卡尔,调到现在才想起来总结,确实有点不应该。 之前和学长吃饭,飞哥和我说要把自己的成就(其实都微不足道啊)或者问题(关键是问题啊啊)与大家分享出来,自己也认真的记下了,于是乎从现在开始打算...
  • yifenghuang_dh
  • yifenghuang_dh
  • 2014年06月28日 01:07
  • 1488

飞思卡尔启动过程

  • dragon101788
  • dragon101788
  • 2012年04月24日 19:22
  • 1351
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:飞思卡尔烟雾传感器main.c
举报原因:
原因补充:

(最多只允许输入30个字)