?? 簡易信號測量儀(程序).txt
字號:
JS_A1 DATA 30H ;計算用數據A
JS_A2 DATA 31H
JS_A3 DATA 32H
JS_A4 DATA 33H
JS_A5 DATA 34H
JS_A6 DATA 35H
JS_A7 DATA 36H
JS_A8 DATA 37H
;------------------
JS_B1 DATA 38H ;計算用數據B
JS_B2 DATA 39H
JS_B3 DATA 3AH
JS_B4 DATA 3BH
;------------------
JS_C1 DATA 3CH ;計算用數據C
JS_C2 DATA 3DH
JS_C3 DATA 3EH
JS_C4 DATA 3FH
JS_C5 DATA 40H
JS_C6 DATA 41H
JS_C7 DATA 42H
JS_C8 DATA 43H
;------------------
DINSI DATA 44H
;------------------ ;顯存設置
DT_A1 DATA 45H
DT_A2 DATA 46H
DT_A3 DATA 47H
DT_A4 DATA 48H
DT_A5 DATA 49H
DT_A6 DATA 4AH
DT_A7 DATA 4BH
DT_B1 DATA 4CH
DT_B2 DATA 4DH
DT_B3 DATA 4EH
DT_B4 DATA 4FH
DT_B5 DATA 50H
DT_B6 DATA 51H
DT_B7 DATA 52H
DT_B8 DATA 53H
DT_B9 DATA 54H
DT_C1 DATA 55H
DT_C2 DATA 56H
DT_C3 DATA 57H
DT_C4 DATA 58H
DT_C5 DATA 59H
DT_C6 DATA 5AH
DT_C7 DATA 5BH
DT_C8 DATA 5CH
DT_D1 DATA 5DH
DT_D2 DATA 5EH
DT_D3 DATA 5FH
DT_D4 DATA 60H
DT_D5 DATA 61H
DT_D6 DATA 62H
DT_D7 DATA 63H
DT_D8 DATA 64H
;--------------------
F_D1 DATA 65H
F_D2 DATA 66H
T_D1 DATA 67H
T_D2 DATA 68H
T_D3 DATA 69H
D_D2 DATA 6AH
W_D1 DATA 6BH
W_D2 DATA 6CH
W_D3 DATA 6DH
D_D1 DATA 6FH
VPP_D1 DATA 70H
VPP_D2 DATA 71H
F_D3 DATA 72H
X_D1 DATA 74H
X_D2 DATA 75H
X_D3 DATA 76H
; SP 79H
;-------------------
OVER EQU 20H ;溢出標志
ZXB EQU 21H
FB EQU 22H
;------------------
OVE BIT P0.0 ;管腳定義
CLER BIT P0.1
CS_AD BIT P0.2
ZXB_D BIT P0.2
IO BIT P0.3
CLK BIT P0.4
RS BIT P0.5
FB_D BIT P0.6
E BIT P0.7
DD EQU P1
PX EQU P1
D0 BIT P1.0
D1 BIT P1.1
D2 BIT P1.2
D3 BIT P1.3
D4 BIT P1.4
D5 BIT P1.5
D6 BIT P1.6
D7 BIT P1.7
A12 BIT P2.0
A11 BIT P2.1
A2 BIT P2.2
B2 BIT P2.3
R11 BIT P2.4
A34 BIT P2.5
A1 BIT P2.6
B1 BIT P2.7
GATE10 BIT P3.0
A81 BIT P3.1
GATE2 BIT P3.2
A80 BIT P3.3
OUT2 BIT P3.4
CS_ BIT P3.5
RD_ BIT P3.6
WR_ BIT P3.7
;=============================================================================================
ORG 0000H
AJMP START
ORG 000BH
LJMP INTT0
ORG 001BH
AJMP INTT1
ORG 0030H
START: LCALL INIT ;初始化
JMP MAIN
;--------------------
INIT: MOV SP,#079H
MOV A,#00H ;清內存單元
MOV R0,#4CH ;開發、始單元
CL1: MOV @R0,A
INC R0
CJNE R0,#72H,CL1;結束單元
MOV P0,#0FFH
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH
CLR GATE10
MOV P1,#01H ;清除屏幕
ACALL ENABLE
MOV P1,#38H ;8位點陣
ACALL ENABLE
MOV P1,#0FH ;開顯示
ACALL ENABLE
MOV P1,#06H ;移動光標
ACALL ENABLE
MOV TMOD,#1DH;
MOV TH1,#03CH
MOV TL1,#0B0H
MOV TL0,#0
MOV TH0,#0
CLR EA
CLR OVER
MOV DINSI,#22 ;定時時間=22*50MS=1.1S
RET
;========================================================================================================================
MAIN:
CLR A11
JMP BOXIN
LCALL BOXIN ;波形識別
LCALL GET_F ;頻率、周期測量
JB ZXB,AIN1
LCALL GET_W ;脈寬、占空比的測量
JMP AIN2
AIN1: LCALL GET_X ;相位的測量
LCALL GET_VPP ;峰峰值的測量
AIN2: LCALL XIANSHI ;數據顯示
JMP MAIN
;====================波形識別
BOXIN: MOV TMOD,#1DH
SETB EA
SETB ET1
SETB TR1
CLR OVER
BOXIN1: JB A11,BOXIN2
JNB OVER,BOXIN1
CLR ZXB
CLR FB
LCALL ZS_BX
JNB A11,$
BOXIN2: CLR TR1 ;關定時并置初值
CLR ET1
CLR EA
MOV TH1,#03CH
MOV TL1,#0B0H
MOV DINSI,#22
JNB A11,$
JB A11,$
MOV TMOD,#1DH
SETB EA
SETB ET1
SETB TR1
CLR OVER
BOXIN3: JB A11,BOXIN4
JB A12,BOXIN5
JNB OVER,BOXIN3
JMP BOXIN
BOXIN4: SETB FB
CLR ZXB
JMP BOXIN6
BOXIN5: SETB ZXB
CLR FB
BOXIN6: CLR TR1 ;關定時并置初值
CLR ET1
CLR EA
MOV TH1,#03CH
MOV TL1,#0B0H
MOV DINSI,#22
LCALL ZS_BX
RET
;=========================頻率、周期測量
GET_F: LCALL GET_FF ;計數法測頻
LCALL BIJIAO100
JNC GET_F1
LCALL GET_FT ;測T法測頻
GET_F1: RET
;-------------------------計數法測頻
GET_FF: CLR B2 ;
CLR A2
CLR B1
CLR A1
LCALL OUT_1S
LCALL GET_JS
MOV F_D3,R0
MOV F_D2,TH0
MOV F_D1,TL0
LCALL WORK_T
LCALL DIS_FFT ;頻率和周期放入顯存
RET
;--------------------------測T法測頻
GET_FT: SETB A2 ;
CLR B2
SETB A1
CLR B1
LCALL OUT_4US
LCALL GET_JS
LCALL JS_DIV4 ;計數值乘以4
MOV T_D3,R0
MOV T_D2,TH0
MOV T_D1,TL0
LCALL WORK_F
LCALL DIS_TFT
RET
;===========================
BIJIAO100:MOV JS_A4,#0 ;測得頻率是否大于或等于100Hz,返回C
MOV JS_A3,F_D3
MOV JS_A2,F_D2
MOV JS_A1,F_D1
MOV JS_B4,#0
MOV JS_B3,#0
MOV JS_B2,#0
MOV JS_B1,#100
LCALL JIANFA
RET
;=========================脈寬、占空比的測量
GET_W: LCALL GET_WA ;
LCALL DIS_WD
MOV A,DT_D4
SUBB A,#5
JNC GET_W1
LCALL GET_WB
LCALL DIS_WD ;脈寬和占空比放入顯存
GET_W1: RET
;--------------------
GET_WA: SETB A2
CLR B2
CLR A1
SETB B1
LCALL OUT_4US
LCALL GET_JS
MOV W_D3,R0
MOV W_D2,TH0
MOV W_D1,TL0
LCALL W_DIV4
LCALL WORK_D
RET
;========================
GET_WB: SETB A2
CLR B2
SETB A1
SETB B1
LCALL OUT_4US
LCALL GET_JS
LCALL JS_DIV4
LCALL T_JS
MOV W_D3,R0
MOV W_D2,TH0
MOV W_D1,TL0
LCALL WORK_D
RET
;=======================
GET_JS: SETB GATE10
MOV TMOD,#1DH
SETB EA
SETB ET0
CLR TR0
MOV R0,#0
MOV TH0,#0
MOV TL0,#0
SETB R11
CLR R11
JB GATE2,$
SETB TR0
JNB GATE2,$
JB GATE2,$
CLR TR0
CLR ET0
CLR EA
CLR GATE10
RET
;======================峰峰值的測量
GET_VPP:SETB CLER
MOV R2,#100
DJNZ R2,$
CLR CLER
CLR CLER
JB OVE,$
SETB CS_AD
CLR CLK
NOP
NOP
CLR CS_AD
NOP
SETB IO
CLR CLK
NOP
NOP
SETB CLK
NOP
NOP
SETB IO
CLR CLK
NOP
NOP
SETB CLK
NOP
NOP
SETB IO
CLR CLK
NOP
NOP
SETB CLK
NOP
NOP
CLR CLK
SETB IO
MOV R1,#8
GET1: SETB CLK
NOP
NOP
CLR CLK
NOP
NOP
MOV C,IO
RLC A
DJNZ R1,GET1
SETB CS_AD
MOV VPP_D2,#0 ;置入顯示數高位
MOV VPP_D1,A ;置入顯示數低位
LCALL VPP_DIV2
LCALL DIS_VPP
LCALL ZS_BX
RET
;=======================相位的測量
GET_X: SETB B2
CLR A2
SETB B1
CLR A1
LCALL OUT_4US
LCALL GET_JS
LCALL JS_DIV4
LCALL WORK_X
LCALL DIS_X
LCALL DIS_JX ;顯示極性
RET
;========================
T_JS: MOV JS_A4,#0 ;
MOV JS_A3,T_D3
MOV JS_A2,T_D2
MOV JS_A1,T_D1
MOV JS_B4,#0
MOV JS_B3,R0
MOV JS_B2,TH0
MOV JS_B1,TL0
LCALL JIANFA
MOV R0,JS_A3
MOV TH0,JS_A2
MOV TL0,JS_A1
RET
;================================
WORK_T: MOV JS_A4,#00H ;1000000(F 42 40)/F=T
MOV JS_A3,#0FH
MOV JS_A2,#42H
MOV JS_A1,#40H
MOV JS_B4,#00H
MOV JS_B3,F_D3
MOV JS_B2,F_D2
MOV JS_B1,F_D1
LCALL CHUFA
MOV T_D3,JS_A3
MOV T_D2,JS_A2
MOV T_D1,JS_A1
RET
;============================
WORK_F: MOV JS_A4,#3BH ;1000000000(3B 9A CA 00)/T=F(mHz)
MOV JS_A3,#9AH
MOV JS_A2,#0CAH
MOV JS_A1,#00H
MOV JS_B4,#00H
MOV JS_B3,T_D3
MOV JS_B2,T_D2
MOV JS_B1,T_D1
LCALL CHUFA
MOV F_D3,JS_A3
MOV F_D2,JS_A2
MOV F_D1,JS_A1
RET
;==============================
WORK_D: MOV JS_A4,#00H ;W*1000/T=D
MOV JS_A3,W_D3
MOV JS_A2,W_D2
MOV JS_A1,W_D1
MOV JS_B4,#0
MOV JS_B3,#0
MOV JS_B2,#03H
MOV JS_B1,#0E8H
LCALL CHENFA
MOV JS_B4,#00H
MOV JS_B3,T_D3
MOV JS_B2,T_D2
MOV JS_B1,T_D1
LCALL CHUFA
MOV D_D2,JS_A2
MOV D_D1,JS_A1
RET
;===========================
WORK_X: MOV JS_A4,#00H ;計數值*360/T=相位
MOV JS_A3,R0
MOV JS_A2,TH0
MOV JS_A1,TL0
MOV JS_B4,#0
MOV JS_B3,#0
MOV JS_B2,#01H
MOV JS_B1,#68H
LCALL CHENFA
MOV JS_B4,#00H
MOV JS_B3,T_D3
MOV JS_B2,T_D2
MOV JS_B1,T_D1
LCALL CHUFA
MOV X_D3,JS_A3
MOV X_D2,JS_A2
MOV X_D1,JS_A1
RET
;===========================
DIS_FFT:MOV JS_A4,#00H ;要轉換的數
MOV JS_A3,F_D3
MOV JS_A2,F_D2
MOV JS_A1,F_D1
MOV JS_B4,#0 ;除以10
MOV JS_B3,#0
MOV JS_B2,#0
MOV JS_B1,#10
MOV R2,#5 ;要轉換出來的位數
MOV R1,#DT_A5 ;轉換后存放的第一個顯存地址
DIS_FFT1:LCALL CHUFA
MOV @R1,JS_C1
DEC R1
DJNZ R2,DIS_FFT1
MOV DT_A6,#14 ;H
MOV DT_A7,#21 ;z
MOV JS_A4,#00H ;要轉換的數
MOV JS_A3,T_D3
MOV JS_A2,T_D2
MOV JS_A1,T_D1
MOV JS_B4,#0 ;除以10
MOV JS_B3,#0
MOV JS_B2,#0
MOV JS_B1,#10
MOV R2,#7 ;要轉換出來的位數
MOV R1,#DT_B7 ;轉換后存放的第一個顯存地址
DIS_FFT2:LCALL CHUFA
MOV @R1,JS_C1
DEC R1
DJNZ R2,DIS_FFT2
MOV DT_B8,#26 ;u
MOV DT_B9,#17 ;S
RET
;===========================
DIS_TFT:MOV JS_A4,#00H ;要轉換的數
MOV JS_A3,F_D3
MOV JS_A2,F_D2
MOV JS_A1,F_D1
MOV JS_B4,#0 ;除以10
MOV JS_B3,#0
MOV JS_B2,#0
MOV JS_B1,#10
LCALL CHUFA
LCALL CHUFA
MOV DT_A7,#21 ;z
MOV DT_A6,#14 ;H
MOV DT_A5,JS_C1
LCALL CHUFA
MOV DT_A4,JS_C1
MOV DT_A3,#10
LCALL CHUFA
MOV DT_A2,JS_C1
LCALL CHUFA
MOV DT_A1,JS_C1
MOV JS_A4,#00H ;要轉換的數
MOV JS_A3,T_D3
MOV JS_A2,T_D2
MOV JS_A1,T_D1
MOV JS_B4,#0 ;除以10
MOV JS_B3,#0
MOV JS_B2,#0
MOV JS_B1,#10
MOV R2,#7 ;要轉換出來的位數
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -