MC9S12XS128 ADC操作例程

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

MC9S12XS128 ADC操作例程

Code Warrior 4.7

Target : MC9S12XS128

Crystal: 16.000Mhz

busclock:16.000MHz

pllclock:32.000MHz

本程序主要包括以下功能:

1.设置锁相环和总线频率;

2.IO口使用;

3.共四路ATD使用及显示方法。

LED计数,根据灯亮可以读取系统循环了多少次

************************************************************** ***************************/

#include /* common defines and macros */

#include /* derivative information */

#include "LQprintp.h"

#pragma LINK_INFO DERIVATIVE "mc9s12xs128"

#pragma CODE_SEG __NEAR_SEG NON_BANKED

void interrupt 20 SCI0_ISR(void)

{

SCI0CR2_RIE=0;

//此处为串口中断需要处理的事情

uart_putchar(uart_getkey());

PORTA_PA0=~PORTA_PA0;

SCI0CR2_RIE = 1;

}

#pragma CODE_SEG DEFAULT

//-----------------------------------------------------

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; //出口波特率为9600

SCI0BD =0x68; //SCI0BDL=busclk/(16*SCI0BDL)

//busclk 8MHz, 9600bps,SCI0BD=0x34

//busclk 16MHz, 9600bps,SCI0BD=0x68

//busclk 24MHz, 9600bps,SCI0BD=0x9C

} //busclk 32MHz, 9600bps,SCI0BD=0xD0

//busclk 40MHz, 9600bps,SCI0BD=0x106

//-----------------------------------------------------

void AD_Init(void)

{

ATD0CTL1=0x00; //7:1-外部触发,65:00-8位精度,4:放电,3210:ch

ATD0CTL2=0x40; //禁止外部触发, 中断禁止

ATD0CTL3=0xa0; //右对齐无符号,每次转换4个序列, No FIFO, Freeze模式下继续转

ATD0CTL4=0x01; //765:采样时间为4个AD时钟周

期,ATDClock=[BusClock*0.5]/[PRS+1]

ATD0CTL5=0x30; //6:0特殊通道禁止,5:1连续转换,4:1多通道轮流采样

ATD0DIEN=0x00; //禁止数字输入

}

//-----------------------------------------------------

void Dly_ms(int ms)

{

int ii,jj;

if (ms<1) ms=1;

for(ii=0;ii

for(jj=0;jj<2670;jj++); //busclk:16MHz--1ms

}

byte ReadATD(byte ch)

{

byte ad=0;

while(!ATD0STAT0_SCF);

switch(ch)

{

default:

case 0:

ad= ATD0DR0L;

break;

case 1:

ad= ATD0DR1L;

break;

case 2:

ad= ATD0DR2L;

break;

case 3:

ad= ATD0DR3L;

break;

case 4:

ad= ATD0DR4L;

break;

case 5:

ad= ATD0DR5L;

break;

case 6:

ad= ATD0DR6L;

break;

case 7:

ad= ATD0DR7L;

break;

}

return ad;

}

void main(void){

unsigned char LedCnt=0;

int fenwei=0,gewei=0;

setbusclock();

SCI_Init();

AD_Init();

DDRA=0xFF;

PUCR_PUPAE=1;

putstr("\nLongQiu s.&t.\n"); EnableInterrupts;

for(;;)

{

LedCnt=(LedCnt>0XFE?0:++LedCnt);

Dly_ms(1000); //修改延时以修改数据发送频率

//低电平灯亮用这句,注释掉下面那句

PORTA_PA0=~PORTA_PA0;

相关文档
最新文档