MC9S12:AD采集显示实验

Posted JeckXu666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MC9S12:AD采集显示实验相关的知识,希望对你有一定的参考价值。

MC9S12:AD采集显示实验

一、 实验题目

单通道连续采样-12 位模式

二、 实验内容

用 S12 的 AD 模块的 0 通道将一路模拟电平转换成数字量,使用 12 位分辨率,将转换后的数字量送数码管显示

三、 实验原理图

四、 具体设计

4.1 软件流程图

程序首先初始化各个外设,然后进入死循环,等待ADC采集完成后,将数值显示在数码管上

4.2 程序代码

端口定义代码:定义端口A和端口H为输出方向,并清零

void Port_init(void) 
{ 
    DDRA = 0xFF;                                                    
    DDRH = 0xFF;                                                    
    PORTA = 0x00;                                                  
    PTH = 0x00;  
}

数码管显示代码:传入一个4位数的无符号整形,依次在数码管上打印出来

void Set_Show(unsigned int num) 
{
    unsigned char SM_SBUFF[4],i=0;                                     //用户缓冲显示内容
    unsigned char led_dig=0;
    SM_SBUFF[3] =  num/1000;                                
    SM_SBUFF[2] =  num%1000/100;
    SM_SBUFF[1] =  num%100/10;
    SM_SBUFF[0] =  num%10;
    
    led_dig = 0x01;                                                //显示转换结果
    for(i=0;i<4;i++) 
    {
       PORTA = g_LED_Seg_Table[SM_SBUFF[i]];
       PTH = led_dig;
       led_dig = led_dig<<1;
       Delay(1); 
    }
}

延时函数代码:传入一个延时数目,用for循环死延时一段时间

void Delay(unsigned int loop_times)
{
    unsigned int loop_i,loop_j;
    
    for (loop_i=0; loop_i<loop_times; loop_i++) 
    {
        for (loop_j=0; loop_j<4000;loop_j++) 
        {
            ;
        }
    }
}

ADC初始化代码:

void ADC_Init(void)        
{
    ATD0DIEN = 0;          
    ATD0CTL1 = 0x40;      
    ATD0CTL2 = 0x40;     
    ATD0CTL3 = 0x88;    
    ATD0CTL4 = 0x03;    
    ATD0CTL5 = 0x20;  
} 

主循环代码:

void main(void)
{
  /* put your own code here */
  
     unsigned int value;                                                                                       

     SetBusCLK_32M();                                                  
     ADC_Init();                                                      
     Port_init();
     for(;;)
     {
        
         while(!ATD0STAT2L_CCF0)           
         {
            ;
         }                                                                
                    
         value = ATD0DR0;                                     
         Set_Show(value);                                                                

    } /* wait forever */
  
  /* please make sure that you never leave this function */
}

以上是关于MC9S12:AD采集显示实验的主要内容,如果未能解决你的问题,请参考以下文章

MC9S2XS28单片机基本知识点

MC9S12XS128 事件处理

MC9S12XS128 PIM配置

飞思卡尔MC9S12系列单片机地址影射以及分页问题

芯片解密MC9S08DZ16 飞思卡尔系列芯片解密

S12(X)系列MCU的存储器分页访问机制