Board logo

标题: [求助]请教高手,带缓冲的PWM输出 [打印本页]

作者: bozhiqiang001    时间: 2007-4-11 14:35     标题: [求助]请教高手,带缓冲的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;时,输出脉冲宽度完全正确。请问为什么直接负值可以,写成变量就不可了,我仿真监测我的变量的数据也完全正确。

作者: strongchen    时间: 2007-4-11 14:49

TCH1到底是什么,humi_val又是什么长度的变量?
作者: bozhiqiang001    时间: 2007-4-11 14:53

我用的是两个通道  TCH1是缓冲TCH0的脉宽寄存器  humi_val为int
作者: bozhiqiang001    时间: 2007-4-11 14:56

待缓冲的pwm输出需要占用一个定时器的两个通道。
作者: strongchen    时间: 2007-4-11 15:15

把这个PWM的程序做一个简单的PROJECT试试,不行的话贴出来看看。
作者: bozhiqiang001    时间: 2007-4-11 16:07

我再看看吧,简单的工程可以。我想是我哪里弄错了,我再仔细看看源程序吧!谢谢,不行的话再来请教!
作者: bozhiqiang001    时间: 2007-4-11 17:05

还是没有解决,我把主程序给发上去,希望给看看。

//----------------------------------------------------------------------------------
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 */

}


}

作者: nishui_2000    时间: 2007-4-12 09:34

我用过908GZ16的PWM带缓冲输出,你需要的话我可以发给你(就是和你的单片机不一样的型号)
作者: strongchen    时间: 2007-4-12 09:36

最好把整个project贴出来。
作者: bozhiqiang001    时间: 2007-4-12 10:04

谢谢 nishui_2000
我的邮箱地址是:bozq@dsymcu.com




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0