找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 2231|回复: 4
打印 上一主题 下一主题
收起左侧

基于单片机简易数字频率计,可不可以根据程序推测原理图?

[复制链接]
跳转到指定楼层
楼主
ID:369804 发表于 2018-7-13 09:02 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
基于单片机的简易数字频率计,想知道原理图是怎样的,萌新求大佬指教
如下要求
1.频率计的测频范围为1Hz~10KHz,被测量的信号为TTL逻辑的标准方波信号;
2.为提高测量精度,采用计数法(≥1000Hz)和测周法(<1000Hz)相结合的方法进行测量;
3. 显示器采用6位七段数码管,显示器的无效零应消隐。信号≥1000Hz时不显示小数点,信号<1000Hz时显示小数,小数点后取两位。
下面为程序,采用静态显示 。P2口用来选择数码管相应位,p0口输出显示 。信号输入为p3.4.
程序。。
A1 EQU  40H        ;现场数据低位
A2 EQU  41H        ;现场数据高位
DBUF EQU  30H      ;显示缓冲区
FL EQU  50H        ;频率值低位
FM EQU  51H        ;频率值中位
FH EQU  52H        ;频率值高位
CLK BIT  P1. 6     ;164的时钟信号
FRE BIT  P1.7      ;164的数据信号
INPUT BIT  P3.4     ;频率输入端
;除法中用到的标志位
FLAG BIT 00H
;被除数单元,商也放在这里
BCSL  EQU  3CH
BCSM  EQU  3DH
BCSH  EQU  3EH
;除数单元
CSL  EQU 42H
CSM  EQU 43H
CSH  EQU 44H
;余数单元
YSL  EQU 3FH
YSM  EQU  40H
YSH  EQU 41H
;除法运算中的暂存单元
BUF1  EQU  45H
BUF2  EQU  46H
BUF3  EQU  47H
;除法中的计算次数
TIMES1 EQU 48H
CALC_TIMES EQU 49H
      ORG   0000H
      LJMP   MAIN
      ORG   000BH
      LJMP T0_INT
      ORG   001BH
      LJMP T1_INT
      ORG   0100H
MAIN:
    MOV  A1, #00H
    MOV  A2, #00H
    MOV  R2, #00H
    MOV  R3, #00H
    CLR  PSW.5
    MOV  R0, #DBUF
    MOV R7,#06H
LOOP1:
    MOV @R0,#00H
    INC R0
    DJNZ R7,LOOP1
    LCALL DISPLAYM
    SETB EA
    SETB ET0
    SETB ET1       ;中断初始化
LOOP2:
    LCALL JISHU   ;计数法初测
    LCALL COMPARE  ;测量结果比较
    JB PSW.5,NEXT1 ;<1000转用测周法
    LCALL DECI      ;频率转为十进制   
    LCALL DISAPP    ;分离显码和消隐
    LCALL DISPLAYM    ;显示
    SJMP NEXT2        ;循环
NEXT1:
   CLR PSW.5         ;清空标志位
   LCALL CEZHOU    ;用测周法重测
   LCALL MENDT  ;计算频率转10进制
   LCALL DISAPP     ;分离显码和消隐
    LCALL DISPLAYT    ;显示
NEXT2:LCALL DY50MS     ;延时 50MS
     SJMP LOOP2;
JISHU:
     MOV TMOD,#15H    ;T1定时1ST0计数
     MOV TH1,#3CH
     MOV TL1,#0B0H
     MOV TH0,#00H
     MOV TL0,#00H
     SETB TR0
     SETB TR1
     NEXTT2:CJNE R2,#14H,$   ;等待一秒计时结束
       MOV R2,#00H
     MOV R3,#00H
     CLR TR0
     CLR TR1
     MOV A1,TL0         ;存频率低位
     MOV A2,TH0         ;存频率高位
     RET
T0_INT:INC R3
    MOV TH0,#00H
    MOV TL0,#00H
    RETI
T1_INT: INC R2
    MOV TH1,#3CH
    MOV TL1,#0B0H ;  定时50ms
    RETI
;T0中计数值与3E8H比较大小,若大于或等于3E8H1000
;则用高频计数法,且置标志位为0;否则用低频测周法,且置标志位为1
COMPARE:
       MOV A,A2
       CJNE A,#03H,NEXTC3
       MOV  A,A1
       CJNE A,#0E8H,NEXTC5
NEXTC3:JC NEXTC1    ;低频计数法不可用
       SJMP  NEXTC4
       CLR C
NEXTC5:JNC NEXTC4   ;低频计数法不可用
NEXTC1:SETB PSW.5
       SJMP BACKC
NEXTC4:CLR PSW.5
BACKC:RET
;入口参数 A1&2 出口参数FL&2&3
DECI:
     MOV R6,A2          ;高位
     MOV R7,A1          ;低位
     LCALL H_BCD        ;BCD
     MOV FH,R3         ;高位
     MOV FM,R4
     MOV FL,R5         ;低位
     RET
;分离显码&消隐
DISAPP:
      MOV R7,#06H
      MOV R0,#DBUF
      MOV R1,#FL
LOOPD1:MOV A,@R1
      PUSH ACC
      ANL A,#0FH
      MOV @R0,A
      INC R0
      POP ACC
      SWAP A
      ANL  A,#0FH
      MOV @R0,A
      INC R1
      INC R0
      DJNZ R7,LOOPD1  ;分离显码结束
      MOV R7,#03H
      MOV R0,#DBUF
      MOV A,R0
      ADD A,#05H
      MOV R0,A   ;R0 指向显示缓冲区最高位
      LOOPD2:
      CJNE @R0,#00H,BACKD
      MOV @R0,#10H
      DEC R0
      DJNZ R7,LOOPD2               
      BACKD: RET
DISPLAYM:
        MOV R0,#DBUF
        MOV R7,#06H
        LOOPM2:
        MOV A,@R0
        MOV DPTR,#TAB
        MOVC A,@A+DPTR
        INC R0
        MOV R6,#08H
        LOOP3:
              RRC A
              JC LP1
              CLR CLK
              CLR FRE
              SETB CLK
              SJMP LP2
LP1:
              CLR CLK
              SETB FRE
              SETB CLK
LP2:    DJNZ R6,LOOP3
             DJNZ R7,LOOPM2
              RET
TAB:DB 42H,0F6H,13H,92H
DB 0A6H,8AH,0AH,0F2H
DB 02H,82H,22H,0EH
DB 4BH,16H,03H,2BH,0FFH
CEZHOU:
     MOV R3,#00H
     MOV TMOD,#01H
     MOV TH0,#00H
     MOV TL0,#00H
     JNB INPUT,$
     JB INPUT,$
     SETB TR0
     JNB INPUT,$
     JB INPUT,$
     CLR TR0
     MOV A1,TL0        ;时间低位
     MOV A2,TH0        ;时间高位
     RET
;入口参数r3A2A1&出口参数FL23
MENDT:                          
        MOV BCSL,#40H
        MOV BCSM,#42H
        MOV BCSH,#0FH
        MOV CSL,A1
        MOV CSM,A2
        MOV CSH,R3
        LCALL DIV33      ;计算频率
        MOV R6,BCSM
        MOV R7,BCSL
        LCALL H_BCD
        MOV FM,R5        ;低位
        MOV FH,R4         ; 把商的整数部分转换为BCD
                             ;并存入FMFH
        MOV R1,#YSL
        MOV R7,#03H
        ACALL LOOP10
        MOV BCSL,YSL
        MOV BCSM,YSM
        MOV BCSH,YSH
        LCALL DIV33
        MOV A,BCSL
        SWAP A
        MOV FL,A    ;频率的小数部分
        MOV R1,#YSL
        MOV R7,#03H
        ACALL LOOP10
        MOV BCSL,YSL
        MOV BCSM,YSM
        MOV BCSH,YSH
        LCALL DIV33
        MOV A,BCSL
        ORL FL,A
        RE
DISPLAYT:
       MOV R0,#DBUF
       MOV R7,#06H
LOOP12:
       MOV A,@R0
       CJNE R0,#32H,NEXTDI1 ;如果是由低位数的第三位加小数点
       MOV DPTR,#TAB1
       MOVC A,@A+DPTR
       SJMP NEXTDI2
NEXTDI1:
       MOV DPTR,#TAB
       MOVC A,@A+DPTR
NEXTDI2:
       INC R0
       MOV R6,#08H
LOOP13:
              RRC A
              JC LP3
             CLR CLK
              CLR FRE
              SETB CLK
              SJMP NEXT11
LP3:
                  CLR CLK
                  SETB FRE
                  SETB CLK
NEXT11:DJNZ R6,LOOP13
      DJNZ R7,LOOP12
      RET
TAB1:DB 40H,0F4H,11H,90H
    DB 0A4H,88H,08H,0F0H
    DB 00H,80H,20H,0CH
    DB 49H,14H,01H,29H
H_BCD:              ;入口地址:R6R7  出口地址:R3R4R5
HB2:CLR A         ;BCD码初始化
     MOV R3,A
     MOV R4,A
     MOV R5,A
     MOV R2,#10H   ;转换双字节十六进制整数
HB3:MOV A,R7      ;从高端移出待转换数的一位到CY
      RLC A
     MOV R7,A
     MOV A,R6
     RLC A
     MOV R6,A
     MOV A,R5     ;BCD码带进位自身相加,相当于乘2
     ADDC A,R5
     DA A         ;十进制调整
     MOV R5,A
     MOV A,R4
     ADDC A,R4
     DA A
     MOV R4,A
     MOV A,R3
     ADDC A,R3
      MOV R3,A    ;双字节十六进制数的万位数不超过6,不用调整
     DJNZ R2,HB3  ;处理完16bit
     RET
DIV33:
     MOV     TIMES1,#06H
     MOV     A,CSL
     ORL     A,CSM
     ORL     A,CSH
     JNZ     DIVD0
     cpl     p1.1
     SETB    OV
     RET
DIVD0: MOV     YSL,#00H
      MOV     YSM,#00H
      MOV     YSH,#00H
      MOV     B,#24
      MOV     R0,#BCSL
      MOV     TIMES1,#06H
DIVD1: CLR     C
LPDIV33:
       MOV     A,@R0
       RLC     A
       MOV     @R0,A
       INC     R0
       DJNZ    TIMES1,LPDIV33
       MOV     R0,#BCSL
       MOV     TIMES1,#06H
       MOV     FLAG,C
       CLR     C
       MOV     A,YSL
       SUBB    A,CSL
       MOV     BUF1,A
       MOV     A,YSM
       SUBB    A,CSM
       MOV     BUF2,A
       MOV     A,YSH
        SUBB   A,CSH
       MOV     BUF3,A
       ANL     C,/FLAG
       JC      DIVD2
       MOV     YSL,BUF1
       MOV    YSM,BUF2
       MOV     YSH,BUF3
       INC     BCSL
DIVD2: DJNZ    B,DIVD1
       CLR     OV
       RET
LOOP10:
       CLR     C
       MOV     R2,#00H
LP10:  MOV     A,@R1
       MOV     B,#0AH
       MUL     AB
       ADDC    A,R2
       MOV     @R1,A
       MOV     R2,B
       INC     R1
       DJNZ    R7,LP10
       MOV     @R1,B
       RET
DY50MS:
       MOV R6,#32H
LOOPDY1:MOV R0,#0FAH
LOOPDY2:MOV R7,#70H
       DJNZ R0,LOOPDY2
       DJNZ R6,LOOPDY1
       RET
       END



分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:363028 发表于 2018-7-13 11:12 | 只看该作者
不可以啊,程序能看出功能
回复

使用道具 举报

板凳
ID:97554 发表于 2018-7-13 15:56 | 只看该作者
这个应该可以画出来,P2位,P0段,P3.4输入,参考其他的51频率计图纸,应该不难画出来。
回复

使用道具 举报

地板
ID:369804 发表于 2018-7-15 16:00 | 只看该作者
杨雪飞 发表于 2018-7-13 15:56
这个应该可以画出来,P2位,P0段,P3.4输入,参考其他的51频率计图纸,应该不难画出来。

我想请问那么如果用上164应该怎么使用呢
回复

使用道具 举报

5#
ID:345430 发表于 2018-12-28 19:36 | 只看该作者
不可以啊,得有仿真图啊
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表