/**************************************************************************************
龙丘MC9S12XS128 多功能开发板
Designed by Chiu Sir
E-mail:chiusir@163.com
软件版本:V1.1
最后更新:2009年2月28日
相关信息参考下列地址:
博客: http://longqiu.21ic.org
淘宝店:http://shop36265907.taobao.com
------------------------------------
Code Warrior 4.7
Target : MC9S12XS128
Crystal: 16.000Mhz
busclock:16.000MHz
pllclock:32.000MHz
演示程序使用说明: volatile dword u32_time_cnt=0; //====================中断函数================================== #pragma CODE_SEG __NEAR_SEG NON_BANKED void putstr(char ch[]) //====================main()==================================
1.实时时钟的演示:
2.毫秒级计时输出;
3.串口输出速率:9600bps.
4.中断的使用。
*****************************************************************************************/
#i nclude
#i nclude
#i nclude
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
void interrupt 7 RTI_ISR(void) { // 32.75ms timer overflow
++u32_time_cnt;
PORTB_PB2=~PORTB_PB2;
CRGFLG|=0X80;//Write 1 to clear RTIF bit
}
// 函 数 名: void DLY_ms(word x)
// 功能描述: 毫秒级延时
void DLY_ms(int ms) //x取值1~255;
{
int ii,jj;
if (ms<1) ms=1;
for(ii=0;ii
}
//-----------------------------------------------------
static void Port_Init(void)
{
DDRA = 0xff;
PORTA= 0x00;
DDRB = 0xff; //LED PTB0--7,
PORTB= 0xff; //LEDs off
}
//-----------------------------------------------------
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;
}
{
unsigned char ptr=0;
while(ch[ptr]){
uart_putchar((unsigned char)ch[ptr++]);
}
}
// setup of the RTI interrupt frequency
static void RTI_Init(void)
{
RTICTL=0x77; //8x2^16 =>32,75ms,30.5175Hz
//CRGINT=0X80; //enable RTI Interrupt
CRGINT=0X80; //enable RTI Interrupt
}
// PLL初始化子程序 BUS Clock=16M
void setbusclock(void)
{
CLKSEL=0X00; // disengage PLL to system
PLLCTL_PLLON=1; // turn on PLL
SYNR=0x00 | 0x01; // VCOFRQ[7:6];SYNDIV[5:0]
// fVCO= 2*fOSC*(SYNDIV + 1)/(REFDIV + 1)
// fPLL= fVCO/(2 × POSTDIV)
// fBUS= fPLL/2
// VCOCLK Frequency Ranges VCOFRQ[7:6]
// 32MHz <= fVCO <= 48MHz 00
// 48MHz < fVCO <= 80MHz 01
// Reserved 10
// 80MHz < fVCO <= 120MHz 11
REFDV=0x80 | 0x01; // REFFRQ[7:6];REFDIV[5:0]
// fREF=fOSC/(REFDIV + 1)
// REFCLK Frequency Ranges REFFRQ[7:6]
// 1MHz <= fREF <= 2MHz 00
// 2MHz < fREF <= 6MHz 01
// 6MHz < fREF <= 12MHz 10
// fREF > 12MHz 11
// pllclock=2*osc*(1+SYNR)/(1+REFDV)=32MHz;
POSTDIV=0x00; // 4:0, fPLL= fVCO/(2xPOSTDIV)
// If POSTDIV = $00 then fPLL is identical to fVCO (divide by one).
_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; }
//-----------------------------------------------------
#pragma CODE_SEG DEFAULT
void Init_Dev(void)
{
setbusclock();
Port_Init();
SCI_Init();
RTI_Init();
}
#pragma CODE_SEG DEFAULT
void main(void)
{
char txtbuf[66]="";
byte u8_mintes=0;
word u16_sec=0,u16_ms=0;
Init_Dev();
PORTB=0x00;
putstr("/nLongQiu s.&t. Co. Ltd.");
putstr("/nhttp://shop36265907.taobao.com");
DLY_ms(1000);
PORTB=0xFF;
EnableInterrupts;
for(;;)
{
//----------时钟计时器---------------------------------
u16_sec=u32_time_cnt*131/4;//理论值为32.75ms,时间计算部分
u16_ms=u16_sec%1000;
u16_sec=u16_sec/1000;
sprintf(txtbuf,"/n%d:%02ds-%03dms ",u8_mintes,u16_sec,u16_ms);
putstr(txtbuf);
if(u16_sec>58)
{
u8_mintes++;
u32_time_cnt=0;
}
//--------------------------------------------------------
PORTB_PB0=~PORTB_PB0;
DLY_ms(50);
}//for(;;)
} //main
上一篇:mc9s12dg128使用定时器的输出比较产生定时中断代码亮1S灭1S
下一篇:freescale codewarrior编译器的使用
推荐阅读最新更新时间:2024-11-22 10:17
设计资源 培训 开发板 精华推荐
- 24VDC 输入(双汽车电池)汽车类多相同步降压参考设计
- DC2014A,具有 LT8302ES8E 隔离 10V = VIN = 30V,VOUT = 5V @ 2.2A、微功率无光隔离反激转换器的演示板
- LT1376CS8 1.5A、500kHz 降压型开关稳压器的典型应用电路
- 【浙江理工电赛】LED闪光灯电源(H题)
- 使用 Analog Devices 的 LTC1406CGN 的参考设计
- 适用于STM32F746ZG MCU的STM32 Nucleo-144开发板,支持Arduino,ST Zio和morpho连接
- LTM8052IV 具有 4.75A 准确电流限制的 36Vin、3.3Vout 降压转换器的典型应用
- LTC2946IMS-1 用于主电源的功率、电荷和能量监视器以及用于具有单个 LTC2946 的辅助电源的功率监视器的典型应用
- 【ART-Pi】AWTRIX复刻版
- LTC3130IUDC 5V 转换器的典型应用在收集能量的打嗝式模式下运行