应广单片机adc和pwm例程

         应广单片机Otp单核系列主要有以下几个系列,15x系列为纯iO,13x系列为带12bit的adc,17x系列为带8bit的adc,现在我用pms132B写个adc/pwm例程,方便大家快速上手.不多说,上代码.

#include    "extern.h"


/**********adc*****************/
Word usAdcSum;
Word usAdcSumBak;

BIT        THR             :PB.0;
BIT        PWM             :PA.3;
/*定时器初始化*/
void PwmTmr2Init ( void )
{
    tm2ct = 0x0;/*计数值*/
    //pwm duty
    tm2b = 0;//START_PWM_CNT;
    //8 位 pwm, 预分频 = 64, 分频 = 2, frq=970hz
    tm2s = 0b0_11_00000;
    //0010=HIRC输出 ,01= PB2,10=PA3,11=PB4, PWM模式,禁用极性反转
    tm2c = 0b0010_10_1_0;
}

void GetAdc(void)    //ADC采样处理
{
     BYTE  ucCnt;
     
     $ ADCC Enable, THR    ;
     
     //8次采样做平均/
     ucCnt=8;
     //初始化
     usAdcSum=0;
     while ( ucCnt-- )
     {
         AD_Start=1;
        .wait1    AD_Done;
        //adc 采样值,12bit实际使用8bit
        usAdcSum +=ADCRH;
     }    
     //取平均值输出
     usAdcSum=usAdcSum>>3;  //temp除以8
}


void    FPPA0 (void)
{
    .ADJUST_IC    SYSCLK=IHRC/2        //    SYSCLK=IHRC/2

    //    Insert Initial Code
    $ THR  in;
    $ PWM  out,low;


    /*bit config start
    b7:5@001=2V参考;000=VDD;
    b4@0f通道选择器
    b3:2@f通道band-gap参考电压选择
    b1:0@00=rsv
    bit config end*/
    adcrgc=0b000_0_00_00;

    
    PwmTmr2Init();
    while (1)
    {
        /**/
        GetAdc();
        /*当pwm占空比为0,会有关不断的现象,要做特殊处理*/
        if(usAdcSumBak!=usAdcSum)
        {
            usAdcSumBak=usAdcSum;

           /*更新占空比*/
            tm2b=usAdcSum$0;

           /*pwm输出为0*/
            if(!usAdcSum$0)
            {

               /*关闭pwm输出*/
                tm2c = 0b0010_00_1_0;
                PWM=0;
            } 
            else
            {

               /*打开pwm输出*/
                tm2c = 0b0010_10_1_0;
            }
        }

    }
}


void    Interrupt (void)
{
    pushaf;

    if (Intrq.T16)
    {    //    T16 Trig
        //    User can add code
        Intrq.T16    =    0;
        //...
    }

    popaf;
}

/*有啥问题可以留言,也可以联系本人QQ85547259*/

STC15F2K60S2是一款由STC公司生产的高性能单片机芯片。它采用了8051内核,具有丰富的外设资源和高性能特点,适用于多种应用领域。 编写STC15F2K60S2单片机例程主要包括以下几个方面: 1. 引脚配置:首先,需要根据具体的应用需求配置IO口的工作方式,包括输入/输出模式选择、上下拉电阻使能等。 2. 时钟配置:单片机的内部时钟源一般有多个,需要选择合适的时钟源,并设置相关的时钟分频系数,以满足系统的时钟要求。 3. 中断初始化:通过配置中断向量表和中断控制寄存器,可以实现对外部中断和定时器中断等的响应和处理。 4. 外设初始化:根据具体的应用需求,需要对串口、ADC模块、PWM输出等外设进行初始化配置,以使其能够正常工作。 5. 主循环程序:在主循环程序中,可以进行各种任务的调度和执行,包括数据的采集、处理和输出等。 6. 省电模式设置:考虑到节能的需求,可以设置单片机在空闲状态下进入特定的睡眠模式,以降低功耗。 编写STC15F2K60S2单片机例程需要熟悉8051系列的汇编语言或C语言编程,并且对该芯片的硬件架构和寄存器功能有一定的了解。此外,还需要根据具体的应用需求,参考芯片的技术手册和相关的数据表,合理配置单片机的外设资源和时钟源。最后,通过编写、调试和测试,确保例程的功能正确和稳定。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值