cs5550.asm

来自「CS5532及cs5550的测试程序,包含器件校准,配置等」· 汇编 代码 · 共 645 行 · 第 1/2 页

ASM
645
字号
          setb     et0
          setb     ex0
          setb     ea

          clr      cs
          setb     sck
          mov      a        , #78h                 ; 控制寄存器INT脚开漏设置
          acall    wr_byte
          mov      a        , #00h
          acall    wr_byte
          mov      a        , #00h
          acall    wr_byte
          mov      a        , #10h
          acall    wr_byte
          clr      sck
          setb     cs
          nop
          clr      cs
          clr      sck
          mov      a        , #38h
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          nop
          clr      cs
          setb     sck
          mov      a        , #74h                 ; 开中断
          acall    wr_byte
          mov      a        , #80h
          acall    wr_byte
          mov      a        , #00h
          acall    wr_byte
          mov      a        , #00h
          acall    wr_byte
          clr      sck
          setb     cs
          nop
          clr      cs
          clr      sck
          mov      a        , #34h
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          nop
          clr      cs
          setb     sck
          mov      a        , #40h                 ; 通道1配置值,增益50倍,分频系数为1,下降沿方式
          acall    wr_byte
          mov      a        , #01h
          acall    wr_byte
          mov      a        , #10h
          acall    wr_byte
          mov      a        , #01h
          acall    wr_byte
          clr      sck
          setb     cs
          nop
          clr      cs
          clr      sck
          mov      a        , #00h
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          nop
          clr      cs
          setb     sck
          mov      a        , #5eh                 ; 清除DRDY位
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          clr      sck
          setb     cs
          nop
          clr      cs
          mov      a        , #0e0h                ; 发连续转换命令 e8h
          acall    wr_byte
          nop

          sjmp     $
;----------------------------------------------------------------
; 校准操作(偏移,增益)
;----------------------------------------------------------------
    s_off:clr      cs
          mov      a        , #0c9h                 ; 通道1偏移
          acall    wr_data
          setb     cs

  sys_off:clr      cs
          clr      sck
          mov      a        , #1eh
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          mov      a        , byte_1
          jnb      acc.7    , sys_off
          clr      cs
          clr      sck
          mov      a        , #02h                 ; 通道1偏移值
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          nop
          ajmp     s_off
   s_gain:clr      cs
          mov      a        , #0cah                 ; 通道1增益
          acall    wr_data
          setb     cs
 sys_gain:clr      cs
          clr      sck
          mov      a        , #1eh
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          mov      a        , byte_1
          jnb      acc.7    , sys_gain
          clr      cs
          clr      sck
          mov      a        , #04h                 ; 通道1增益值
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          nop
          ajmp     s_gain
;----------------------------------------------------------------
;软件延时,占用(1EH,1FH)11。059M HZ 晶振
;----------------------------------------------------------------
  dly_1ms:mov      r2      , #4                ;1ms
     lop1:mov      r3      , #120
     lop2:djnz     r3      , lop2
          djnz     r2      , lop1
          ret
 dly_10ms:mov      r2      , #38               ;10ms
     lyp1:mov      r3      , #120
     lyp2:djnz     r3      , lyp2
          djnz     r2      , lyp1
          ret
 dly_50ms:mov      r2      , #189              ;50ms
     lzp1:mov      r3      , #120
     lzp2:djnz     r3      , lzp2
          djnz     r2      , lzp1
          ret
dly_100ms:mov      r2      , #205              ;100ms
     lsp1:mov      r3      , #223
     lsp2:djnz     r3      , lsp2
          djnz     r2      , lsp1
          ret
;*************************************************
; 读数据:占用 A B commd
;*************************************************
  rd_data:nop
          clr      cs
          clr      sck
          mov      a        , #1eh
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          mov      a        , byte_1
          jnb      acc.7    , rd_data
          clr      cs
          clr      sck
          mov      a        , #0eh
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          
          nop
          clr      cs
          setb     sck
          mov      a        , #5eh                 ; 清除DRDY位
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          clr      sck
          setb     cs
          nop
          ret
;-----------------------------------------------------------------------
; 写字节    :占用 A,B
;-----------------------------------------------------------------------
  wr_byte:mov      b    , #8
   wr_bit:clr      sck
          rlc      a
          mov      sdi  , c
          setb     sck
          nop
          djnz     b    , wr_bit
          ret
  wr_data:mov      b    , #8
   rd_bit:rlc      a
          mov      sdi  , c
          setb     sck
          nop
          clr      sck
          djnz     b    , rd_bit
          ret

;-----------------------------------------------------------------------
; 读字节    :占用 A,B
;-----------------------------------------------------------------------
  rd_byte:mov      a    , #0feh
          mov      b    , #8

   rd_sum:mov      c    , sdo
          rlc      a
          mov      sdi  , c

          setb     sck
          nop
          clr      sck
          djnz     b    , rd_sum
          setb     sdi
          ret
;*************************************************
; 复位cs5550:占用 A B R4
;*************************************************
  rst5550:clr      cs
          setb     sdi
          mov      b       , #32
   rst_ok:clr      sck
          setb     sck
          djnz     b       , rst_ok
          clr      sdi
          clr      sck
          setb     sck
          setb     sdi
          ret
;*************************************************
;
;*************************************************
    int_0:push     a
          push     b
          clr      cs
          clr      sck
          mov      a        , #0eh
          acall    wr_data
          acall    rd_byte
          mov      byte_1   , a
          acall    rd_byte
          mov      byte_2   , a
          acall    rd_byte
          mov      byte_3   , a
          setb     sck
          setb     cs
          nop
          clr      cs
          setb     sck
          mov      a        , #5eh                 ; 清除DRDY位
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          mov      a        , #0ffh
          acall    wr_byte
          clr      sck
          setb     cs
          pop      b
          pop      a
          reti

⌨️ 快捷键说明

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