標(biāo)題:
51單片機(jī)定時(shí)計(jì)數(shù)器生成100hz頻率的PWM控制程序
[打印本頁]
作者:
2916136381
時(shí)間:
2021-5-25 23:25
標(biāo)題:
51單片機(jī)定時(shí)計(jì)數(shù)器生成100hz頻率的PWM控制程序
#include <reg51.h>
#include "delay.h"
sbit PWM=P2^1; //PWM輸出
sbit key_s=P3^2;
unsigned char PWM_bz=100; //0-100 改變脈沖寬度
unsigned char PWMFF; //定義變量,計(jì)算周期
void Timer0Init(void); //聲明定時(shí)計(jì)數(shù)器0
void EX0_Init(void); //聲明外部中斷0
void main()
{
EX0_Init(); //外部中斷0初始化
Timer0Init(); //初始化定時(shí)計(jì)數(shù)器0
EA=1; //中斷總開關(guān)
while(1)
{
}
}
void EX0_Init(void) //外部中斷0設(shè)置
{
IT0=1;
EX0=1;
}
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //設(shè)置定時(shí)器模式
TMOD |= 0x01; //設(shè)置定時(shí)器模式
TL0 = 0x9C; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
TF0 = 0; //清除TF0標(biāo)志
ET0=1;
//EA=1; //總中斷
TR0 = 1; //定時(shí)器0開始計(jì)時(shí)
}
void EX0_isr(void) interrupt 0 //外部中斷0入口
{
static unsigned char PWM_KEY; //定義脈寬調(diào)整變量
if(key_s==0) //按鍵判斷
{
delayms(10);
if(key_s==0)
{
PWM_KEY++; //每進(jìn)入一次中斷加一
}while(key_s==0); //松手運(yùn)行
}
switch(PWM_KEY)
{
case 1:PWM_bz=25;break;
case 2:PWM_bz=50;break;
case 3:PWM_bz=75;break;
case 4:PWM_bz=100;break;
case 5:PWM_bz=0;PWM_KEY=0;break; //清零
default:break;
}
}
void Timer0_isr(void) interrupt 1 //定時(shí)1ms
{
TR0 = 0;
TL0 = 0x9C; //設(shè)置定時(shí)初值
TH0 = 0xFF; //設(shè)置定時(shí)初值
PWMFF++;
if(PWMFF>=100)
{
PWMFF=0;
}
if(PWMFF<PWM_bz)
PWM=1;
else
PWM=0;
TR0 = 1;
}
仿真.7z
2022-12-1 04:25 上傳
點(diǎn)擊文件名下載附件
31.26 KB, 下載次數(shù): 38
作者:
2916136381
時(shí)間:
2021-5-26 10:48
void Delay10ms() //@12.000MHz
{
unsigned char i, j;
i = 20;
j = 113;
do
{
while (--j);
} while (--i);
}
上面延時(shí)子程序補(bǔ)充
作者:
小燒友
時(shí)間:
2022-11-30 14:57
我還以為是源碼,誰知竟是DSN文件原理圖
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1