標題:
可不可以根據(jù)這個單片機程序推測出電路原理圖?方法是什么?
[打印本頁]
作者:
起而而已其他
時間:
2018-7-12 17:10
標題:
可不可以根據(jù)這個單片機程序推測出電路原理圖?方法是什么?
基于單片機的簡易數(shù)字頻率計
想知道主電路圖是怎么樣的
下面是單片機匯編源程序。。
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的時鐘信號
FRE BIT P1.7 ;164的數(shù)據(jù)信號
INPUT BIT P3.4 ;頻率輸入端
;除法中用到的標志位
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
;除法運算中的暫存單元
BUF1 EQU 45H
BUF2 EQU 46H
BUF3 EQU 47H
;除法中的計算次數(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 ;計數(shù)法初測
LCALL COMPARE ;測量結果比較
JB PSW.5,NEXT1 ;<1000轉用測周法
LCALL DECI ;頻率轉為十進制
LCALL DISAPP ;分離顯碼和消隱
LCALL DISPLAYM ;顯示
SJMP NEXT2 ;循環(huán)
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計數(shù)
MOV TH1,#3CH
MOV TL1,#0B0H
MOV TH0,#00H
MOV TL0,#00H
SETB TR0
SETB TR1
NEXTT2:CJNE R2,#14H,[ DISCUZ_CODE_1 ]nbsp; ;等待一秒計時結束
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中計數(shù)值與3E8H比較大小,若大于或等于3E8H(1000)
;則用高頻計數(shù)法,且置標志位為0;否則用低頻測周法,且置標志位為1
COMPARE:
MOV A,A2
CJNE A,#03H,NEXTC3
MOV A,A1
CJNE A,#0E8H,NEXTC5
NEXTC3:JC NEXTC1 ;低頻計數(shù)法不可用
SJMP NEXTC4
CLR C
NEXTC5:JNC NEXTC4 ;低頻計數(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 ;轉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 指向顯示緩沖區(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 ;時間低位
MOV A2,TH0 ;時間高位
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 ;計算頻率
MOV R6,BCSM
MOV R7,BCSL
LCALL H_BCD
MOV FM,R5 ;低位
MOV FH,R4 ; 把商的整數(shù)部分轉換為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ù)點
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 ;轉換雙字節(jié)十六進制整數(shù)
HB3:MOV A,R7 ;從高端移出待轉換數(shù)的一位到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 ;雙字節(jié)十六進制數(shù)的萬位數(shù)不超過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
復制代碼
作者:
yzwzfyz
時間:
2018-7-12 20:09
可以但不是唯一的。
歡迎光臨 (http://www.torrancerestoration.com/bbs/)
Powered by Discuz! X3.1