标题: 基于单片机简易数字频率计,可不可以根据程序推测原理图? [打印本页]
作者: 7799维生素 时间: 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定时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
作者: djk天津,回家, 时间: 2018-7-13 11:12
不可以啊,程序能看出功能
作者: 杨雪飞 时间: 2018-7-13 15:56
这个应该可以画出来,P2位,P0段,P3.4输入,参考其他的51频率计图纸,应该不难画出来。
作者: 7799维生素 时间: 2018-7-15 16:00
我想请问那么如果用上164应该怎么使用呢
作者: ..........54321 时间: 2018-12-28 19:36
不可以啊,得有仿真图啊
欢迎光临 (http://www.51hei.com/bbs/) |
Powered by Discuz! X3.1 |