⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 com.asm

📁 本人自己写的用C8051F020驱动的DAC8541程序,直接对口操作,信号非常好,已经完全经过调试
💻 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 + -