标题:
51单片机定时计数器生成100hz频率的PWM控制程序
[打印本页]
作者:
2916136381
时间:
2021-5-25 23:25
标题:
51单片机定时计数器生成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; //定义变量,计算周期
void Timer0Init(void); //声明定时计数器0
void EX0_Init(void); //声明外部中断0
void main()
{
EX0_Init(); //外部中断0初始化
Timer0Init(); //初始化定时计数器0
EA=1; //中断总开关
while(1)
{
}
}
void EX0_Init(void) //外部中断0设置
{
IT0=1;
EX0=1;
}
void Timer0Init(void) //100微秒@12.000MHz
{
TMOD &= 0xF0; //设置定时器模式
TMOD |= 0x01; //设置定时器模式
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
TF0 = 0; //清除TF0标志
ET0=1;
//EA=1; //总中断
TR0 = 1; //定时器0开始计时
}
void EX0_isr(void) interrupt 0 //外部中断0入口
{
static unsigned char PWM_KEY; //定义脉宽调整变量
if(key_s==0) //按键判断
{
delayms(10);
if(key_s==0)
{
PWM_KEY++; //每进入一次中断加一
}while(key_s==0); //松手运行
}
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 //定时1ms
{
TR0 = 0;
TL0 = 0x9C; //设置定时初值
TH0 = 0xFF; //设置定时初值
PWMFF++;
if(PWMFF>=100)
{
PWMFF=0;
}
if(PWMFF<PWM_bz)
PWM=1;
else
PWM=0;
TR0 = 1;
}
仿真.7z
2022-12-1 04:25 上传
点击文件名下载附件
31.26 KB, 下载次数: 38
作者:
2916136381
时间:
2021-5-26 10:48
void Delay10ms() //@12.000MHz
{
unsigned char i, j;
i = 20;
j = 113;
do
{
while (--j);
} while (--i);
}
上面延时子程序补充
作者:
小烧友
时间:
2022-11-30 14:57
我还以为是源码,谁知竟是DSN文件原理图
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1