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

📄 ads1255asm.asm

📁 这是本人已经完全调试通过的用C8051F020驱动的ADS1255程序,有C和汇编混编的
💻 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

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -