?? 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
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -