基于單片機(jī)的簡易數(shù)字頻率計(jì),想知道原理圖是怎樣的,萌新求大佬指教
如下要求
1.頻率計(jì)的測頻范圍為1Hz~10KHz,被測量的信號(hào)為TTL邏輯的標(biāo)準(zhǔn)方波信號(hào); 2.為提高測量精度,采用計(jì)數(shù)法(≥1000Hz)和測周法(<1000Hz)相結(jié)合的方法進(jìn)行測量; 3. 顯示器采用6位七段數(shù)碼管,顯示器的無效零應(yīng)消隱。信號(hào)≥1000Hz時(shí)不顯示小數(shù)點(diǎn),信號(hào)<1000Hz時(shí)顯示小數(shù),小數(shù)點(diǎn)后取兩位。 下面為程序,采用靜態(tài)顯示 。P2口用來選擇數(shù)碼管相應(yīng)位,p0口輸出顯示 。信號(hào)輸入為p3.4. 程序。。
A1 EQU 40H ;現(xiàn)場數(shù)據(jù)低位 A2 EQU 41H ;現(xiàn)場數(shù)據(jù)高位 DBUF EQU 30H ;顯示緩沖區(qū) FL EQU 50H ;頻率值低位 FM EQU 51H ;頻率值中位 FH EQU 52H ;頻率值高位 CLK BIT P1. 6 ;164的時(shí)鐘信號(hào) FRE BIT P1.7 ;164的數(shù)據(jù)信號(hào) INPUT BIT P3.4 ;頻率輸入端 ;除法中用到的標(biāo)志位 FLAG BIT 00H ;被除數(shù)單元,商也放在這里 BCSL EQU 3CH BCSM EQU 3DH BCSH EQU 3EH ;除數(shù)單元 CSL EQU 42H CSM EQU 43H CSH EQU 44H ;余數(shù)單元 YSL EQU 3FH YSM EQU 40H YSH EQU 41H ;除法運(yùn)算中的暫存單元 BUF1 EQU 45H BUF2 EQU 46H BUF3 EQU 47H ;除法中的計(jì)算次數(shù) 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 ;計(jì)數(shù)法初測 LCALL COMPARE ;測量結(jié)果比較 JB PSW.5,NEXT1 ;<1000轉(zhuǎn)用測周法 LCALL DECI ;頻率轉(zhuǎn)為十進(jìn)制 LCALL DISAPP ;分離顯碼和消隱 LCALL DISPLAYM ;顯示 SJMP NEXT2 ;循環(huán) NEXT1: CLR PSW.5 ;清空標(biāo)志位 LCALL CEZHOU ;用測周法重測 LCALL MENDT ;計(jì)算頻率轉(zhuǎn)10進(jìn)制 LCALL DISAPP ;分離顯碼和消隱 LCALL DISPLAYT ;顯示 NEXT2:LCALL DY50MS ;延時(shí) 50MS SJMP LOOP2; JISHU: MOV TMOD,#15H ;T1定時(shí)1S,T0計(jì)數(shù) MOV TH1,#3CH MOV TL1,#0B0H MOV TH0,#00H MOV TL0,#00H SETB TR0 SETB TR1 NEXTT2:CJNE R2,#14H,$ ;等待一秒計(jì)時(shí)結(jié)束 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 ; 定時(shí)50ms RETI ;T0中計(jì)數(shù)值與3E8H比較大小,若大于或等于3E8H(1000) ;則用高頻計(jì)數(shù)法,且置標(biāo)志位為0;否則用低頻測周法,且置標(biāo)志位為1 COMPARE: MOV A,A2 CJNE A,#03H,NEXTC3 MOV A,A1 CJNE A,#0E8H,NEXTC5 NEXTC3:JC NEXTC1 ;低頻計(jì)數(shù)法不可用 SJMP NEXTC4 CLR C NEXTC5:JNC NEXTC4 ;低頻計(jì)數(shù)法不可用 NEXTC1:SETB PSW.5 SJMP BACKC NEXTC4:CLR PSW.5 BACKC:RET ;入口參數(shù) A1&2 出口參數(shù)FL&2&3 DECI: MOV R6,A2 ;高位 MOV R7,A1 ;低位 LCALL H_BCD ;轉(zhuǎn)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 ;分離顯碼結(jié)束 MOV R7,#03H MOV R0,#DBUF MOV A,R0 ADD A,#05H MOV R0,A ;R0 指向顯示緩沖區(qū)最高位 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 ;時(shí)間低位 MOV A2,TH0 ;時(shí)間高位 RET ;入口參數(shù)r3A2A1&出口參數(shù)FL23 MENDT: MOV BCSL,#40H MOV BCSM,#42H MOV BCSH,#0FH MOV CSL,A1 MOV CSM,A2 MOV CSH,R3 LCALL DIV33 ;計(jì)算頻率 MOV R6,BCSM MOV R7,BCSL LCALL H_BCD MOV FM,R5 ;低位 MOV FH,R4 ; 把商的整數(shù)部分轉(zhuǎn)換為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 ;頻率的小數(shù)部分 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 ;如果是由低位數(shù)的第三位加小數(shù)點(diǎn) 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 ;轉(zhuǎn)換雙字節(jié)十六進(jìn)制整數(shù) HB3:MOV A,R7 ;從高端移出待轉(zhuǎn)換數(shù)的一位到CY中 RLC A MOV R7,A MOV A,R6 RLC A MOV R6,A MOV A,R5 ;BCD碼帶進(jìn)位自身相加,相當(dāng)于乘2 ADDC A,R5 DA A ;十進(jìn)制調(diào)整 MOV R5,A MOV A,R4 ADDC A,R4 DA A MOV R4,A MOV A,R3 ADDC A,R3 MOV R3,A ;雙字節(jié)十六進(jìn)制數(shù)的萬位數(shù)不超過6,不用調(diào)整 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
|