打印
[范例教程]

定时器做PWM程序

[复制链接]
564|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
elsaflower|  楼主 | 2023-11-25 14:55 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
#include "STC89.H"                                        //头文件包含
#include <intrins.h>                                //头文件包含
typedef unsigned char u8;                        //重新定义数据类型名
typedef unsigned short u16;                        //重新定义数据类型名
typedef unsigned long u32;                        //重新定义数据类型名
sbit PWM_OUT=P2^1;        
u8 idata PWM_Write_Byte[3]=0;

//****************************祁绪电子 2020年5月***
// 定时器0初始化  晶振11059200,12T,输出50Hz的PWM,占空比0~255
// 定时器初值为:256-(11059200÷12÷50Hz÷256) = 184 = 0xB8
void PWM_Init(void)
{
        TMOD &= 0xF0;                                        //配置定时器工作模式
        TMOD |= 0x02;                                        //配置定时器工作模式 8位自动重装模式
    TL0 = 0xB8;;                    //定时器初值
    TH0 = 0xB8;                                //定时器重装初值
    TR0 = 1;                        //启动定时器0
    ET0=1;                                                         //允许定时器0申请中断
        EA=1;                                                        //中断总闸闭合
}
//****************************祁绪电子 2020年5月***
//定时器0的CPU处理函数,位置任意写都行
void PWM_Display_timer0() interrupt 1
{
        
        static u8 pwm_t=0;                                 //局部变量,不丢失数据
        if(pwm_t<PWM_Write_Byte[0])
        {
                PWM_OUT=1;                                 
        }
        else PWM_OUT=0;
        pwm_t++;
}

//***************************
// PWM 数模变换数据分配
void PWM_Allot()                                          
{
        static u8 kkk=0;        
        static u8 count=0;
        count++;
        if(count>100)
        {
                count=0;
                kkk++;
                PWM_Write_Byte[0]=kkk;        //kkk为占空比自动增加
                PWM_Write_Byte[1]=10;        
                PWM_Write_Byte[2]=10;
        }
}


void main()                                                        //主函数
{
        PWM_Init();
        while(1)                                                //主函数大循环
        {
                PWM_Allot();        
        }
}

使用特权

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

本版积分规则

16

主题

1069

帖子

0

粉丝