?? 課程設計(頻率計).asm
字號:
OVERTIME EQU 20
TIMECON DATA 2FH ;1S定時
;---------------------------
LED1 DATA 30H ;顯示緩沖區
LED2 DATA 31H
LED3 DATA 32H
LED4 DATA 33H
LED5 DATA 34H
LED6 DATA 35H
;-----------------------------
CLEART DATA 36H ;清零時間
TOVER1L DATA 2AH
TOVER1M DATA 2BH
TOVER1H DATA 2CH
HF_HC DATA 37H ;高頻脈沖數存放單元
HF_MC DATA 38H
HF_LC DATA 39H
LC_HT DATA 3AH ;低頻脈總時間存放單元
LC_MT DATA 3BH
LC_LT DATA 3CH
L_C_NO DATA 3DH ;低頻脈沖個數
H_C_NO DATA 3EH
;------------------------
WEIXUAN DATA 3FH ;數碼管位選擇
BINADDR EQU 50H ;待轉換二進制存放地址指針
BCDADDR EQU 60H ;轉換后的BCD碼存放地址指針
BYTES EQU 4 ;待轉換二進制字節數
HIGHF BIT 20H ;高頻標志位
LOWF BIT 21H ;低頻標志位
DISP BIT 23H ;顯示標志位
FUWEI BIT 24H
SECOND BIT 25H
DLOWF BIT 26H ;等待1S到來后關中斷標志位
TOVER BIT 10H
LL BIT 12H ; 已啟動低頻標志
IPH DATA 0B7H
ORG 0000H
LJMP MAIN
ORG 0003H ;INT0中斷
LJMP D_COU
ORG 000BH
LJMP T0_OUT ;T0
ORG 0013H
LJMP START
ORG 001BH ;T1
LJMP C_OUT
ORG 002BH ;T2
LJMP CTC2
ORG 0030H
;--------------------------------
MAIN:
CLR A
MOV R0,#01H
QINGLING:
MOV @R0,A
INC R0
CJNE R0,#00H,QINGLING
MOV SP,#7FH
MOV P1,#0FFH
CLR P3.1
SETB P3.6 ;打開高頻開關
CLR F0
MOV TIMECON,#OVERTIME
MOV CLEART,#250
MOV TMOD,#01010001B
MOV TL0,#48H
MOV TH0,#0F4H
MOV TH1,#00H
MOV TL1,#00H
SETB IT0 ;下降沿觸發
SETB IT1
MOV TH2,#3CH
MOV TL2,#0B0H
MOV RCAP2H,#3CH
MOV RCAP2L,#0B0H
SETB TR0
SETB ET0
SETB ET1
SETB ET2
MOV IPH,#00101001B
MOV IP, #00101001B
CLR IE1
SETB EX1
SETB EA
HERE:
JB FUWEI,MAIN
JB HIGHF,GAO ;有高標志位,轉高頻處理
JB DISP,DISPLAY ;有顯示標志位,轉顯示處理
there:
JB LOWF,DI ;有低標志位,轉低頻處理
SJMP HERE
DISPLAY:
CLR DISP
LCALL LED
SJMP there
GAO:
CLR SECOND
CLR DLOWF
CLR FUWEI
CLR LOWF
LCALL SUM_0 ;清不相關的位標志
MOV 50H,HF_LC
MOV 51H,HF_MC
MOV 52H,HF_HC
LCALL F_BCD
LCALL HDP ;處理要顯示的內容
SETB P3.6 ;打開高頻開關
CLR IE1
SETB EX1
CLR HIGHF
LJMP HERE
DI:
JNB DLOWF,DD ;1s沒有到就繼續中斷
SJMP HERE
DD:
LCALL SUM_0 ;運算區清零
MOV 49H,#0E8H
MOV 48H,#03H ;被乘數1000
MOV 47H,#00H
MOV 4CH,L_C_NO
MOV 4BH,H_C_NO
MOV 4AH,#00H
LCALL MUL3X3
MOV 49H,#80H
MOV 48H,#96H
MOV 47H,#98H ;被乘數10000000
MOV 4CH,45H
MOV 4BH,44H
MOV 4AH,43H ;剛得到的乘數
MOV 43H,#00H
MOV 44H,#00H
MOV 45H,#00H
LCALL MUL3X3
MOV 48H,45H
MOV 47H,44H
MOV 46H,43H
MOV 45H,42H
MOV 44H,41H
MOV 43H,40H ;6字節被除數
MOV 4BH,LC_LT
MOV 4AH,LC_MT
MOV 49H,LC_HT ;實際時間,除數
LCALL DIV6_3
MOV 50H,48H
MOV 51H,47H
MOV 52H,46H
MOV 53H,45H
LCALL SUM_0
LCALL F_BCD
LCALL LDP
CLR LOWF
CLR LL
MOV TH1,#00H
MOV TL1,#00H
MOV TH2,#3CH
MOV TL2,#0B0H
CLR P3.0 ;分頻器有效
CLR P3.1 ;關閉低頻
ORL TMOD,#01010000B ;T1切回計數方式
SETB P3.6 ;打開高頻
CLR IE1 ;計數開始,進入下一輪
SETB EX1
SETB P3.4
LJMP HERE
;---------------------------------
CTC2:
DJNZ TIMECON,JK
SETB SECOND ;1S到標志
JB LOWF,JKK ;正在處理低頻部分,跳過
CLR P3.6 ;關高頻脈沖開關
CLR TR1
CLR TR2
PUSH PSW
PUSH ACC
MOV A,TH1
MOV HF_HC,A
MOV A,TL1
MOV HF_MC,A
MOV A,P1
MOV HF_LC,A
MOV TH1,#00H
MOV TL1,#00H
SETB P3.0 ; 清分頻器
MOV A,HF_HC
JZ ZHELI
SJMP GAOPIN
ZHELI:
MOV A,HF_MC
CLR C
CJNE A,#27H,NEXT1 ;小于9900Hz的為低頻
NEXT1:
JC NEXT
SJMP GAOPIN
NEXT:
SJMP DIPIN
GAOPIN:
SETB HIGHF
CLR SECOND
CLR LOWF
SJMP RET3
DIPIN:
ANL TMOD,#10111111B ;T1計數內部脈沖
SETB P3.1 ;打開低頻選通開關
CLR FUWEI
CLR HIGHF
SETB LOWF
SETB DLOWF ;標志1S后應關中斷標志位
CLR SECOND
CLR IE0
SETB EX0
SJMP RET3
RET3:
POP ACC
POP PSW
JKK:
MOV TIMECON,#OVERTIME
JK:
CLR TF2
RETI
;-----------------------
T0_OUT:
MOV TL0,#48H
MOV TH0,#0F4H
PUSH PSW
PUSH ACC
MOV C,HIGHF
ORL C,TR1
ORL C,TR2
JC MEICUO ;若沒有信號輸入,則置LED為零
DJNZ CLEART,MEICUO
CLR A
MOV LED1,A
MOV LED2,A
MOV LED3,A
MOV LED4,A
MOV LED5,A
MOV LED6,#10
MOV CLEART,#250
MEICUO:
POP ACC
POP PSW
SETB DISP
RETI
;----------------------------------
C_OUT:
PUSH PSW
PUSH ACC
MOV A,LC_HT
ADD A,#01H
MOV LC_HT,A
CJNE A,#2DH,WRONG ;開啟低頻單元3s后無信號輸入,作錯誤處理
WRONG:
JC KK
SETB FUWEI
KK:
POP ACC
POP PSW
RETI
;---------------------------
D_COU:
JB LL,TIAO
SETB TR1
SETB TR2
SETB LL
TIAO:
JNB SECOND,JIXU
CLR TR1
CLR TR2
CLR EX0
CLR P3.1 ;關閉低頻脈沖開關
CLR DLOWF ;清除1S到后并且INT0 中斷響應后的標志,以便中斷返回后
;---------------------能處理數
CLR SECOND
PUSH ACC
PUSH PSW
MOV A,TL1
MOV LC_LT,A
MOV A,TH1
MOV LC_MT,A
CLR A
MOV TH1,A
MOV TL1,A
SJMP FANHUI
JIXU: ;脈沖數加一
PUSH ACC
PUSH PSW
CLR A
MOV A,L_C_NO
ADD A,#01H
MOV L_C_NO,A
CLR A
ADDC A,H_C_NO
MOV H_C_NO,A
FANHUI:
JB TOVER,CT01
MOV TOVER1L,TL1
MOV TOVER1M,TH1
MOV TOVER1H,LC_HT
SETB TOVER
SJMP FANHUI1
CT01:
CLR TOVER
MOV A,LC_HT
CJNE A,TOVER1H,FANHUI1
MOV A,TH1
CJNE A,TOVER1M,FANHUI1
MOV A,TL1
SUBB A,TOVER1L
CJNE A,#100,CT02
CT02:
JNC FANHUI1
;CLR TR1
;CLR TR2
CLR EX0
SETB FUWEI ;低頻單元如出現頻率大于10K的信號,作出錯處理
;CLR P3.1
;CLR DLOWF
;SETB P3.6
;SETB P3.4
;CLR IE1
;SETB EX1
FANHUI1:
POP PSW
POP ACC
RETI
START:
SETB P3.0 ;清分頻器
NOP
CLR P3.0 ;分頻器有效
SETB TR2
SETB TR1
CLR EX1
RETI
;--------------------------------------
LED:
MOV R0,#2FH
INC WEIXUAN
MOV A,WEIXUAN
CLR C
CJNE A,#7,D1
D1:
JC D2
MOV WEIXUAN,#00H
MOV R0,#2FH
SJMP LED
D2:
CLR C
MOV P2,#0FFH
MOV A,WEIXUAN
ADD A,R0
MOV R0,A
MOV A,@R0
MOV DPTR,#TABLE
MOVC A,@A+DPTR
MOV P0,A
MOV A,WEIXUAN
DEC A
MOV DPTR,#TAB
MOVC A,@A+DPTR
MOV P2,A
RET
;---------------------------------
F_BCD:
MOV R1,#BCDADDR
MOV R2,#BYTES
INC R2
CLR A
B0:
MOV @R1,A
INC R1
DJNZ R2,B0
MOV A,#BYTES
MOV B,#8
MUL AB
MOV R3,A
BB1:
MOV R0,#BINADDR
MOV R2,#BYTES
CLR C
B1:
MOV A,@R0
RLC A
MOV @R0,A
INC R0
DJNZ R2,B1
BB3:
MOV R2,#BYTES
INC R2
MOV R1,#BCDADDR
B3:
MOV A,@R1
ADDC A,@R1
DA A
MOV @R1,A
INC R1
DJNZ R2,B3
DJNZ R3,BB1
;----------------------壓縮的BCD碼放在60H-64H單元
MOV A,60H
ANL A,#0FH
MOV 40H,A
MOV A,60H
ANL A,#0F0H
SWAP A
MOV 41H,A
MOV A,61H
ANL A,#0FH
MOV 42H,A
MOV A,61H
ANL A,#0F0H
SWAP A
MOV 43H,A
MOV A,62H
ANL A,#0FH
MOV 44H,A
MOV A,62H
ANL A,#0F0H
SWAP A
MOV 45H,A
MOV A,63H
ANL A,#0FH
MOV 46H,A
MOV A,63H
ANL A,#0F0H
SWAP A
MOV 47H,A
;--------------拆分后的單個BCD碼由高到低放在49H-40H單元,因為要計算的數不會太大
;--------------故省去高二位
RET
;------------------------------------------
HDP: ;高頻顯示預處理
F107:
MOV A,47H
JZ F106
MOV LED1,#07H
MOV LED2,43H
MOV LED3,44H
MOV LED4,45H
MOV LED5,46H
MOV A,#10
ADD A,47H
MOV LED6,A
LJMP HERER
F106:
MOV A,46H
JZ F105
MOV LED1,#06H
MOV LED2,42H
MOV LED3,43H
MOV LED4,44H
MOV LED5,45H
MOV A,#10
ADD A,46H
MOV LED6,A
LJMP HERER
F105:
MOV A,45H
JZ F104
MOV LED1,#05H
MOV LED2,40H
MOV LED2,41H
MOV LED3,42H
MOV LED4,43H
MOV LED5,44H
MOV A,#10
ADD A,45H
MOV LED6,A
LJMP HERER
F104:
MOV A,44H
JZ F103
MOV A,#10
ADD A,44H
MOV LED6,A
MOV LED5,43H
MOV LED4,42H
MOV LED3,41H
MOV LED2,40H
MOV LED1,#04H
LJMP HERER
F103:
MOV A,#10
ADD A,43H
MOV LED6,A
MOV LED5,42H
MOV LED4,41H
MOV LED3,40H
MOV LED2,#00H
MOV LED1,#3
HERER:
LCALL SUM_00
RET
;----------------------------
LDP: ;低頻顯示預處理
LF103:
MOV A,47H
JZ LF102
MOV LED1,#03H
MOV LED2,43H
MOV LED3,44H
MOV LED4,45H
MOV LED5,46H
MOV A,#10
ADD A,47H
MOV LED6,A
LJMP LHERER
LF102:
MOV A,46H
JZ LF101
MOV LED1,#02H
MOV LED2,42H
MOV LED3,43H
MOV LED4,44H
MOV LED5,45H
MOV A,#10
ADD A,46H
MOV LED6,A
LJMP LHERER
LF101:
MOV A,45H
JZ LF100
MOV LED1,#01H
MOV LED2,40H
MOV LED2,41H
MOV LED3,42H
MOV LED4,43H
MOV LED5,44H
MOV A,#10
ADD A,45H
MOV LED6,A
LJMP LHERER
LF100:
MOV A,#10
ADD A,44H
MOV LED6,A
MOV LED5,43H
MOV LED4,42H
MOV LED3,41H
MOV LED2,40H
MOV LED1,#00H
LJMP LHERER
LHERER:
LCALL SUM_00
RET
;---------------------------
MUL3X3: ;24位X24位,被乘數由高到低放在47H,48H,49H,乘數放在4AH,4BH,4CH,
;--------積放在40H,41H,42H,43H,44H,45H
;--------乘數低8位乘被乘數低8位
MOV A,4CH
MOV B,49H
MUL AB
MOV 45H,A
MOV 44H,B
;低8X次高8
MOV A,4CH
MOV B,48H
MUL AB
ADD A,44H
MOV 44H,A
CLR A
ADDC A,B
MOV 43H,A
CLR A
ADDC A,#0
MOV 42H,A
;低8X高8
MOV A,4CH
MOV B,47H
MUL AB
ADD A,43H
MOV 43H,A
MOV A,42H
ADDC A,B
MOV 42H,A
CLR A
ADDC A,#0
MOV 41H,A
;次高8X低8
MOV A,4BH
MOV B,49H
MUL AB
ADD A,44H
MOV 44H,A
MOV A,43H
ADDC A,B
MOV 43H,A
CLR A
ADDC A,42H
MOV 42H,A
CLR A
ADDC A,41H
MOV 41H,A
CLR A
ADDC A,#0
MOV 40H,A
;次高8X次高8
MOV A,4BH
MOV B,48H
MUL AB
ADD A,43H
MOV 43H,A
MOV A,42H
ADDC A,B
MOV 42H,A
CLR A
ADDC A,41H
MOV 41H,A
CLR A
ADDC A,40H
MOV 40H,A
;次高8X高8
MOV A,4BH
MOV B,47H
MUL AB
ADD A,42H
MOV 42H,A
MOV A,41H
ADDC A,B
MOV 41H,A
CLR A
ADDC A,40H
MOV 40H,A
;高8X低8
MOV A,4AH
MOV B,49H
MUL AB
ADD A,43H
MOV 43H,A
MOV A,42H
ADDC A,B
MOV 42H,A
CLR A
ADDC A,41H
MOV 41H,A
CLR A
ADDC A,40H
MOV 40H,A
;高8X次高8
MOV A,4AH
MOV B,48H
MUL AB
ADD A,42H
MOV 42H,A
MOV A,41H
ADDC A,B
MOV 41H,A
CLR A
ADDC A,40H
MOV 40H,A
;高8X高8
MOV A,4AH
MOV B,47H
MUL AB
ADD A,41H
MOV 41H,A
MOV A,40H
ADDC A,B
MOV 40H,A
RET
;------------------------
;除法運算,6字節數除以3字節數,被除數由高到低放在43H,44H,45H,46H,47H,48H
;除數由高到低放在49H,4AH,4BH,商放回43H到48H單元中,余數放在40H,41H,42H中
DIV6_3:
;擴展被除數為48+24位
CLR F0
CLR A
MOV 40H,A
MOV 41H,A
MOV 42H,A
MOV R7,#48
LOOP1: ;整體左移一位
CLR C
MOV R1,#9 ;移動9字節
MOV R0,#48H
LOOP2:
MOV A,@R0
ADDC A,@R0
MOV @R0,A
DEC R0
DJNZ R1,LOOP2
MOV F0,C
;相減
CLR C
MOV A,42H
SUBB A,4BH
MOV R4,A
MOV A,41H
SUBB A,4AH
MOV R3,A
MOV A,40H
SUBB A,49H
MOV R2,A
;根據差結果設置商
ANL C,/F0
JC HAO
MOV 42H,R4
MOV 41H,R3
MOV 40H,R2
ORL 48H,#01H
HAO:
DJNZ R7,LOOP1
RET
;---------運算區清零
SUM_00:
MOV R0,#36H
MOV R1,#45
ZAILAI:
CLR A
MOV @R0,A
INC R0
DJNZ R1,ZAILAI
RET
SUM_0:
CLR A
MOV R0,#40H
MOV R1,#15
CHONGFU:
MOV @R0,A
DJNZ R1,CHONGFU
RET
;--------------------------------
TABLE:
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,10H
TAB:
DB 0FBH,0F7H,0EFH,0DFH,0BFH,7FH,
END
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -