博客首页 | 排行榜 |

北京工业大学IVTECH队

提供专业级的飞思卡尔开发板及芯片 热推飞思卡尔旗舰16位单片机9S12XE系列开发

个人档案
博文分类
MC9S12XS128系列例程--IOC  2009-02-28 17:28

/**************************************************************************************
龙丘MC9S12X多功能开发板V1.0 
Designed by 龙丘
E-mail:chiusir@163.com     
软件版本:V1.1
最后更新:2009年2月21日          
相关信息参考下列地址:
博客:  http://longqiu.21ic.org
淘宝店:http://shop36265907.taobao.com
------------------------------------
Code Warrior 4.7
Target : MC9S12XS128
Crystal: 16.000Mhz
busclock:16.000MHz
pllclock:32.000MHz 
============================================

本程序主要包括以下功能:
1.设置锁相环和总线频率;
2.IO口使用;
3.IOC7口16位计数器。
LED计数,根据灯亮可以读取系统循环了多少次
*****************************************************************************************/
#include <hidef.h>     
#include <MC9S12XS128.h>
#include <stdio.h>

#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

//-----------------------------------------------------
void setbusclock(void)
{  
    CLKSEL=0X00;    //disengage PLL to system
    PLLCTL_PLLON=1;   //turn on PLL
    SYNR=1;          
    REFDV=1;          //pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
    _asm(nop);          //BUS CLOCK=16M
    _asm(nop);
    while(!(CRGFLG_LOCK==1));   //when pll is steady ,then use it;
    CLKSEL_PLLSEL =1;          //engage PLL to system;
}
//-----------------------------------------------------
static void SCI_Init(void)
{
    SCI0CR2=0x2c; //enable Receive Full Interrupt,RX enable,Tx enable
    SCI0BDH=0x00; //busclk  8MHz,19200bps,SCI0BDL=0x1a
    SCI0BDL=0x68; //SCI0BDL=busclk/(16*SCI0BDL)                  
                  //busclk 16MHz, 9600bps,SCI0BDL=0x68                  
}                
void uart_putchar(unsigned char ch)
{
  if (ch == '\n') 
  {
      while(!(SCI0SR1&0x80)) ;    
      SCI0DRL= 0x0d;            //output'CR'
     return;
  }
  while(!(SCI0SR1&0x80)) ;       //keep waiting when not empty 
  SCI0DRL=ch;
}

void putstr(char ch[])
{
  unsigned char ptr=0;
  while(ch[ptr]){
      uart_putchar((unsigned char)ch[ptr++]);
  }
}
//----------------------------------------------------- 
static void IOC_Init(void)
{  
    PACTL=0X50;//PT7 PIN,PACN32 16BIT,FALLing edge,NOT INTERRUPT
    TCTL3=0xc0;//c-输入捕捉7任何沿有效,            
    TCTL4=0xc0;//40表示ICx禁止, 1表示上升沿, 2表示下降沿, 3表示任何沿     
    TIE  =0x00;//每一位对应相应通道中断允许,0表示禁止中断
    TIOS =0x00;//每一位对应通道的: 0输入捕捉,1输出比较
    TCTL3_EDG7x=1;//c-输入捕捉7任何沿有效,

//----------------------------------------------------- 
void Dly_ms(int ms)
{
   int ii,jj;
   if (ms<1) ms=1;
   for(ii=0;ii<ms;ii++)
     for(jj=0;jj<2670;jj++);    //busclk:16MHz--1ms
}
void main(void)
{
  char mystr[20]="";
  unsigned char LedCnt=0;
  unsigned int IOCcnt; 
 
  setbusclock(); 
  SCI_Init();
  IOC_Init();
  DDRB=0xFF;
  PUCR_PUPBE=1;
  putstr("\nLongQiu s.&t. Co. Ltd.");   
  putstr("\nhttp://shop36265907.taobao.com");
  EnableInterrupts;
  for(;;)
  {  
    LedCnt=(LedCnt>0XFE?0:++LedCnt);
    Dly_ms(1000);   //修改延时以修改数据发送频率
   
    //低电平灯亮用这句,注释掉下面那句
    PORTB=~LedCnt; 
       
    //高电平灯亮用这句,注释掉上面那句  
    //PORTB=LedCnt;
   

    IOCcnt=PACNT;    
    if(IOCcnt>999) PACNT=0;
    sprintf(mystr,"\nIOC pulses:%d",IOCcnt);
    putstr(mystr);
  }
}


//

类别:C语言编程 |
上一篇:MC9S12XS128系列例程--PWM | 下一篇:龙丘科技开发板相关使用说明及驱动下载
以下网友评论只代表其个人观点,不代表本网站的观点或立场