基于單片機的簡易數字頻率計,想知道原理圖是怎樣的,萌新求大佬指教
如下要求
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
|