⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 timer_oc.c

📁 《嵌入式系统-使用HCS12微控制器的设计与应用》在CodeWarrior开发环境下的源程序。
💻 C
字号:
//[Timer_OC.c]输出比较-----------------------------------------------------*
//本文件包含:                                                              *
//    (1)TimerOCInit:输出比较初始化                                        *
//    (2)TimerOCSET:设置通道产生方波                                       *
//硬件连接:                                                                *
//    PT.0~PT.7作为方波的输出引脚,可通过示波器观察如果用万用表测量时,      *
//    方波停止时电压为5V,产生方波时电压值应该为2.5V(系统5V电压的一半,      *
//    相当于占空比为50%,说明产生的是方波)                                  *
//-------------------------------------------------------------------------*

//头文件
#include "Timer_OC.h"    //输出比较头文件

//TimerOCInit:输出比较初始化函数-------------------------------------------*
//功  能:输出比较初始化(初始化方波停止,8个引脚都输出5V)                    *
//参  数:无                                                                *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void TimerOCInit(void)
{
    TIOS = 0xFF;     //通道0~通道7设置为输出比较
    TSCR2 = 0x08;    //当通道7事件发生使计数器复位
    //当输出比较事件发生时通道0~通道7引脚输出高电平
    TCTL1 = 0xFF;
    TCTL2 = 0xFF;
    //对通道7~0设置电平翻转时间8000个计数周期
    TC7 = 0x1F40;
    TC6 = 0x1F40;
    TC5 = 0x1F40;
    TC4 = 0x1F40;
    TC3 = 0x1F40;
    TC2 = 0x1F40;
    TC1 = 0x1F40;
    TC0 = 0x1F40;
    TSCR1 = 0x80;    //定时器允许  
}

//TimerOCSET:设置通道产生方波函数------------------------------------------*
//功  能:                                                                  *
//    设置通道是否产生方波对每个通道0~7设置是否启动方波,设置成功回送       *
//    0x56("V"的ASC码),设置不成功回送0x46("F"的ASC码)                     *
//参  数:                                                                  *
//    channel-通道号('0'~'7')字符型变量                                    *
//    Switch-开关('S'-产生方波,'E'-停止)字符型变量                        *
//返  回:无                                                                *
//-------------------------------------------------------------------------*
void TimerOCSET(INT8U channel, INT8U Switch)
{
    INT8U int_Flag;             //方波设置标志,56-设置成功,46-设置失败
    int_Flag = 0x46;            //设置标志初始化 

    switch (channel)
    {
    case '0':
        if(Switch == 'S')       //启动0通道方波输出
        {
            TCTL2 &= 0xFD; 
            int_Flag = 0x56;    //设置成功
        }
        if(Switch == 'E')       //0通道停止
        {
            TCTL2 |= 0x02;
            int_Flag = 0x56;    //设置成功
        }
    break;

    case '1':
        if(Switch == 'S')       //启动1通道方波输出
        {
            TCTL2 &= 0xF7;
            int_Flag = 0x56;    //设置成功
        }
        if(Switch =='E')        //1通道停止
        {
            TCTL2 |= 0x08;
            int_Flag = 0x56;    //设置成功
        }
    break;

    case '2':
        if(Switch == 'S')       //启动2通道方波输出
        {
            TCTL2 &= 0xDF;
            int_Flag = 0x56;    //设置成功
        }
        if(Switch == 'E')       //2通道停止
        {
            TCTL2 |= 0x20;
            int_Flag = 0x56;    //设置成功
        }
    break;

    case '3':
        if(Switch == 'S')       //启动1通道方波输出
        {
            TCTL2 &= 0x7F;
            int_Flag = 0x56;    //设置成功
        }
        if(Switch == 'E')       //1通道停止
        {
            TCTL2 |= 0x80;
            int_Flag = 0x56;    //设置成功
        }
    break;

    case '4':
        if(Switch == 'S')       //启动4通道方波输出
        {
            TCTL1 &= 0xFD;
            int_Flag = 0x56;    //设置成功
        }
        if(Switch == 'E')       //4通道停止
        {
            TCTL1 |= 0x02;
            int_Flag = 0x56;    //设置成功
        }
    break;

    case '5':
        if(Switch == 'S')       //启动5通道方波输出
        {
            TCTL1 &= 0xF7;
            int_Flag = 0x56;    //设置成功
        }
        if(Switch == 'E')       //5通道停止
        {
            TCTL1 |= 0x08;
            int_Flag = 0x56;    //设置成功
        }
    break;

    case '6':
        if(Switch == 'S')       //启动6通道方波输出
        {
            TCTL1 &= 0xDF;
            int_Flag = 0x56;    //设置成功
        }
        if(Switch == 'E')       //6通道停止
        {
            TCTL1 |= 0x20;
            int_Flag = 0x56;    //设置成功
        }
    break;

    case '7':
        if(Switch == 'S')       //启动7通道方波输出
        {
            TCTL1 &= 0x7F;
            int_Flag = 0x56;    //设置成功
        }
        if(Switch == 'E')       //7通道停止
        {
            TCTL1 |= 0x80;
            int_Flag = 0x56;    //设置成功
        }
    break;

    default:
    break;
    }

    SCISend1(int_Flag);         //返回设置标志
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -