1. 程式人生 > 其它 >超簡單“手把手教你寫PWM程式”(基於STC89C52)

超簡單“手把手教你寫PWM程式”(基於STC89C52)

技術標籤:微控制器微控制器程式語言

文章目錄


前言

學習微控制器總要接觸一些控制,比如電機調速,舵機驅動,步進電機驅動。這是必不可少需要用到一種控制機制———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);
}

原理方面就介紹到這了
下篇寫個藍芽調速車的程式碼