标题:
用52单片机定时中断2做的一个简单LED_PWM调节
[打印本页]
作者:
傻人求学1
时间:
2018-8-31 07:48
标题:
用52单片机定时中断2做的一个简单LED_PWM调节
#include"reg52.h"
#define uint unsigned int
#define uchar unsigned char
sfr T2MOD =0xC9; //定时器中断2TMOD必须定义
/*-----------------------PWM定义---------------------------*/
uchar PWM_T=0;//PWM脉冲周期PWM_T(max)=256*中断定时时间
//PWM物理地址通道定义,物理地址根据需要自由定义
sbit PWM_IO0 = P1^0;
sbit PWM_IO1 = P1^1;
sbit PWM_IO2 = P1^2;
sbit PWM_IO3 = P1^3;
//PWM脉冲占空比
uchar PWM_IO0_ZKB=10; //脉冲占空比,0~255,=0时输出最大
uchar PWM_IO1_ZKB=10;
uchar PWM_IO2_ZKB=10;
uchar PWM_IO3_ZKB=10;
/*---------------------------------------------------------*/
sbit s0 = P3^0;
sbit s1 = P3^1;
/*---------------定时器2初始化-------------------*/
void timer2_init()//定时器2初始化
{
RCAP2H=0xff; //16位计数器,定时39us
RCAP2L=0xdc; //X=0xffdc=65500;T=(65536-X)*机器周期(11.0592MHz,1.085us)
//TH2=RCAP2H; //会自动重装
//TL2=RCAP2L;
T2CON=0;
T2MOD=0;
EA=1;
ET2=1;
TR2=1;
}
/*--------------定时器2中断服务程序----------------------------*/
void timer2() interrupt 5
{
TF2=0; //注意:定时器2必须由软件对溢出标志位清零,
//这里与定时器0和定时器1不同
//PWM处理
PWM_T++;
if(PWM_T == 255)//取到最大值
{PWM_T = PWM_IO0 = PWM_IO1 = PWM_IO2 = PWM_IO3 = 0;} //所有通道脉冲拉至低电平
//通道脉冲电平拉高
if(PWM_T == PWM_IO0_ZKB) //通道0脉冲得高电平
PWM_IO0 = 1;
if(PWM_T == PWM_IO1_ZKB) //通道1脉冲得高电平
PWM_IO1 = 1;
if(PWM_T == PWM_IO2_ZKB) //通道2脉冲得高电平
PWM_IO2 = 1;
if(PWM_T == PWM_IO3_ZKB) //通道3脉冲得高电平
PWM_IO3 = 1;
}
/*------------主函数---------------*/
void main()
{
timer2_init();//定时器2初始化
while(1)
{
if(s0==0) //按s0减小占空比
{
while(!s0);//等待
{
if(PWM_IO0_ZKB>0)
{
PWM_IO0_ZKB = PWM_IO0_ZKB-10;
PWM_IO1_ZKB = PWM_IO1_ZKB-10;
PWM_IO2_ZKB = PWM_IO2_ZKB-10;
PWM_IO3_ZKB = PWM_IO3_ZKB-10;
}
}
}
if(s1==0) //按s1增加哦占空比
{
while(!s1);//等待
{
if(PWM_IO0_ZKB<255)
{
PWM_IO0_ZKB = PWM_IO0_ZKB+10;
PWM_IO1_ZKB = PWM_IO1_ZKB+10;
PWM_IO2_ZKB = PWM_IO2_ZKB+10;
PWM_IO3_ZKB = PWM_IO3_ZKB+10;
}
}
}
}
}
复制代码
定时中断2_PWM.zip
2018-8-31 07:47 上传
点击文件名下载附件
下载积分: 黑币 -5
33.5 KB, 下载次数: 20, 下载积分: 黑币 -5
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1