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

📄 ad7730 spi serial convert.asm

📁 AD7730,SPI接口的连续转换程序,转换速率可自己设定
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;----------------------------------------------------------------------------
Delay3:     mov    R5,#100   ;1s delay
DELAY4:    MOV    R6,#50
DELAY5:    MOV    R7,#100
wait1:      JNB    RDY_,DELAYQ1
           DJNZ   R7,wait1
           DJNZ   R6,DELAY5
           DJNZ   R5,DELAY4
           RET
DELAYQ1:   setb   p2.7
           ret
;---------------------------------------------------------------------------
InitKey:   CLR    KeyGetF
           CLR    KeyPress
           Ret
;---------------------------------------------------------------------------
keyscan:   Mov   keyport,#00001111b
           Mov   A,KeyPort
           Cpl   A
           Anl   A,#00001111b
keyQ:      Ret
;----------------------------------------------------------
ReadKey:   ACALL   keyscan
           jnz     ReadKey1
           Clr     keypress
           Ret

ReadKey1:  Jb    Keypress,keyQ
           Mov   R2,#11101111b
           MOV   R4,#0

ReadkeyLP: Mov   KeyPort,R2
           Mov   A,KeyPort

           Mov   B,#0
           Jnb   Acc.0,keyfind      ;ray 1=0,find key
           Mov   B,#4
           jnb   Acc.1,keyfind      ;ray 2=0,find key
           mov   B,#8
           jnb   Acc.2,keyfind      ;ray 3=0,find key
           MOV   B,#12
           Jnb   Acc.3,keyfind      ;ray 4=0,find key
           Mov   A,R2
           Rl    A
           MOV   R2,A
           INC   R4
           CJNE  R4,#4,ReadkeyLP
           AJmp  keyQ

keyfind:   MOV   A,R4
           ADD   A,B
           Mov   Dptr,#KeyTab
           MOVC  A,@A+DPTR
           MOV   keycode,A
           SETB  KeyPress
           Setb  keyGetF
           Ret
;------------------------------------------------------
;Key
;Old Scan Code    01  02  03  04  05  06  07  08  09  00  10  11  12  13  14  15
KeyTab:    DB    01h,02h,03H,04h,05h,06h,07h,08h,09h,00H,0AH,0BH,0CH,0DH,0EH,0FH
;---------------------------------------------------------------------------
Init_7219:    ;初始化7219
              MOV    SDisbuf,#SHUT_DOWN   ;开启正常工作模式(#01h)
              MOV    SDisbuf+1,#01H
              CALL   WRITE_7219

              MOV    SDisbuf,#DISPLAY_TEST ;选择工作模式(#00h)
              MOV    SDisbuf+1,#00H
              CALL   WRITE_7219

              MOV    SDisbuf,#DECODE_MODE  ;译码寄存器地址
              MOV    SDisbuf+1,#00H       ;选择全译码方式
              CALL   WRITE_7219

              MOV    SDisbuf,#SCAN_LIMIT   ;扫描界限寄存器地址
              MOV    SDisbuf+1,#07H        ;选择8个LED
              CALL   WRITE_7219

              MOV    SDisbuf,#INTENSITY   ;亮度控制寄存器地址
              MOV    SDisbuf+1,#04H       ;设置LED亮度
              CALL   WRITE_7219
              RET
;---------------------------------------------------------------------------
DISPLAY:      ;7219_DISPLAY
              MOV    Dptr,#DisTab
              MOV    R7,#8
              MOV    R0,#DISBUF       ;根据DisBuf中的值去查DisTab,找字模
              MOV    SDisbuf,#01H     ;先送要显示的位
DIsPLAY1:      MOV    A,@R0
              Movc   A,@A+Dptr
              MOV    SDisbuf+1,A      ;后送要显示的数据
              CALL   WRITE_7219       ;真正送要显示的位和数据
              INC    SDisbuf          ;下一位
              INC    R0
              DJNZ   R7,DIsPLAY1       ;显示8个数码管
              RET
;------------------------------------------------------------------
WRITE_7219:   ;7219数据接收从高到低,第一字节为地址,第二字节为数据
              CLR     LOAD
              Mov     R1,#SDisbuf
              Mov     R2,#2
W7219_LOOP1:  MOV     R3,#8
              MOV     A,@R1
W7219_LOOP:   CLR     CLK
              RLC     A
              MOV     DIN,C
              SETB    CLK
              DJNZ    R3,W7219_LOOP
              INC     R1
              DJNZ    R2,W7219_LOOP1
              SETB    LOAD
              RET
;------------------------------------------------------------------
DisTab:
;          char:  "0"  "1"  "2"  "3"  "4"  "5"  "6"  "7"  "8"  "9"
;          Index:  0    1    2    3    4    5    6    7    8    9
           db     07eH,030H,06dH,079H,033H,05bH,05fH,070H,07fH,07BH

