打印

精灵一号程序---PwmConn.c

[复制链接]
745|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
雁舞白沙|  楼主 | 2014-11-12 06:10 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include <GLOBAL.h>
#include <stdlib.h>
#include <stdbool.h>
#include <msp430x21x2.h>


char TaPwmInit(unsigned char Clk,unsigned char Div,char Mode1,unsigned char Mode2)
{
    TACTL = 0;                  //清除以前设置
    TACTL |= MC_1;              //定时器TA设为增计数模式  
    switch(Clk)                 //选择时钟源
    {
        case 'A': case 'a':  TACTL|=TASSEL_1; break;    //ACLK
        case 'S': case 's':  TACTL|=TASSEL_2; break;    //SMCLK
        case 'E':            TACTL|=TASSEL_0; break;    //外部输入(TACLK)
        case 'e':            TACTL|=TASSEL_3; break;    //外部输入(TACLK取反)
        default :  return(0);                           //参数有误
    }
    switch(Div)                 //选择分频系数
    {
        case 1:   TACTL|=ID_0; break;   //1
        case 2:   TACTL|=ID_1; break;   //2
        case 4:   TACTL|=ID_2; break;   //4
        case 8:   TACTL|=ID_3; break;   //8
        default :  return(0);           //参数有误
    }
    switch(Mode1)               //设置PWM通道1的输出模式。
    {
        case 'P':case 'p':          //如果设置为高电平模式
            TACCTL1 = OUTMOD_7;     //高电平PWM输出
            P1SEL |= BIT2;          //从P1.2输出 (不同型号单片机可能不一样)
            P1DIR |= BIT2;          //从P1.2输出 (不同型号单片机可能不一样)              
            break;
        case 'N':case 'n':          //如果设置为低电平模式         
            TACCTL1 = OUTMOD_3;     //低电平PWM输出
            P1SEL |= BIT2;          //从P1.2输出 (不同型号单片机可能不一样)
            P1DIR |= BIT2;          //从P1.2输出 (不同型号单片机可能不一样)
            break;
        case '0':case 0:            //如果设置为禁用         
            P1SEL &= ~BIT2;         //P1.2恢复为普通IO口
            P1DIR |= BIT2;
            P1OUT |= BIT2;//---输出高
            break;                 
        default :  return(0);       //参数有误
    }
    switch(Mode2)                   //设置PWM通道2的输出模式。
    {
        case 'P':case 'p':          //如果设置为高电平模式
            TACCTL2 =OUTMOD_7;      //高电平PWM输出
            P1SEL |= BIT3;          //从P1.3输出 (不同型号单片机可能不一样)
            P1DIR |= BIT3;          //从P1.3输出 (不同型号单片机可能不一样)
            break;
        case 'N':case 'n':          //如果设置为低电平模式         
            TACCTL2 =OUTMOD_3;      //低电平PWM输出
            P1SEL |= BIT3;          //从P1.3输出 (不同型号单片机可能不一样)  
            P1DIR |= BIT3;          //从P1.3输出 (不同型号单片机可能不一样)              
            break;
        case '0':case 0:            //如果设置为禁用         
            P1SEL &= ~BIT3;         //P1.3恢复为普通IO口
            P1DIR |= BIT3;
            P1OUT |= BIT3;//---输出高
            break;                 
        default :  return(0);       //参数有误
    }   
    return(1);  
}
void TaPwmSetPeriod(unsigned int Period)
{
    TACCR0 = Period;
}
void TaPwmSetDuty(unsigned char Channel,unsigned int Duty)
{
    switch(Channel)
    {
        case 1: TACCR1=Duty; break;
        case 2: TACCR2=Duty; break;   
    }
}
void PwmInit(void)
{
    TaPwmInit('S',1,'p','p');
    TaPwmSetPeriod(1000);  
    TaPwmSetDuty(2,100);
    TaPwmSetDuty(1,975);//---通许还没有,故此给一个固定数值
}



相关帖子

发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

个人签名:学者会友QQ群:72137827 三人行,必有我师!

213

主题

789

帖子

243

粉丝