智能车制作

 找回密码
 注册

扫一扫,访问微社区

查看: 2400|回复: 1
打印 上一主题 下一主题

SCI和AD的例子

[复制链接]

2

主题

8

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
227
威望
189
贡献
26
兑换币
6
注册时间
2009-4-8
在线时间
6 小时
跳转到指定楼层
1#
发表于 2010-4-14 12:04:27 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#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

1

主题

14

帖子

0

精华

注册会员

Rank: 2

积分
195
QQ
威望
155
贡献
38
兑换币
0
注册时间
2011-8-30
在线时间
1 小时
2#
发表于 2011-8-30 14:34:52 | 只看该作者
我也在写这些代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关于我们|联系我们|小黑屋|智能车制作 ( 黑ICP备2022002344号

GMT+8, 2024-12-27 19:28 , Processed in 0.478844 second(s), 30 queries , Gzip On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表