📄 数控信号发生器.asm
字号:
;******************信号发生器****************************
;F<512Hz时,每周期输出128点,F>=512Hz时,每周期输出64点
;********************************************************
FLAG DATA 20H ;辅助标志字节
T DATA 21H ;自变量
STATE DATA 22H ;状态标志字节
OUT BIT STATE.7;输出状态标志位
FF DATA 23H ;布尔运算区
TL0_ DATA 31H
TH0_ DATA 32H
DBUF EQU 38H ;显示缓冲区(共6位)首地址
DSP DATA 3EH ;显示扫描指针
KEYC DATA 3FH ;键码
KEYOK BIT FLAG.0 ;按键已响应(0)标志位
KEYX BIT FLAG.1 ;已消抖(0)标志位
DACA2 EQU 7FFFH ;提供参考电压DAC地址
DACA1 EQU 0BFFFH ;
CTRL EQU 0FE00H ;8155控制字地址
PRA EQU 0FE01H ;8155A口地址
PRB EQU 0FE02H ;8155B口地址
PRC EQU 0FE03H ;8155C口地址
;*********************************************************
ORG 0000H
AJMP MAIN
ORG 0003H
RETI
ORG 000BH
RETI
; AJMP TIMER0
ORG 0013H
AJMP INT1
ORG 001BH
AJMP TIMER1
ORG 0030H
MAIN: MOV R0,#20H ;数据区初始化
MOV @R0,#0
INC R0
CJNE R0,#61H,$-3
ACALL MIELING ;灭0处理
MOV R6,#150
MAIN1: MOV R7,#0
MAIN2: MOV DPTR,#CTRL ;自检
MOV A,#0FH ;A,B,C输出
MOVX @DPTR,A
INC DPTR ;A
CLR A
MOVX @DPTR,A
INC DPTR ;B
MOV A,#0FH
MOVX @DPTR,A
INC DPTR ;C
MOV A,#0FFH
MOVX @DPTR,A
DJNZ R7,MAIN2
DJNZ R6,MAIN1
MOV DPTR,#PRB ;8155初始化
MOV A,#4
MOVX @DPTR,A
CLR A ;DAC0832初始化
MOV DPTR,#DACA1
MOVX @DPTR,A
MOV DPTR,#DACA2
MOVX @DPTR,A
MOV SP,#60H
MOV TMOD,#11H ;定时器初始化
MOV TL1,#LOW(65536-2000)
MOV TH1,#HIGH(65536-2000)
SETB EA
SETB TR0
SETB TR1
SETB ET1
SETB EX1
SETB IT1
;---------------------------------------------------
OUTPUT: CLR A ;在设置状态时停止输出
MOV DPTR,#DACA2
MOVX @DPTR,A
JNB OUT,$
;输出电压最大值
MOV R0,#DBUF+1
MOV A,@R0
MOV B,#50
MUL AB
MOV DPTR,#DACA2
MOVX @DPTR,A
;选择输出波形
DEC R0
MOV A,@R0
RL A
MOV B,A
MOV DPTR,#BOXING
MOVC A,@A+DPTR
PUSH ACC
MOV A,B
INC A
MOVC A,@A+DPTR
MOV DPL,A
POP DPH
;判断频率范围
ACALL RDF ;R6F7=F
MOV A,R6
ORL A,R7
JZ OP0
MOV A,R6
JZ OP1 ;0<F<256Hz
CJNE R6,#2,$+3
JC OP1 ;256<=F<512Hz
SJMP OP3 ;F>=512Hz
;---------------------------------------------
;F=0,输出直流信号
;---------------------------------------------
OP0: MOV P2,#HIGH(DACA1)
MOV R0,#LOW(DACA1)
MOV A,#0FFH
OP0LP: MOVX @R0,A
JB OUT,OP0LP
AJMP OUTPUT
;---------------------------------------------
;0<F<256Hz,每个周期输出128个点,T0方式1
;---------------------------------------------
OP1: MOV TMOD,#11H
MOV R2,#00H ;1E6/128=(1E84)h
MOV R3,#00H
MOV R4,#1EH
MOV R5,#84H
ACALL DIVD ;双字节二进制无符号数除法(商在R2R3中)
MOV R4,#00H
MOV R5,#02H
ACALL DSUB ;R4R5=R4R5-R2R3
MOV TL0_,R5
MOV TH0_,R4
MOV TH0,R4
MOV TL0,R5
MOV P2,#HIGH(DACA1)
MOV R0,#LOW(DACA1)
OP1LP: MOV A,T
MOVC A,@A+DPTR
MOVX @R0,A
JNB TF0,$
MOV TL0,TL0_
MOV TH0,TH0_
CLR TF0
INC T
CLR T.7
JB OUT,OP1LP
AJMP OUTPUT
;---------------------------------------------
;256<=F<512Hz,每个周期输出128个点,T0方式2
;---------------------------------------------
OP2: MOV TMOD,#12H
MOV R2,#00H ;1E6/128=(1E84)h
MOV R3,#00H
MOV R4,#1EH
MOV R5,#84H
ACALL DIVD ;双字节二进制无符号数除法(商在R2R3中)
MOV R4,#00H
MOV R5,#00H
ACALL DSUB ;R4R5=R4R5-R2R3
MOV TH0,R5
MOV TL0,R5
MOV P2,#HIGH(DACA1)
MOV R0,#LOW(DACA1)
OP2LP: MOV A,T
MOVC A,@A+DPTR
MOVX @R0,A
JNB TF0,$
CLR TF0
INC T
CLR T.7
JB OUT,OP2LP
AJMP OUTPUT
;---------------------------------------------
;F>=512Hz,每个周期输出64个点,T0方式2
;---------------------------------------------
OP3: MOV TMOD,#12H
MOV R2,#00H ;1E6/64=(3D09)h
MOV R3,#00H
MOV R4,#3DH
MOV R5,#09H
ACALL DIVD ;双字节二进制无符号数除法(商在R2R3中)
MOV R4,#00H
MOV R5,#00H
ACALL DSUB ;R4R5=R4R5-R2R3
MOV TH0,R5
MOV TL0,R5
MOV P2,#HIGH(DACA1)
MOV R0,#LOW(DACA1)
OP3LP: MOV A,T
MOVC A,@A+DPTR
MOVX @R0,A
JNB TF0,$
CLR TF0
INC T
INC T
CLR T.7
JB OUT,OP3LP
AJMP OUTPUT
;----------------波形量化表-------------------
BOXING: ;目录
DW FANTAB,SANTAB,JUTAB,SINTAB
FANTAB: ;方波
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 000H,000H,000H,000H,000H,000H,000H,000H
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
SANTAB: ;三角波
DB 07FH,083H,087H,08BH,08FH,093H,097H,09BH
DB 09FH,0A3H,0A7H,0ABH,0AFH,0B3H,0B7H,0BBH
DB 0BFH,0C3H,0C7H,0CBH,0CFH,0D3H,0D7H,0DBH
DB 0DFH,0E3H,0E7H,0EBH,0EFH,0F3H,0F7H,0FBH
DB 0FFH,0FBH,0F7H,0F3H,0EFH,0EBH,0E7H,0E3H
DB 0DFH,0DBH,0D7H,0D3H,0CFH,0CBH,0C7H,0C3H
DB 0BFH,0BBH,0B7H,0B3H,0AFH,0ABH,0A7H,0A3H
DB 09FH,09BH,097H,093H,08FH,08BH,087H,083H
DB 07FH,07BH,077H,073H,06FH,06BH,067H,063H
DB 05FH,05BH,057H,053H,04FH,04BH,047H,043H
DB 03FH,03BH,037H,033H,02FH,02BH,027H,023H
DB 01FH,01BH,017H,013H,00FH,00BH,007H,003H
DB 000H,004H,008H,00CH,010H,014H,018H,01CH
DB 020H,024H,028H,02CH,030H,034H,038H,03CH
DB 040H,044H,048H,04CH,050H,054H,058H,05CH
DB 060H,064H,068H,06CH,070H,074H,078H,07CH
JUTAB: ;锯齿波
DB 000H,002H,004H,006H,008H,00AH,00CH,00EH
DB 010H,012H,014H,016H,018H,01AH,01CH,01EH
DB 020H,021H,024H,026H,028H,02AH,02CH,02EH
DB 030H,032H,034H,036H,038H,03AH,03CH,03EH
DB 040H,042H,044H,046H,048H,04AH,04CH,04EH
DB 050H,052H,054H,056H,058H,05AH,05CH,05EH
DB 060H,062H,064H,066H,068H,06AH,06CH,06EH
DB 070H,072H,074H,076H,078H,07AH,07CH,07EH
DB 080H,082H,084H,086H,088H,08AH,08CH,08EH
DB 090H,092H,094H,096H,098H,09AH,09CH,09EH
DB 0A0H,0A2H,0A4H,0A6H,0A8H,0AAH,0ACH,0AFH
DB 0B0H,0B2H,0B4H,0B6H,0B8H,0BAH,0BCH,0BEH
DB 0C0H,0C2H,0C4H,0C6H,0C8H,0CAH,0CCH,0CEH
DB 0D0H,0C2H,0D4H,0D6H,0D8H,0DAH,0DCH,0DEH
DB 0E0H,0E2H,0E4H,0E6H,0E8H,0EAH,0ECH,0EEH
DB 0F0H,0F2H,0F4H,0F6H,0F8H,0FAH,0FCH,0FEH
;DB 000H,004H,008H,00CH,010H,014H,018H,01CH
;DB 020H,024H,028H,02CH,030H,034H,038H,03CH
;DB 040H,044H,048H,04CH,050H,054H,058H,05CH
;DB 060H,064H,068H,06CH,070H,074H,078H,07CH
;DB 080H,084H,088H,08CH,090H,094H,098H,09CH
;DB 0A0H,0A4H,0A8H,0ACH,0B0H,0B4H,0B8H,0BCH
;DB 0C0H,0C4H,0C8H,0CCH,0D0H,0D4H,0D8H,0DCH
;DB 0E0H,0E4H,0E8H,0ECH,0F0H,0F4H,0F8H,0FCH
SINTAB:;正弦波
DB 07FH,085H,08BH,092H,098H,09EH,0A4H,0AAH
DB 0B0H,0B5H,0BBH,0C0H,0C6H,0CBH,0D0H,0D4H
DB 0D9H,0DDH,0E1H,0E5H,0E9H,0ECH,0EFH,0F2H
DB 0F4H,0F7H,0F9H,0FAH,0FCH,0FDH,0FDH,0FEH
DB 0FEH,0FEH,0FDH,0FDH,0FCH,0FAH,0F9H,0F7H
DB 0F4H,0F2H,0EFH,0ECH,0E9H,0E5H,0E1H,0DDH
DB 0D9H,0D4H,0D0H,0CBH,0C6H,0C0H,0BBH,0B5H
DB 0B0H,0AAH,0A4H,09EH,098H,092H,08BH,085H
DB 07FH,079H,073H,06CH,066H,060H,05AH,054H
DB 04EH,049H,043H,03EH,038H,033H,02EH,02AH
DB 025H,021H,01DH,019H,015H,012H,00FH,00CH
DB 00AH,007H,005H,004H,002H,001H,001H,000H
DB 000H,000H,001H,001H,002H,004H,005H,007H
DB 00AH,00CH,00FH,012H,015H,019H,01DH,021H
DB 025H,02AH,02EH,033H,038H,03EH,043H,049H
DB 04EH,054H,05AH,060H,066H,06CH,073H,079H
;*************************外部中断1***********************
INT1: JB P3.3,INT1E
JB P3.3,INT1E
JB P3.3,INT1E
MOV P1,#0FFH
SETB TR1
CLR EX1
INT1E: RETI
;********************T1中断服务子程序(每2ms中断一次)************************
TIMER1: ORL TL1, #LOW(65536-2000)
MOV TH1, #HIGH(65536-2000)
PUSH ACC
PUSH PSW
PUSH DPL
PUSH DPH
SETB RS1
CLR RS0
;------------显示扫描-------------
MOV DPTR,#CTRL
MOV A,#0FH
MOVX @DPTR,A
MOV DPTR,#PRC
CLR A
MOVX @DPTR,A ;关显示器
INC DSP
MOV A,DSP
CJNE A,#6,TM1
MOV DSP,#0FFH
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -