打印

输入波形按比例输出程序问题

[复制链接]
1755|9
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
2001myp|  楼主 | 2009-4-21 08:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我用外中断口输入一个方波,输出一个周期比例是6点几比10的波形,我用了两个定时器(51单片机),一个定时器计时,另外一个定时器计算比例后输出,但出来波形比例不稳,比如周期是5MS,比例是1.2,而周期是50MS时,比例变成了1.8,我在想能不能优化一下算法,用一个定时器可以么,高手提供一下思路好么,谢谢

相关帖子

沙发
2001myp|  楼主 | 2009-4-21 09:34 | 只看该作者

顶一下

 顶一下

使用特权

评论回复
板凳
2001myp|  楼主 | 2009-4-21 10:09 | 只看该作者

再顶一下,有没高手指教一下

使用特权

评论回复
地板
红心j| | 2009-4-21 10:37 | 只看该作者

即时输出还是延后输出

使用特权

评论回复
5
2001myp|  楼主 | 2009-4-21 11:49 | 只看该作者

即时输出啊,楼上老师介绍下思路啊

使用特权

评论回复
6
红心j| | 2009-4-21 12:02 | 只看该作者

如果是倒过来的关系,10:6才可以

前半周期必须是延后结束才行

使用特权

评论回复
7
2001myp|  楼主 | 2009-4-21 13:00 | 只看该作者

呵呵,那现在怎么办

即时延后一个周期也没问题啊,反正毫秒级的,改怎么办呢

使用特权

评论回复
8
红心j| | 2009-4-21 13:48 | 只看该作者

至少延时一个可能的最大周期时间

两个定时器,一个用来记录输入信号高/低电平的时间,并计算出输出高低电平的时间所需装载的时间常数,排队存入记录指针指向的RAM;一个记录控制输出信号高/低电平的时间,排队取出输出指针指向的RAM。

使用特权

评论回复
9
2001myp|  楼主 | 2009-4-21 14:11 | 只看该作者

下面程序好像不准确,高手指教

#include <REG51.H>    
#define uchar unsigned char
#define uint unsigned int
uint cnt=0;ls=0;
uchar bitflag=0;            
/****************************/
void initial(void)        
{P0=0x00;
bitflag=0;
EX0=1;                    
IT0=1;                    
TMOD=0x11;            
TH0=0xef;            
TL0=0xef;            
ET0=1;                
TR0=1;
TH1=0xf0;                
TL1=0xf0;
ET1=1;
TR1=1;        
EA=1;                    
}
/*************************************************/    
void main(void)            
{    
    initial();
           for(;;)                                
      {   if(bitflag==1) 
        {ls=cnt;cnt=0;bitflag=0;}

         
          }                
}    
/******************************************/
void time0(void) interrupt 1                             
          {TH0=0xef;            
TL0=0xef;
       cnt++;
     
}
/******************************************/
  void time1(void) interrupt 3         
{
  TH1=-((ls*9)/256);                
  TL1=-((ls*9)%256);   
P0=~P0;
 }  
/************************************************/
void extern_int0(void) interrupt 0 using 0    
{                                
bitflag=1;
}

使用特权

评论回复
10
2001myp|  楼主 | 2009-4-22 13:15 | 只看该作者

上面程序输出比例好像不准确

上面程序输出比例不能准确把握,比如频率20的时候,比例1.2,但频率60的时候就变成1.4,另外频率高到80的时候,频率就开始变化,时快时慢,请高手指教

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

59

主题

210

帖子

0

粉丝