智能车制作
标题:
SCI和AD的例子
[打印本页]
作者:
Cupor
时间:
2010-4-14 12:04
标题:
SCI和AD的例子
#include <hidef.h> /* common defines and macros */
#include <MC9S12XS128.h> /* derivative information */
#pragma LINK_INFO DERIVATIVE "mc9s12xs128"
char RxData; //串口数据
int index=0;
char data[8]= { 0x7e,0x00,0x02,0x01,0x00,0x00,0x01,0x82,};
/*********************************************************************************/
/* ************* 初始化函数 ************ */
/*********************************************************************************/
/*===============================================================================*/
/* ------------- I/O口初始化 ------------ */
/*===============================================================================*/
void IO_Init(void)
{
DDRA = 0xFF; // PORT A 拨码开关输出
PORTA = 0xFF;
DDRB = 0xFF; // PORT B LED输出
PORTB = 0x00;
DDRT = 0x00; // PORT T 行中断,场中断,测速脉冲输入
}
/*===============================================================================*/
/* ------------ 定时器初始化 ------------ */
/*===============================================================================*/
void ECT_Init(void)
{
TIOS = 0x00; // 设为输入捕捉
TSCR1_TEN = 1; // 定时器使能
TSCR2_TOI = 0; // 禁止定时器溢出中断
TCTL3 = 0xA0; // 触发边沿:下降沿
TIE = 0xC0; // 中断允许
TFLG1 = 0xFF; // 清除输入捕捉/输出比较中断标志
}
/*===============================================================================*/
/* ------------- 串口初始化 ------------ */
/*===============================================================================*/
void SCI_Init(void)
{
SCI0BDL = 0x36;
SCI0BDH = 0x00; // Bt = BUS_CLOCK / (16 * BR) = 16M / (16 * ) = -> 9600 bit/s
SCI0CR1 = 0x00; // 8位数据,无校验
SCI0CR2 = 0x2C; // 允许发送与接受
}
/*===============================================================================*/
/* ------------ A/D转换初始化 ----------- */
/*===============================================================================*/
// AD_CLOCK = BUS_Clock / (PRS + 1) / 2
void AD_Init(void)
{
ATD0CTL1 = 0x00; // 8位转换精度
ATD0CTL2 = 0x40; // 标志位CCF自动清零,禁止外部触发,禁止中断
ATD0CTL3 = 0x08; // 结果左调整,每次转换1个通道,No FIFO,Freeze模式下继续转换
ATD0CTL4 = 0x00; // 采样时间4个AD时钟周期,AD_CLOCK = 40MHz / (0 + 1) / 2 = 20MHz
ATD0CTL5 = 0x20; // 禁止特殊通道,连续转换,单通道采样
ATD0DIEN = 0x00; // 禁止数字输入
}
/*===============================================================================*/
/* ------------- 系统初始化 ------------- */
/*===============================================================================*/
void Sys_Init(void)
{
DisableInterrupts;
//-------------------------------------------------------------------------------//
// I/O口初始化
IO_Init();
//-------------------------------------------------------------------------------//
// 定时器初始化
ECT_Init();
//-------------------------------------------------------------------------------//
// 串口初始化
SCI_Init();
//-------------------------------------------------------------------------------//
// AD初始化
// AD_Init();
EnableInterrupts;
}
/*********************************************************************************/
/* 发送函数 */
/*********************************************************************************/
void
SCI_Tx( char TxData )
{
SCI0DRH
= 0;
SCI0DRL
= TxData;
//将待发数据写入寄存器
while( !SCI0SR1_TDRE );
//等待发送结束
}
void
GE_Delay( unsigned int x )
{
unsigned int i,j;
for( i=0;i<=x;i++ )
for( j=0;j<=10000;j++ )
;
}
void main(void)
{
Sys_Init();
for(;;)
{
/* if(index>8)
{
index=0;
} */
SCI_Tx('a' );
PORTB = 0xf0;
GE_Delay( 100 );
PORTB = 0x0f;
GE_Delay( 100 );
// SCI_Tx( 0x7e);
//
PORTB
= ~( byte ) ATD0DR0H ;//显示转换结果
}
}
#pragma CODE_SEG __NEAR_SEG NON_BANKED
/*********************************************************************************/
/* 接收函数 */
/*********************************************************************************/
interrupt 20 void SCI_Rx_IRS( void )
{
DisableInterrupts;
RxData
= ( byte ) SCI0DRL;
SCI_Tx( RxData );
EnableInterrupts;
}
#pragma CODE_SEG DEFAULT
作者:
小马
时间:
2011-8-30 14:34
我也在写这些代码
欢迎光临 智能车制作 (http://dns.znczz.com/)
Powered by Discuz! X3.2