admin管理员组

文章数量:1794759

超简单“手把手教你写PWM程序”(基于STC89C52)

超简单“手把手教你写PWM程序”(基于STC89C52)

文章目录
  • 前言
  • 一、学习前需要掌握哪些内容?
    • 1.掌握单片机定时器的使用方法
    • 2.掌握c语言基础
  • 二、开始
    • 1.基操来一下
    • 2.重头戏
            • 以下代码就是具体实现方案
    • 所以我们只要调节Speed 的值就可以调节占空比了
            • Speed的值应该比A小
  • 总结


前言

学习单片机总要接触一些控制,比如电机调速,舵机驱动,步进电机驱动。这是必不可少需要用到一种控制机制———PWM(脉冲宽度调制)


提示:以下是本篇文章正文内容,下面案例可供参考

一、学习前需要掌握哪些内容? 1.掌握单片机定时器的使用方法 2.掌握c语言基础 二、开始 1.基操来一下

代码如下(示例):

#include <reg52.h> typedef unsigned int u16; typedef unsigned char u8; //声明变量 sbit PWM = P1^0; //定义PWM输出口 2.重头戏 以下代码就是具体实现方案

代码如下(示例):

u16 A = 0; //定义变量 u16 Speed; void Time0Init() //初始化定时器 { TMOD|=0x01; //配置定时器1 TH0 = (65536-1000)/256; //配置1ms定时 TL0 = (65536-1000)%256; TR0 = 1; ET0 = 1; //打开定时器中断 EA = 1; //打开总中断 } //中断里面就是PWM具体实现的代码 void time()interrupt 1 { TH0 = (65536-1000)/256; //配置1ms定时 TL0 = (65536-1000)%256; A++; //A开始计数,每1毫秒加一 if(A > 1000) //A计数到1000就清零,也就是说每经过1s就是一个 { //PWM周期,所以频率是1Hz A = 0; } //该Speed出场了,speed作为比较器跟A比较,通过调Speed来调节占空比 if(Speed < A) { PWM = 1; //当Speed小于A时,PWM引脚输出高电平 } else { PWM = 0; //否则就输出0 } if(Speed>999) { Speed =999; } } 所以我们只要调节Speed 的值就可以调节占空比了 Speed的值应该比A小
总结

main函数里面也比较简单

void main() { Time0Init(); while(1); }

原理方面就介绍到这了 下篇写个蓝牙调速车的代码

本文标签: 手把手教你简单程序PWM