导航: 老古网老古论坛XMOS公共讨论区XMOS开源项目区单片机程序设计嵌入式系统广告区域
→求助:频率计程序[kexiner]

 *第47923篇: 求助:频率计程序

  
楼 主:kexiner 2007年4月15日16:23
 求助:频率计程序
用51单片机对频率计数;由串口输出;精度达到0.1。
这个程序该怎么做啊?还请高手指点一二啊!
  
2楼:swimfish 2007年4月16日09:11
 频率范围是多少
你测量的频率范围决定方法,频率低可以使用定时器计算周期的方法,高的话就对信号进行计数,太高就达不到你要求的精度了
  
3楼:kexiner 2007年4月16日11:23
 这是我的程序
这是我的程序,请看一下对不对?谢谢!
我用LCA51调试了一下,没有错误,但是没有接仿真机

          ORG    0000H
          AJMP   MAIN
          ORG    0003H
          AJMP   T0INT
;-------------------------------------主程序----------------------------------------
          ORG    0100H
 MAIN:    MOV    SP,#35H            ;设置堆栈
          MOV    TMOD,#51H          ;T0计数状态、方式1,T1定时状态、方式1   
          MOV    TL0,#00H           ;T0计数初值设定
          MOV    TH0,#00H
          MOV    TL1,#0B0H          ;T1定时50ms初值设定
          MOV    TH1,#3CH           ;fosc=12MHZ(最小定时时间为1μs)
          MOV    R3,#200            ;设置软件计数器
          ORL    TCON,#01010000B    ;同时启动定时器T0和T1      
          SETB   EA 
          SETB   ET1
           
 LOOP:    LCALL  MAIN
          AJMP   LOOP
          
  
     
;---------------------------T0中断服务子程序---------------------------
 T0INT:   DJNZ    R3,EXIT          ;1s时间未到则中断返回,继续定时
          ANL     TCON,#10001111B  ;1s定时到,则同时关闭定时器1和定时器0
          MOV     TL1,#0B0H          ;T1定时50ms初值设定
          MOV     TH1,#3CH           ;fosc=12MHZ(最小定时时间为1μs)
          MOV     R3,#200            ;设置软件计数器
          ORL     TCON,#01010000B    ;同时启动定时器T0和T1
          RETI
          
 EXIT:    MOV     TH1,#0B0H          ;1s未到,重设T1的50ms定时初值
          MOV     TL1,#3CH
          RETI
          
          END
 
 
 
 

  
4楼:swimfish 2007年4月16日13:33
 可以这样的
1:要赠加T1的溢出中断,对T1的溢出进行计数
2:在T0中断程序里要对T1清0,R3的值应该为20,
3:因为进入中断是需要时间的,而且每次需要的时间实际上并不一样,所以你的1S定时
    方法并不准确,可以使用让定时器从0到65536计数15次,再计数16960,这样准确度
    会比较高
  
5楼:kexiner 2007年4月16日20:53
 我把程序改了
我把程序作了一下修改,下面的应该是正确的了吧?这只是我毕业设计中要用到的一小段程序,还要涉及到其它的一些东西,所以程序并不是很完善。


;频率测量程序

          ORG    0000H
          AJMP   MAIN
          ORG    000BH          
          AJMP   T0INT
;------------------------------主程序------------------------------------
          ORG    0100H
 MAIN:    MOV    SP,#35H            ;设置堆栈
          MOV    TMOD,#51H          ;T0计数状态、方式1,T1定时状态、方式1   
          MOV    TL0,#00H           ;T0计数初值设定
          MOV    TH0,#00H
          MOV    TL1,#0B0H          ;T1定时50ms初值设定
          MOV    TH1,#3CH           ;fosc=12MHZ(最小定时时间为1μs)
          MOV    R3,#20             ;设置软件计数器
          ORL    TCON,#01010000B    ;同时启动定时器T0和T1      
          SETB   EA 
          SETB   ET1
           
          
  
     
;---------------------------T0中断服务子程序---------------------------
 T0INT:   DJNZ    R3,EXIT            ;1s时间未到则中断返回,继续定时
          ANL     TCON,#10001111B    ;1s定时到,则同时关闭定时器1和计数器0
          MOV     R0,TL1             ;将计数值的低八位存入R0
          MOV     R1,TH1             ;将计数值的高八位存入R1  
          MOV     TL1,#0B0H          ;重装初值
          MOV     TH1,#3CH           
          MOV     R3,#20             ;重新设置软件计数器
          ORL     TCON,#01010000B    ;同时启动定时器T0和T1
          AJMP   LOOP          
 EXIT:    MOV     TH1,#0B0H          ;1s未到,重设T1的50ms定时初值
          MOV     TL1,#3CH
 LOOP:        RETI
          
          END
 
 
 


>>>>>>对该主题发表你的看法

本主题贴数5,分页: [第1页]


[上一篇主题]:求购

[下一篇主题]:哪位大师有ADC芯片5G14433的资料呀?