;          char:  "A"  "b"  "c"  "d"  "E"  "F"  " "  "-"  "P"
;          Index  0AH  0bH  0cH  0dH  0eH  0fH  10H  11H  14H
           DB     077H,01FH,04EH,03DH,04fH,047H,00H, 01H, 067H,

;------------------------------------------------------------------
;SPI单字节发收
SPI_ByteSR:Clr     CS_
           MOV     R7,#50
           mov     SPDR,A
SPI_Wait:  Mov     a,SPSR
           ANL     A,#10000000B
           Jnz     SPI_WaitQ
           DJNZ    R7,SPI_Wait
SPI_WaitQ: ;Clr     AdDIN
           Mov     A,SPDR
           SetB    CS_
           RET
;---------------------------------------------------------------------------
;高位AD数据送显示
HdataToDis:
           Mov    A,AD_DataBuf+0
           Mov    R1,#DisBuf+2
           Mov    B,A
           Anl    A,#0FH
           Mov    @R1,A
           Inc    R1
           Mov    A,B
           swap   A
           Anl    A,#0FH
           Mov    @R1,A
           Ret
;---------------------------------------------------------------------------
;低位AD数据送显示
LdataToDis:
           Mov    A,AD_DataBuf+1
           Mov    R1,#DisBuf+0
           Mov    B,A
           Anl    A,#0FH
           Mov    @R1,A
           Inc    R1
           Mov    A,B
           swap   A
           Anl    A,#0FH
           Mov    @R1,A
           Ret
;--------------------------------------------------------------------------
;清内部RAM
CLRRAM:       POP DPH
              POP DPL
              MOV R0,#0FFH
CLRGO:        MOV @R0,#00H
              DJNZ R0,CLRGO
              MOV @R0,#00H
              CLR A
              JMP @A+DPTR
;--------------------------------------------------------------------------
;=================================== Main ==================================
Main:      Mov    Sp,#SysStack
           ACall  CLRRAM
           ACall  InitSystem
           ACall  InitSPI
           ACall  Initled
           ACall  InitKey
           ACall  Init_7219
           ACall  InitDisplay
           ACall  InitCD4097
           ACall  InitAD7730
           ACALL  InitCTC0
;---------------------------------------------------------------------------
MainLoop:  Jbc    Sec250F,DoSec250   ;0.0025s
           Jbc    Sec100F,DoSec100   ;0.01s
           Jbc    Sec10F,DoSec10     ;0.1s
           Jbc    SecF,DoSecond      ;1s
           Ajmp   MainLoop
;---------------------------------------------------------------------------
DoSec250:
           Ajmp    MainLoop
;------------------------------------------------------
DoSec100:
           Ajmp   MainLoop
;------------------------------------------------------
DoSec10:   Acall   HdataToDis
           Acall   LdataToDis
           Acall   DisPlay
           Acall  ReadKey
           Jbc    keyGetF,DoKey
           Ajmp   MainLoop
;------------------------------------------------------
DoSecond:  Cpl    p2.7
           ;Cpl    CD4097_A
           Ajmp   MainLoop
;------------------------------------------------------
DoKey:     ;键值处理
           Mov    A,keycode
           Mov    DisBuf+7,A
           ;Cpl    CD4097_A
           Ajmp   MainLoop
;-----------------------------------------------------------------------
;写模式寄存器 启动-80~+80mv范围单次转换
ADSingleWR:
           CLR    CS_
           ;setb   p2.6
           MOV    A,#02H ;写通讯寄存器#02H 设置下一操作是写模式寄存器
           ACALL  SPI_ByteSR
           MOV    A,#0100000B  ;启动单次转换模式
           ACALL  SPI_ByteSR
           MOV    A,#1011000B
           ACALL  SPI_ByteSR
           SETB   CS_
           RET
;------------------------------------------------------------------------
;写模式寄存器 启动-80~+80mv范围连续转换
ADSConvert:
           CLR    CS_
           MOV    A,#02H
           ACALL  SPI_ByteSR
           MOV    A,#00100000B    ;启动连续转换模式
           ACALL  SPI_ByteSR
           MOV    A,#10110000B
           ACALL  SPI_ByteSR
           SETB   CS_
           RET
;------------------------------------------------------------------------
;Read7730:     mov    a, #11111110b
;Read7730Lp:   clr    Clk7730
;              mov    c, Dout7730
;              rlc    a
;              setb   Clk7730
;              jc     Read7730Lp
;              ret
;===========================================================================
           Org    1000H         ;For 89C51:4KB
           End









⌨️ 快捷键说明

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