首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

[求助]请教高手,带缓冲的PWM输出

[求助]请教高手,带缓冲的PWM输出

我用的单片机是HLC908QT1,下面是我的pwm初始化程序,这个没有问题。
//----------------------------------------------------------------------------------
void PwmInit()
//----------------------------------------------------------------------------------

{

TSC_TSTOP = 1;
TSC_TRST = 1;
TSC_PS2=0;
TSC_PS1=0;
TSC_PS0=1;
TMOD = 1010; // 1001
TCH0 = 1;
TCH1 = 1;
TSC0_MS0B = 1;
TSC0_MS0A = 0;
TSC0_TOV0 = 1;
TSC0_ELS0B = 1;
TSC0_ELS0A = 1;
TSC_TSTOP = 0;

}


我的问题是怎样修改TCH1改变脉冲宽度? 我自己做的附值语句如下:

while(TSC0_CH0F==0);
TCH1 = humi_val;时,输出脉冲宽度不对,大概是50%;

while(TSC0_CH0F==0);
TCH1 = 305;时,输出脉冲宽度完全正确。请问为什么直接负值可以,写成变量就不可了,我仿真监测我的变量的数据也完全正确。
学习,学习,再学习!
TCH1到底是什么,humi_val又是什么长度的变量?
海纳百川  有容乃大
我用的是两个通道  TCH1是缓冲TCH0的脉宽寄存器  humi_val为int
学习,学习,再学习!
待缓冲的pwm输出需要占用一个定时器的两个通道。
学习,学习,再学习!
把这个PWM的程序做一个简单的PROJECT试试,不行的话贴出来看看。
海纳百川  有容乃大
我再看看吧,简单的工程可以。我想是我哪里弄错了,我再仔细看看源程序吧!谢谢,不行的话再来请教!
学习,学习,再学习!
还是没有解决,我把主程序给发上去,希望给看看。

//----------------------------------------------------------------------------------
void main(void) {
//----------------------------------------------------------------------------------

unsigned int humi_val,temp_val;
unsigned int rh_lin,rh_true;
unsigned char error,checksum;
unsigned int i;
SCK_OUT;
PwmInit();
s_connectionreset();
for(;;)
{ error=0;
s_transstart(); //transmission start
error+=s_write_byte(STATUS_REG_W);//send command to sensor
error+=s_write_byte(STATUS_REG_D); //send value of status register

error+=s_measure((unsigned char*) &humi_val,&checksum,HUMI);
error+=s_measure((unsigned char*) &temp_val,&checksum,TEMP);
if(error!=0){
s_connectionreset();
}
else
{
rh_lin=10*humi_val+10;
rh_lin=rh_lin>>1;
//rh_true=(400*t-396400+51*t*rh-rh)/10000; 温度补偿
if(rh_lin>=1000) rh_true = 1;
else if (rh_lin<=1) rh_true =1000;
else rh_true = 1001-rh_lin;

//while(TSC0_CH0F==0);
while(TSC_TOF==0);
//TCH1 = 691;
TCH1 = rh_true;

for (i=0;i<16000;i++);

}


//-----------------------------------------------------------------------------------
__RESET_WATCHDOG(); /* feeds the dog */

}


}
学习,学习,再学习!
我用过908GZ16的PWM带缓冲输出,你需要的话我可以发给你(就是和你的单片机不一样的型号)
水泡泡
 我的QQ是:52449804 
 我的网站是: www.dyic.com.cn
 欢迎访问和留言跟我联系
最好把整个project贴出来。
海纳百川  有容乃大
谢谢 nishui_2000
我的邮箱地址是:bozq@dsymcu.com
学习,学习,再学习!
返回列表