📄 com.asm
字号:
;*******************************************************
; moliasm-1.ASM *
; VER1.0 *
; *
; BY Ren Jia Fu *
; 2007.9.8 *
;*******************************************************
NAME NPASM
EXTRN XDATA(chii)
EXTRN XDATA(BB)
public OUTDAC0,DAC712,DAC8541
sfr EIE2 = 0xE7; /* EXTERNAL INTERRUPT ENABLE 2 */
sfr XBR0 = 0xE1; /* DIGITAL CROSSBAR CONFIGURATION REGISTER 0 */
sfr XBR1 = 0xE2; /* DIGITAL CROSSBAR CONFIGURATION REGISTER 1 */
sfr XBR2 = 0xE3; /* DIGITAL CROSSBAR CONFIGURATION REGISTER 2 */
sfr AMX0CF = 0xBA; /* ADC 0 MUX CONFIGURATION */
sfr AMX0SL = 0xBB; /* ADC 0 MUX CHANNEL SELECTION */
sfr TMR3L = 0x94; /* TIMER 3 - LOW BYTE */
sfr TMR3H = 0x95; /* TIMER 3 - HIGH BYTE */
sfr P7 = 0x96; /* PORT 7 */
sfr P6 = 0x86; /* PORT 6 */
sfr ADC0CF = 0xBC; /* ADC 0 CONFIGURATION */
sfr ADC0L = 0xBE; /* ADC 0 DATA - LOW BYTE */
sfr ADC0H = 0xBF; /* ADC 0 DATA - HIGH BYTE
sfr ADC0CN = 0xE8; /* ADC 0 CONTROL
sfr DAC0L =0xd3;
sfr DAC0H=0xd4;
sfr DAC1L=0xd5;
sfr DAC1H=0xd6;
;-----------------------------------------
; 20H 21H 22H 23H 24H 25H
; AA 55 CGQNO 命令 FDBS 校验和
;------------------------------------------
ORG 0003H
LJMP INTT0
ORG 000BH
LJMP timer0
ORG 0013H
LJMP INTT1
ORG 0023H
LJMP INTT0
ORG 0073H
LJMP T3INT
ORG 007BH
LJMP ADC0INT
;============================================
T3INT: PUSH ACC
PUSH DPH
PUSH DPL
PUSH PSW
POP PSW
POP DPL
POP DPH
POP ACC
RETI
;==================================
; 设置T0=5秒
;==================================
SETTIME: MOV TMR3L,#90 ;10秒=200 5秒=100
MOV TMR3H,#00H
MOV TH0,#3CH
MOV TL0,#0B0H
MOV TMOD,#21H
SETB ET0
SETB EA
SETB TR0
LCALL SAMPLE ;START SAMPLE
RET
;--------------------------------------
; T0中断
;--------------------------------------
timer0: CLR TR0
PUSH ACC
PUSH PSW
MOV TH0,#3CH
MOV TL0,#0B0H ;50ms
MOV A,TMR3L
DEC A
MOV TMR3L,A
JNZ TTIM1
MOV TMR3H,#01H ;置T0定时到
CLR ET0 ;关T0
LCALL ENDSAMP ;STOP SAMPLE
; LCALL GETPU512 ;pudata->BB[0]--BB[511]
TTIM1: POP PSW
POP ACC
SETB TR0
RETI
;===================================
; HAD-512 for NP441
; ardd:7C00-7FFFH 1K
;-----------------------------------
PUCLEAR:MOV DPTR,#0C00H ;7C00H ???????????????????????????
MOV R0,#04
PUCL1: MOV R1,#00
PUCL2: MOV A,#00H
MOVX @DPTR,A
INC DPTR
DJNZ R1,PUCL2
DJNZ R0,PUCL1
RET
;-----------------------------------------------------------
; START SAMPLE
;------------------------------------------------------------
SAMPLE: MOV ADC0CN,#88H ;ADC0 开 跟踪方试,CNVST上生沿起动
;数据右对齐(000H-FFFH)
MOV ADC0CF,#48H ;ADC0时钟为系统时钟 5分频 11.05M/5=2.2M 放大器=1
MOV AMX0CF,#00H ;Ain0-Ain7 单端输入 0-3.3V
MOV AMX0SL,#00H ;转换 Ain0.0
; MOV AMX0SL,7FH ;转换通道=(7FH) ??????
ORL EIE2,#02H ;ADC0中短开
SETB EA ;中短开
ANL P1,#3FH ;P1.6=0 P1.7=0
MOV R7,#100
DJNZ R7,$
ORL P1,#0C0H ;P1.6=1 P1.7=1
MOV R7,#100
DJNZ R7,$
ANL P1,#3FH ;P1.6=0 P1.7=0
RET
;-----------------------------------
; STOP SAMPLE
;------------------------------------
ENDSAMP:ANL EIE2,#0FDH ; ADC0中段off
MOV P1,#0C0H ; P1.6=1 P1.7=1
RET
;-----------------------------------
;-----------------------------------
; C00H-FFFH ---->BB[0]-BB[511]
; 对整型变量:高位在前,低位在后
; 对谱线: 低位在前, 高位在后
;-----------------------------------
;-----------------------------------
; ADC0 中断 HAD-512
;-----------------------------------
ADC0INT:PUSH ACC
PUSH DPL
PUSH DPH
CLR P1.7
SETB P1.7
;数据右对齐
CLR C
MOV A,ADC0H ;取ADC0的高4位:D11 D10 D9 D8
RRC A ;C->D7 ,Dn+1->Dn,D0->C
MOV DPH,A ;DPH:0 0 0 0 0 D11 D10 D9 C=D8
MOV A,ADC0L ;取ADC0的低8位: D7 D6 D5 D4 D3 D2 D1 D0
ANL A,#0F8H ;D7 D6 D5 D4 D3 0 0 0
RRC A ;C->D7 ,Dn+1->Dn,D0->C
MOV DPL,A ;DPL:D8 D7 D6 D5 D4 D3 D2 0 C=0
CLR C
MOV A,DPH ;DPH:0 0 0 0 0 D11 D10 D9 C=0
RRC A ;C->D7 ,Dn+1->Dn,D0->C
MOV DPH,A ;DPH:0 0 0 0 0 0 D11 D10 C=D9
MOV A,DPL ;DPL:D8 D7 D6 D5 D4 D3 0 0 C=D9
RRC A ;C->D7 ,Dn+1->Dn,D0->C
MOV DPL,A ;DPL:D9 D8 D7 D6 D5 D4 D3 0 C=0
MOV A,DPH
ADD A,#0CH ;ADD C00H 7CH??????????????
MOV DPH,A
MOVX A,@DPTR
INC A ;A++ 不影响C
MOVX @DPTR,A
JNZ ADC0END
INC DPTR
MOVX A,@DPTR
INC A
MOVX @DPTR,A
ADC0END:CLR P1.7
ANL ADC0CN,#0DFH ;清ADC标志
POP DPH
POP DPL
POP ACC
RETI
;=============================================
;
;=============================================
INTT0: PUSH ACC
PUSH DPH
PUSH DPL
MOV A,#00H
MOVX @DPTR,A
POP DPL
POP DPH
POP ACC
RETI
;=============================================
INTT1: PUSH ACC
PUSH DPH
PUSH DPL
MOVX A,@DPTR
INC A
INTT10: MOVX @DPTR,A
POP DPH
POP DPL
POP ACC
RETI
;----------------------------------------------
OUTDAC0: MOV DPTR,#chii
MOVX A,@DPTR
MOV R6,A
INC DPTR
MOVX A,@DPTR
MOV R7,A
MOV DAC1L,R6
MOV DAC1H,R7
RET
;-----------------------------------------------
;************************************完成整个转换过程
DAC8541: CLR P2.1
CLR P2.2
CLR P2.7
SETB P2.6
CLR P2.6
;SETB P2.0
MOV DPTR,#BB
MOV R7,#04H
OUT852: MOV R6,#00H
OUT8521: MOVX A,@DPTR
LCALL CHANGD
MOVX @DPTR,A
INC DPTR
MOVX A,@DPTR
LCALL CHANGD
MOVX @DPTR,A
INC DPTR
DJNZ R6,OUT8521
DJNZ R7,OUT852
RET
;******************************************************
;------------------------------------------------------
DAC712:
MOV DPTR,#BB
MOV R7,#04H
OUTT2: MOV R6,#00H
OUTT1: MOVX A,@DPTR
MOV P6,A
INC DPTR
MOVX A,@DPTR
MOV P7,A
INC DPTR
CLR P2.3
CLR P2.4
CLR P2.5
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB P2.5
SETB P2.4
SETB P2.3
DJNZ R6,OUTT1
DJNZ R7,OUTT2
RET
;---------------------------------------------
CHANGD: MOV B,#00H
JNB ACC.0,OUT85432
ORL B,#80H
OUT85432:JNB ACC.1,OUT85433
ORL B,#40H
OUT85433:JNB ACC.2,OUT85434
ORL B,#20H
OUT85434:JNB ACC.3,OUT85435
ORL B,#10H
OUT85435:JNB ACC.4,OUT85436
ORL B,#08H
OUT85436:JNB ACC.5,OUT85437
ORL B,#04H
OUT85437:JNB ACC.6,OUT85438
ORL B,#02H
OUT85438:JNB ACC.7,OUT85439
ORL B,#01H
OUT85439:MOV A,B
RET
;-----------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -