www.pudn.com > C8051F020ANDads1255.rar > ADS1255ASM.asm


	 NAME ADSasm 
	  
   $include (C8051F060.inc) 
 
 
 
	 
 
	EXTRN	CODE (?C_STARTUP) 
 
	PUBLIC INITADS 
	PUBLIC PUCLEAR 
	PUBLIC TXDPUXIAN 
	PUBLIC SAMPLE 
	PUBLIC ENDSAMP 
	PUBLIC UART_Init 
	PUBLIC COMM 
        public WRADS1255C 
 
	PUBLIC LOAD 
 
 
TIMERL EQU 0000H 
TIMERH EQU 0001H 
COMBF EQU  20H 	     ;COMM BUFFER 20H--25H 
BFPOI EQU  30H 	     ;BUFFER POINTER 
 
;--------------------------------------------------- 
;     ADS1255 接口定义 
;--------------------------------------------------- 
 
sbit SCLK = P2^0     	;P20:  	SCLK 
sbit DIN  = P2^1     	;P21: 	DIN 
sbit DOUT = P2^3     	;P23:	DOUT 
sbit DRDY = P2^4     	;P24:	DRDY 
sbit CS1255   = P2^5    ;P25:	CS 
 
;---------------------------------------------------- 
	TIMEOVER EQU 2EH     ;T0 定时到 
	 
	EXTRN 	DATA (COMOK) 
	EXTRN 	DATA (BUF) 
 
 
;----------------------------------------- 
;  20H   21H   22H    23H    24H    25H 
;  AA    55   CGQNO   命令   FDBS   校验和 
;						right	wrong 
;                      (23H) + (24H) = =(25H) ? 55 AA,  55 99 
;------------------------------------------ 
;  AA    55   01   00   F0   F0       清谱线,起动采样,传谱线 
;  AA    55   01   01   **   **       改变放大倍数(细调) 
;  AA    55   01   02   **   **       改变DAC0的8位输出 
;  AA    55   01   03   **   **       改变DAC1的8位输出 
;  AA    55   01   04   **   **       改变放大倍数(粗调) 
;  AA    55   01   05   00   05       校正 
 
 
;============================================ 
        org 0000h 
 
	ORG 000BH 
	LJMP timer0  
	ORG 0023H	        	 
 
	LJMP COMM 
 
	ORG 0073H 
 
        LJMP T3INT 
 
	ORG 0100H 
;----------------------------------------- 
;      ADS1255读一个字节 
;P20:  	SCLK 
;P21: 	DIN 
;P23:	DOUT 
;P24:	DRDY 
;P25:	CS1255 
 
;-------------------------------------------- 
;          READ BYTE 
;CLK  上升沿有效 
;---------------------------------------------- 
/* 
RDRAS1255:  SETB SCLK 
            MOV R1,#08H 
RDAD1:      CLR SCLK 
	    NOP 
            NOP 
            MOV C,DOUT 
            NOP 
            NOP 
            RLC A 
            SETB SCLK 
            NOP 
	    NOP 
            NOP 
            DJNZ R1,RDAD1 
            MOV R7,A 
            MOV R6,#00H 
 
	    CLR SCLK 
            RET 
	    */ 
;---------------------------------------- 
;         WRITE ads1255 
;write ADS1255:   CLK  下降沿有效 
;DIN  :P2.1 
;SCLK :P2.0 
;---------------------------------------- 
WRADS1255C:mov a,BUF 
           mov R7,A 
WRADS1255: MOV A,R7 
           CLR DIN 
	   MOV R1,#08H 
           CLR CS1255 
WRADS1:	   SETB SCLK 
           RLC A 
           MOV DIN,C 
           NOP 
           NOP	    
           CLR SCLK     ;WRITE  
	   NOP 
           NOP 
           NOP 
           NOP 
      	   DJNZ R1,WRADS1 
	   SETB CS1255 
	   NOP           
           SETB SCLK 
 	   RET 
;---------------------------------------- 
;    Get ADS1255  
;read ADS1255  CLK  上升沿有效 
;write ADS1255 CLK  下降沿有效 
;CS:  P2.5 
;----------------------------------------- 
;    START ADS1255 
;---------------------------------------- 
STARTADS1255: 
	     JNB DRDY, $ 
	     JB  DRDY, $ 
	     NOP 
	     NOP 
	     NOP 
	     MOV R7,#03H    ;  
	     LCALL WRADS1255  
	     LCALL GETADS0 
	     RET 
;--------------------------------------- 
;  得到 ADS1255 结果 
;R7:  H 
;R6:  M  
;R5:  L 
;---------------------------------------- 
GETADS1255:  JNB DRDY, $ 
	     JB  DRDY, $		     
GETADS0:     MOV R1,#08H  
             CLR SCLK 
             CLR CS1255	 
	     
GETAD1:	     SETB SCLK    ;READ H BYTE 
	     nop 
	     NOP 
	     MOV C,DOUT    ;C <- B23 
	     RLC A 
	     CLR SCLK  
	     DJNZ R1,GETAD1 
	     MOV R7,A       
	     MOV R1,#08H 
	    
GETAD2:	     SETB SCLK     ;READ M BYTE 
             NOP 
	     NOP 
	     MOV C,DOUT 
	     RLC A 
	     CLR SCLK 
	     DJNZ R1,GETAD2 
	     MOV R6,A 
              
             MOV R1,#08H 
	    
GETAD3:	     SETB SCLK        ;READ L BYTE 
             NOP 
	     NOP 
	     MOV C,DOUT 
	     RLC A 
	     CLR SCLK 
	     DJNZ R1,GETAD3 
	     MOV R5,A 
              
	     SETB CS1255 
             SETB SCLK 
	     RET 
;-------------------------------------------- 
;        
;------------------------------------------- 
INITADS: mov P2,#00111101B  
	 SETB CS1255 
	 NOP 
	 NOP 
	 RET 
 
;================================================= 
;       CLEAR 1024*3 PU DATA(0000H-0EFFH  4k RAM) 
;------------------------------------------------- 
PUCLEAR:MOV DPTR,#0000H 
        MOV A,#00H 
	MOV R0,#10H 
PUCL1:  MOV R1,#00H 
PUCL2:  MOVX @DPTR,A  ;5uS*4096=20000uS=20ms 
        INC DPTR 
        DJNZ R1,PUCL2 
        DJNZ R0,PUCL1 
	MOV DPTR,#0000H 
	;MOV A,#01H 
	;MOVX @DPTR,A 
	;MOV DPTR,#0002H 
	;MOV A,#02H 
	;MOVX @DPTR,A 
	RET 
 
 
;------------------------------------------------- 
;       SEND PUXIAN   UT-2048   // 3K  
;------------------------------------------------- 
TXDPUXIAN:CLR ES0 
	  MOV DPTR,#0000H           
TXDPU2:   MOVX A,@DPTR 
          MOV  SFRPAGE,   #UART0_PAGE       
	  MOV SBUF0,A 
	  JNB   TI0,$ 
	  CLR   TI0   		;TXD FIRST BYTE 
	  INC DPTR 
	  MOVX A,@DPTR 
	  mov  SFRPAGE,   #UART0_PAGE 
	  MOV SBUF0,A 
	  JNB   TI0,$ 
	  CLR   TI0   		;TXD SECOND BYTE 
	  INC DPTR 
	  MOVX A,@DPTR 
	  mov  SFRPAGE,   #UART0_PAGE 
	  MOV SBUF0,A 
	  JNB   TI0,$ 
	  CLR   TI0   		;TXD LAST BYTE 
	  INC DPTR 
	  MOV A,DPH 
	  ;CJNE A,#08H,TXDPU2 
	  CJNE A,#0CH,TXDPU2 
	  ;CJNE A,#00H,TXDPU2 
	  MOV A,DPL 
	  ;CJNE A,#00H,TXDPU2 
	  CJNE A,#00H,TXDPU2 
	  ;CJNE A,#00H,TXDPU2 
	  MOV DPTR, #0000H 
	  SETB ES0 
	  RET 
;--------------------------------------------------- 
;  SET RS232  
;BTL=115200 
;COM0 
;---------------------------------------------------- 
 
UART_Init:mov  SFRPAGE,   #TIMER01_PAGE 
    	  mov  TMOD,      #020H  ;方式2:自动重装载的8 位计数器/定时器 
    	  mov  CKCON,     #010H  ; 
    	  mov  TH1,       #0FAH  ;  11.0592M 波特率=115200 
          mov  TL1,       #0FAH 
          mov  TCON,      #040H  ; 定时器1 允许 
 
          mov  SFRPAGE,   #UART0_PAGE 
	  mov  SCON0,     #050h   ;方式1:8 位UART,可变波特率  UART0 接收允许 
	  mov  SSTA0,     #010h   ;定时器1 产生UART0 发送波特率 
	                      	  ;定时器1 产生UART0 接收波特率 
			      	  ;波特率加倍 
	  CLR TI0 
	  SETB TR1 
	  SETB ES0 
	  SETB EA 
 
	  MOV  BFPOI,#00H 
	  RET 
 
;----------------------------------------- 
;        RS232 OUTPUT 
;----------------------------------------- 
OUTCOM:   MOV  SFRPAGE,   #UART0_PAGE 
	  MOV SBUF0,A 
	  JNB   TI0,$ 
	  CLR   TI0   		 
	  RET 
 
 
;---------------------------------------- 
;      RS232C INPUT	 
;---------------------------------------- 
 
COMM:   PUSH PSW 
        PUSH ACC 
        MOV  A,R0 
	PUSH ACC 
       	MOV  A,#COMBF 
        ADD  A,BFPOI 
        MOV  R0,A 
	mov  SFRPAGE, #UART0_PAGE 
        MOV  A,SBUF0 
	MOV  @R0,A 
        CLR  RI0 
        MOV  R0,BFPOI 
	CJNE R0,#05H,NEXTC 
 
	MOV  BFPOI,#00H 
	MOV  A,COMBF 
	CJNE A,#0AAH,ERRS 
	MOV  A,COMBF+1 
	CJNE A,#55H,ERRS 
	MOV  A,COMBF+2 
	CJNE A,#01,ERRS 
	MOV  A,COMBF+3 
	ADD  A,COMBF+4 
	XRL  A,COMBF+5 
	JNZ  ERRS 
	ACALL ANSER 
        MOV   COMOK,#01 
	POP   ACC 
	MOV   R0,A 
	POP   ACC 
	POP   PSW 
	RETI 
 
