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

📄 ad7730试验0(采用模拟spi单次转换)_ok.asm

📁 研究生毕业设计中编写的AD7730单次AD转换程序
💻 ASM
📖 第 1 页 / 共 2 页
字号:
           DJNZ   R5,DELAY4
           RET
DELAYQ1:   setb   p2.7
           ret
;------------------------------------------------------------------------
;要写入的数据在A中
Write7730:    mov    b, #8
              Clr    CS_
Write7730Lp:  clr    AdSCK
              rlc    a
              mov    AdDIN,c
              setb   AdSCK
              djnz   b,Write7730Lp
              Clr    AdDIN              ; 避免意外复位
              setb   CS_
              ret
;------------------------------------------------------------------------
Read7730:     mov    a, #11111110B
              Clr    CS_
              Clr    AdDIN
Read7730Lp:   clr    SCK
              mov    c,AdDOUT
              rlc    a
              setb   SCK
              jc     Read7730Lp
              setb   CS_
              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:MOV     R7,#50
           mov     SPDR,A
SPI_Wait:  Mov     a,SPSR
           ANL     A,#10000000B
           Jnz     SPI_WaitQ
           DJNZ    R7,SPI_Wait
SPI_WaitQ: Mov     A,SPDR
           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
;---------------------------------------------------------------------------
;高位AD数据送显示
HdataToDis1:
           Mov    A,AD_DataBuf+2
           Mov    R1,#DisBuf+6
           Mov    B,A
           Anl    A,#0FH
           Mov    @R1,A
           Inc    R1
           Mov    A,B
           swap   A
           Anl    A,#0FH
           Mov    @R1,A
           Ret
;---------------------------------------------------------------------------
;低位AD数据送显示
LdataToDis1:
           Mov    A,AD_DataBuf+3
           Mov    R1,#DisBuf+4
           Mov    B,A
           Anl    A,#0FH
           Mov    @R1,A
           Inc    R1
           Mov    A,B
           swap   A
           Anl    A,#0FH
           Mov    @R1,A
           Ret
;---------------------------------------------------------------------------
CH1CntToDis:
           Mov    A,CH1Cnt
           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
;---------------------------------------------------------------------------
CH2CntToDis:
           Mov    A,CH2Cnt
           Mov    R1,#DisBuf+4
           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  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:  Acall   DisPlay
           Ajmp    MainLoop
;------------------------------------------------------
DoSec100:
           Ajmp   MainLoop
;------------------------------------------------------
DoSec10:   Acall   ReadKey
           Jbc     keyGetF,DoKey
           Jb      CloseF,DisQuit
           Acall   HdataToDis
           Acall   LdataToDis
           Acall   HdataToDis1
           Acall   LdataToDis1
           ;Acall   DisPlay
           Ajmp    MainLoop
DisQuit:   ACALL   InitDisplay
           ACALL   CH1CntToDis
           ACALL   CH2CntToDis
           ;Acall   DisPlay
           Ajmp    MainLoop
;------------------------------------------------------
DoSecond:
           Cpl     p2.7
           SETB    CloseF
           Clr     EX0
           Ajmp    MainLoop
;------------------------------------------------------
DoKey:     ;键值处理
           Mov    A,keycode
           Mov    DisBuf+7,A
           Ajmp   MainLoop
;------------------------------------------------------
;===========================================================================
           Org    1000H         ;For 89C51:4KB
           End









⌨️ 快捷键说明

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