标题: 单片机PWM 有问题但是不知道怎么修改 [打印本页]
作者: 深层次 时间: 2023-12-14 15:12
标题: 单片机PWM 有问题但是不知道怎么修改
要求:采用占空比自动增加模式,控制1个LED灯光的强度由弱变强,再循环。
我为什么无法在仿真上实现这个效果?
#include <reg52.h> //包含52头文件
#define uint unsigned int //宏定义uint代替unsigned int
#define uchar unsigned char //宏定义uchar代替unsigned char
sbit PWM=P1;
void T1_init();
uint count=0,High_num=200;
void main() //主函数
{
T1_init();
while(1)
{
}
}
void T1_init()
{
TMOD=0x20; //设置T1为方式2
TH1=256-100; //置T1高8位,备用初值
TL1=256-100; //置T1低8位,初值
TR1=1; //启动T1
ET1=1; //开T1中断
EA=1; //开总中断
}
/**********T1中断服务程序*********/
void T1_int() interrupt 3 //00us进入中断
{
count++;High_num--;
if(High_num==0) High_num=200;
if(count>=200) count=0;
if(count<High_num)
PWM=1;
else
PWM=0;
}
-
屏幕截图 2023-12-11 205320.png
(41.94 KB, 下载次数: 37)
作者: lkc8210 时间: 2023-12-14 16:18
High_num不能和count同时改变
因改为count变为0时才改变
作者: 深层次 时间: 2023-12-14 16:32
噢噢噢噢,我明白了,就是这两个相冲了,但是我修改成下面的样子,仿真上还是没法实现要求
#include <reg52.h> //包含52头文件
#define uint unsigned int //宏定义uint代替unsigned int
#define uchar unsigned char //宏定义uchar代替unsigned char
sbit PWM=P2^0;
void T1_init();
uint count=0,High_num;
void zidong();
void delay (uint xms) //毫秒函数定义
{
uint i,j;
for(i=0;i<xms;i++)
for(j=0;j<120;j++);
}
void main() //主函数
{
T1_init();
while(1)
{
zidong();
}
}
void T1_init()
{
TMOD=0x20; //设置T1为方式2
TH1=256-100; //置T1高8位,备用初值
TL1=256-100; //置T1低8位,初值
ET1=1; //开T1中断
EA=1; //开总中断
}
/**********T1中断服务程序*********/
void T1_int() interrupt 3 //00us进入中断
{
count++;
if(count>=500) count=0;
if(count<High_num)PWM=1;
else PWM=0;
}
void zidong()
{
TR1=1; //启动T1
High_num=150; delay(200);
High_num=100; delay(200);
High_num=50; delay(200);
High_num=0; delay(200);
}
作者: 51会一点 时间: 2023-12-15 09:18
#include <reg52.h> //包含52头文件
#define uint unsigned int //宏定义uint代替unsigned int
#define uchar unsigned char //宏定义uchar代替unsigned char
sbit PWM=P1;
void T1_init();
uint count=0,High_num=200;
void main() //主函数
{
T1_init();
while(1)
{
}
}
void T1_init()
{
TMOD=0x20; //设置T1为方式2
TH1=256-100; //置T1高8位,备用初值
TL1=256-100; //置T1低8位,初值
TR1=1; //启动T1
ET1=1; //开T1中断
EA=1; //开总中断
}
/**********T1中断服务程序*********/
void T1_int() interrupt 3 //00us进入中断
{
High_num--;
if(High_num==0)
{
High_num=200;
count++;
if(count>=200) count=0;
}
if(count<High_num)
PWM=1;
else
PWM=0;
}
这个试一下
作者: 深层次 时间: 2023-12-20 20:22
这个确实也可以,我考虑到了另一个方式,就是直接写出占空比如High_num=150;加上了延迟也可以实现要求
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |