基于单片机的简易数字频率计,想知道原理图是怎样的,萌新求大佬指教
如下要求
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定时1S,T0计数 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比较大小,若大于或等于3E8H(1000) ;则用高频计数法,且置标志位为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码 ;并存入FM、FH 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
|