NEXTC:  CJNE  R0,#00H,NXTC1 
	MOV   A,COMBF 
	CJNE  A,#0AAH,ERRS 
	AJMP  NXTC3 
NXTC1:  CJNE  R0,#01H,NXTC2 
	MOV   A,COMBF+1 
	CJNE  A,#055H,ERRS 
	AJMP  NXTC3 
NXTC2:  CJNE  R0,#02H,NXTC3 
	MOV   A,COMBF+2 
	CJNE  A,#01H,ERRS 
 
NXTC3:  INC   BFPOI 
        POP   ACC 
	MOV   R0,A  
        POP   ACC 
	POP   PSW 
	RETI 
	 
ERRS:   MOV   BFPOI,#00H 
	ACALL ANSE1 
        POP   ACC 
	MOV   R0,A  
	POP   ACC 
	POP   PSW 
	RETI 
 
;------------------------------------ 
ANSER:  CLR ES0  
	mov  SFRPAGE,   #UART0_PAGE 
        MOV   SBUF0,#055H 
	JNB   TI0,$ 
	CLR   TI0 
 
	mov  SFRPAGE,   #UART0_PAGE 
	MOV   SBUF0,#0AAH 
	JNB   TI0,$ 
	CLR   TI0 
	SETB  ES0 
	RET 
;----------------------------------------------------- 
ANSE1: 	CLR ES0 
 
	MOV  SFRPAGE,   #UART0_PAGE 
	MOV   SBUF0,#055H 
	JNB   TI0,$ 
	CLR   TI0 
 
	MOV  SFRPAGE,#UART0_PAGE 
	MOV   SBUF0,#099H 
	JNB   TI0,$ 
	CLR   TI0 
	SETB ES0 
	mov 20h,#00h 
	mov 21h,#00h 
	mov 22h,#00h 
	mov 23h,#00h 
	mov 24h,#00h 
	mov 25h,#00h 
	RET 
 
;============================================ 
T3INT:  PUSH ACC 
	PUSH DPH 
	PUSH DPL 
	PUSH PSW 
	 
	MOV DPTR,#TIMERL 
	MOVX A,@DPTR 
	DEC A 
	MOVX @DPTR,A 
	JNZ TTIM1 
	MOV DPTR,#TIMERH 
	MOVX A,@DPTR 
	DEC A 
	MOVX @DPTR,A 
	JNZ  T3IM1 
	 
T3IM1:	ANL 91H,#7FH 
	POP PSW 
        POP DPL 
	POP DPH 
	POP ACC 
	RETI 
;============================================= 
SETTIME: MOV TMR3L,#90     ;10秒=200  5秒=100 
         MOV TIMEOVER,#00H  
         MOV TH0,#3CH 
         MOV TL0,#0B0H 
	 MOV TMOD,#21H 
         SETB ET0 
	 SETB EA 
	 SETB TR0 
         RET 
;----------------------------- 
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 TIMEOVER,#01H  ;置T0定时到 
	LCALL ENDSAMP      ;stop sample 
	CLR ET0 
 
TTIM1:	POP PSW 
	POP ACC 
	SETB TR0 
	RETI 
 
;----------------------------------------------------------- 
;      START SAMPLE      3K 
;------------------------------------------------------------ 
SAMPLE:	LCALL STARTADS1255 
	MOV DPTR, #0000H 
         
SAMPLE1:LCALL GETADS1255 
	MOV A,R7 
	MOVX @DPTR, A 
	INC DPTR 
	MOV A,R6 
	MOVX @DPTR, A 
	INC DPTR 
	MOV A,R5 
	MOVX @DPTR,A 
	INC DPTR 
	MOV A,DPH	 
	CJNE A,#0CH,SAMPLE1 
	MOV A,DPL 
	CJNE A,#00H,SAMPLE1 
	MOV DPTR, #0000H 
RET2:	RET 
 
;-------------------------------------------------- 
;       STOP SAMPLE 
;-------------------------------------------------- 
ENDSAMP: 
	 RET 
	 
;-------------------------------------------------- 
;       TEST DATA 
;--------------------------------------------------   
LOAD:	MOV DPTR,#0000H 
        MOV A,#00H 
 
	MOV R0,#100 
LOAD2:  MOV R1,#100 
LOAD1:	INC A 
	MOVX @DPTR, A 
	INC DPTR 
 
;	MOV A,#00H 
	MOVX @DPTR, A 
	INC DPTR 
 
;	MOV A,#00H 
	MOVX @DPTR,A 
	 
	INC DPTR 
	DJNZ R1,LOAD1 
        DJNZ R0,LOAD2 
	MOV DPTR, #0000H 
	LJMP LOAD 
	RET 
;-------------------------------------------------- 
END