标题:
PWM的DA转换没有理解
[打印本页]
作者:
humeng
时间:
2017-7-21 16:11
标题:
PWM的DA转换没有理解
本帖最后由 humeng 于 2017-7-21 16:34 编辑
/**************************************************************************************
* DA-PWM输出实验 *
实现现象:下载程序后DA模块上的指示灯呈呼吸灯效果,由暗变亮再由亮变暗
注意事项:要将AD/DA模块上的短接片将OUT和LED短接,板子丝印上有。
如果不想让点阵模块显示,可以将74HC595模块上的JP595短接片拔掉。
***************************************************************************************/
#include "reg52.h" //此文件中定义了单片机的一些特殊功能寄存器
typedef unsigned int u16; //对数据类型进行声明定义
typedef unsigned char u8;
//--定义使用的IO口--//
sbit PWM=P2^1;
bit DIR;
//--定义一个全局变量--//
u16 count,value,timer1;//
count设置占空比,timer1设置周期
/*******************************************************************************
* 函 数 名 : Timer1Init
* 函数功能 : 定时器1初始化
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Timer1Init()
{
TMOD|=0X10;//选择为定时器1模式,工作方式1,仅用TR1打开启动。
TH1 = 0xFF;
TL1 = 0xff; //1us
ET1=1;//打开定时器1中断允许
EA=1;//打开总中断
TR1=1;//打开定时器
}
/*******************************************************************************
* 函 数 名 : main
* 函数功能 : 主函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void main()
{
Timer1Init(); //定时器1初始化
while(1) //
这个循环里面都没有理解,就是不知道在一个周期内,timer1,count,value都是怎么变化的,三者之间有什么关系
{
if(count>100) //
不知道count是怎么来控制占空比的
{
count=0;
if(DIR==1) //DIR控制增加或减小
{
value++; //
value自加时,count在变化吗?timer1还在继续增加吗?
}
if(DIR==0)
{
value--;
}
}
if(value==1000)
{
DIR=0;
}
if(value==0)
{
DIR=1;
}
if(timer1>1000) //PWM周期为1000*1us
{
timer1=0;
}
if(timer1 <value)
{
PWM=1;
}
else
{
PWM=0;
}
}
}
/*******************************************************************************
* 函 数 名 : Time1
* 函数功能 : 定时器1的中断函数
* 输 入 : 无
* 输 出 : 无
*******************************************************************************/
void Time1(void) interrupt 3 //3 为定时器1的中断号 1 定时器0的中断号 0 外部中断1 2 外部中断2 4 串口中断
{
TH1 = 0xFF;
TL1 = 0xff; //1us
timer1++;
count++;
}
作者:
不倒翁.WZT
时间:
2017-7-22 07:41
标题:
RE: PWM的DA转换没有理解
timer1,count是在定时器T1中断服务程序中自加,T1中断是不断进行的,也就是到了定时时间,中断即发生。每中断一次,timer1,count完成自加一次,当count>100时,count清零。当value==1000时,value清零。而value的加减是由DIR来决定的,当DIR==1时value++,当DIR==0时value--。占空比是由timer1 和value的大小共同决定的。
作者:
humeng
时间:
2017-7-29 14:32
不倒翁.WZT 发表于 2017-7-22 07:41
timer1,count是在定时器T1中断服务程序中自加,T1中断是不断进行的,也就是到了定时时间,中断即发生。每中 ...
既然你说占空比是由timer1和value的大小共同决定的,那么count有什么用了?您能不能具体说明下在一个周期内timer1和count、value是怎么变化的?比如刚开始时,count和timer1都在自加,当count自加到100时,这时timer1=100,当count=101时,timer1=101,这时count>100,count=0,由于刚开始value=0,所以DIR=1,value开始自加,“value在自加的过程中,timer1还在自加吗?count重新从0开始自加吗?自加过程中是怎么比较大小的?”就是这个过程没有理解,希望可以解答一下,谢谢
欢迎光临 (http://www.51hei.com/bbs/)
Powered by Discuz! X3.1