freescale 单片机MC9S12G128应用程序(PWM,Timer,ADC……)(3)

2020-03-26 19:58

SCI0_SendByte(0x01); SCI0_SendByte(0x02); SCI0_SendByte(0x03);

for(;;) {

_FEED_COP(); /* feeds the dog */

if(SCI_Flag==1) { SCI_Flag = 0;

SCI0_SendByte(SCI_Rev); }

} /* loop forever */

/* please make sure that you never leave main */ }

void Service_WD(void) {

CPMUARMCOP = 0x55; CPMUARMCOP = 0xAA; }

void SetBusClock_24MHz(void) {

CPMUOSC_OSCE = 1; /* enable ext osc */

/*

Initialise the system clock from a 16 MHz Crystal, 24 MHz Bus CLK (48 MHz VCO, 48 MHz PLL) */

CPMUSYNR = 0x00 | 0x05; /* VCOFRQ[7:6], SYNDIV[5:0] */

CPMUREFDIV = 0x20 | 0x03; /* REFFRQ[7:6], REFDIV[3:0] */

CPMUPOSTDIV = 0x00; /* POSTDIV = 0 FPLL = FVCO */

while(!CPMUFLG_LOCK); /* wait for VCO to stabilize*/

Service_WD();

CPMUCLKS_PLLSEL = 1; /* Switch clk to use PLL */ }

//串口初始化

void SCI0_Init(void) {

SCI0CR1 = 0x00; /* 8 Data Bits, 1 Start Bit, 1 Stop Bit, No Parity */

SCI0CR2 = 0x2C; /* 使能接收中断;使能 Tx,Rx */

/* SCIASR1, SCIACR1, SCIACR2, SCISR1, SCISR2, SCIDRH & SCIDRL left at default values */ }

//串口波特率设置

void SCI0_BR(unsigned long br) {

uint brPrescaler;

brPrescaler = (uint)(24000000 / (16 * br));

/* Set the Baud Rate */

SCI0BDH = (uchar)((brPrescaler>>8)); SCI0BDL = (uchar)(brPrescaler); }

//串口发送字节

void SCI0_SendByte(char ch) { }

//串口中断

#pragma CODE_SEG __NEAR_SEG NON_BANKED void interrupt VectorNumber_Vsci0 SCI0_ISR(void) {

SCI0CR2_RIE=0;

/* check SCI transmit data register is empty */ while(SCI0SR1_TDRE == 0); SCI0DRL = ch;

while(SCI0SR1_RDRF == 0); SCI_Rev = SCI0DRL; SCI_Flag = 1;

SCI0CR2_RIE = 1; }

#pragma CODE_SEG DEFAULT

ADC应用程序

#include /* common defines and macros */ #include \ /* derivative-specific definitions */

// 函数声明 void ADC_Init(void);

uint ADC_GetValue(byte ch); void Service_WD(void); void SetBusClock_24MHz(void); void Delay(void);

// 全局变量 uint AD_Result; uint AD_Result2;

void main(void) {

/* put your own code here */

SetBusClock_24MHz();

ADC_Init(); for(;;) {

_FEED_COP(); /* feeds the dog */

AD_Result = ADC_GetValue(7);

AD_Result2 = ADC_GetValue(0); } /* loop forever */

/* please make sure that you never leave main */

EnableInterrupts;

}

// AD初始化

void ADC_Init(void) {

ATDCTL1 = 0x3F; /* 10-Bit resolution ,discharge before sampling. */

ATDCTL3 = 0x88; /* Right Justified Data, Single conversion sequence */

ATDCTL4 = 0xE1; /* 6 MHz, Notice: 12MHz Max ATD Clock, Fatdlk = FBUS/(2*(PRS+1)) */ /* 26 ATD Clock cycles sample time */ }

// ADC通道采集

uint ADC_GetValue(byte ch)

{

ATDCTL5 = 0x0F & ch; /* Start Continuous Conversions on ch */

while (!ATDSTAT0_SCF); /* wait for conversion sequence to complete */ return ATDDR0; }

// 看门狗

void Service_WD(void) {

CPMUARMCOP = 0x55; CPMUARMCOP = 0xAA; }

void SetBusClock_24MHz(void) {

CPMUOSC_OSCE = 1; /* enable ext osc */

/*

Initialise the system clock from a 16 MHz Crystal, 24 MHz Bus CLK (48 MHz VCO, 48 MHz PLL) */

CPMUSYNR = 0x00 | 0x05; /* VCOFRQ[7:6], SYNDIV[5:0] */

CPMUREFDIV = 0x20 | 0x03; /* REFFRQ[7:6], REFDIV[3:0] */

CPMUPOSTDIV = 0x00; /* POSTDIV = 0 FPLL = FVCO */

while(!CPMUFLG_LOCK); /* wait for VCO to stabilize*/

Service_WD();

CPMUCLKS_PLLSEL = 1; /* Switch clk to use PLL */ }

void Delay(void) {

uint dummy_ctr;

for(dummy_ctr=0; dummy_ctr<0x007f;dummy_ctr++) { ; } }


freescale 单片机MC9S12G128应用程序(PWM,Timer,ADC……)(3).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:宁波三区小学升初中对口方案确定

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: