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

📄 edac.asm

📁 华中理工大学 林家瑞 教授的《生物医学数字信号处理》书附带的软盘
💻 ASM
📖 第 1 页 / 共 2 页
字号:
        BNE     CHKCOM0
        JMP     RESET

CHKCOM0 JSR     DATOUT

        CMPA    #'I'            if 'I' received from host then perform
        BNE     CHKCOM1         digital input
        JSR     DIGIN
        BRA     CHKCOME

CHKCOM1 CMPA    #'O'            if 'O' received from host then perform
        BNE     CHKCOME         digital output
        JSR     DIGOUT

CHKCOME LDAA    #0
        RTS

        PAGE
*****************************************************************************
**
** TITLE:  Input and Output a full byte on TERMINAL port
**
** DATE:  3/15/91
** 
** PURPOSE:  To read and write a full 8-bit value from host
**
** METHOD:  Waits for TxRDY (DATOUT) or TxRDY (DATIN) and either gives
** or receives a byte from the ACIA.
** 
** CALLING
** CONVENTION:  DATOUT, DATIN
**
** INPUT:  Byte in Acc or RS232 via TERMINAL port from host.
**
** OUTPUT:  RS232 via TERMINAL port to host or byte in Acc.
**
** DESIGNER(S):  Danial J. Neebel
**
** PROGRAMMER:  Danial J. Neebel
**
** NOTES:
**
*****************************************************************************

TXRDY    EQU    %00000010
TDRE     EQU    %10000000
RXRDY    EQU    %00000001
RDRF     EQU    %00100000
RXERR    EQU    %01110000
SCIERR   EQU    %00001110


* Checks if an ACIA is present and if so outputs to ACIA
* if no ACIA is present then outputs on SCI

DATOUT   PSHX
         BRCLR  FLAGS ACIASCI  OUTSCI     if SCI is commport jump to SCI handler
         
DATOUT1  LDX   #ACIA
         LDAB  0,X
         BITB  #TXRDY
         BEQ   DATOUT1
         STAA  1,X
OUTSCIE  PULX
         RTS


OUTSCI   LDX    #REGBAS
OUTSCI1  LDAB   SCSR,X        read status
         BITB   #TDRE
         BEQ    OUTSCI1       loop until tdre=1
         STAA   SCDAT,X       send character
         BRA    OUTSCIE

* END OF DATOUT


DATIN    PSHX
         BCLR    FLAGS RCVDAT

         BRCLR   FLAGS ACIASCI  INSCI     if SCI is commport jump to SCI handler

         LDX     #ACIA           check status
         LDAB    0,X
         BITB    #RXERR
         BNE     DATERR          status = error exit with error
         CLRA
         BITB    #RXRDY
         BEQ     DATINE          no data, return
         LDAA    1,X
         BSET    FLAGS RCVDAT    data received set flag
DATINE   PULX
         RTS

DATERR   BSET    FLAGS RCVERR    set receive error
         CLRA                    return 0
         PULX
         RTS             

INSCI    LDX    #REGBAS
         LDAB   SCSR,X      read status reg
         BITB   #SCIERR    check for error status. 
         BNE    DATERR  
         BITB   #RDRF     check for data received
         BEQ    DATINE    exit jump if rdrf=0
         LDAA   SCDAT,X     read data register
         BSET   FLAGS RCVDAT    data received set flag
         BRA    DATINE


* END OF DATIN

        PAGE
*****************************************************************************
**
** TITLE:  Get sample delay from host
**
** DATE:  3/9/91
** 
** PURPOSE:  This routine gets the sample delay
**
** METHOD:  The host computer should calculate the delay in clock ticks 
** for the EVB.  
** 
** CALLING
** CONVENTION:  GETDELAY
**
** INPUT:  RS232 via TERMINAL port from host.
** 
** OUTPUT:  
**
** DESIGNER(S):  Danial J. Neebel
**
** PROGRAMMER:  Danial J. Neebel
**
** NOTES:
**
*****************************************************************************

GETDELAY JSR    TERMARG
        STD     DELAY
        RTS

* END OF GETDELAY

*****************************************************************************
**
** TITLE:  Get number of channels
**
** DATE:  3/9/91
** 
** PURPOSE:  The EVB needs to know how many channels to send to host
**
** METHOD:  
** 
** CALLING
** CONVENTION:  GETCHAN
**
** INPUT:  RS232 via TERMINAL port from host.
** 
** OUTPUT:  
**
** DESIGNER(S):  Danial J. Neebel
**
** PROGRAMMER:  Danial J. Neebel
**
** NOTES:
**
*****************************************************************************

GETCHAN  JSR    TERMARG
         BITB   #$F0            check for too many channels requested
         BEQ    GETCH1
         LDAB   #1              if too many requested then set to default 1
GETCH1   STAB   CHANMSK
         RTS

* END OF GETCHAN
        PAGE
*****************************************************************************
**
** TITLE:  Terminal Argument
**
** DATE:  3/9/91
** 
** PURPOSE:  Get a hex argument from the terminal
**
** METHOD:  Gets a hex number from the TERMINAL port
** 
** CALLING
** CONVENTION:  TERMARG
**
** INPUT:  RS232 via TERMINAL port from host.
** 
** OUTPUT:  
**
** DESIGNER(S):  Danial J. Neebel
**
** PROGRAMMER:  Danial J. Neebel
**
** NOTES:
**
*****************************************************************************


TERMARG  CLR  SHFTREG
         CLR  SHFTREG+1

TERM0    JSR  DATIN
         BRCLR  FLAGS RCVDAT TERM0

         JSR  DATOUT

         CLR  TMP1      hex indicator
         JSR  HEXBIN
         TST  TMP1
         BNE  TERM3     jump if not hex
         BRA  TERM0

TERM3    LDD  SHFTREG
         RTS

*****************
*   HEXBIN(a) - Convert the ASCII character in a
* to binary and shift into shftreg.  Returns value
* in tmp1 incremented if a is not hex.
*****************
HEXBIN  PSHA
        PSHB
        PSHX
        CMPA #'0'
        BLT  HEXNOT     jump if a < $30
        CMPA #'9'
        BLE  HEXNMB     jump if 0-9
        CMPA #'A'
        BLT  HEXNOT     jump if $39> a <$41
        CMPA #'F'
        BGT  HEXNOT     jump if a > $46
        ADDA #$9        convert $A-$F
HEXNMB  ANDA #$0F       convert to binary
        LDX  #SHFTREG
        LDAB #4
HEXSHFT ASL  1,X        2 byte shift through
        ROL  0,X               carry bit
        DECB
        BGT  HEXSHFT    shift 4 times
        ORAA 1,X
        STAA 1,X
        BRA  HEXRTS
HEXNOT  INC  TMP1       indicate not hex
HEXRTS  PULX
        PULB
        PULA
        RTS



        PAGE
*****************************************************************************
**
** TITLE:  Send Digital Input to Host
**
** DATE:  3/16/91
** 
** PURPOSE:  To allow host to perform digital input from EVB
**
** METHOD:  Disables interrupt then sends digital input value to Host then
** enables interrupts.
** 
** CALLING
** CONVENTION:  DIGIN
**
** INPUT:  Port C
** 
** OUTPUT:  RS232 via TERMINAL port to host.
**
** DESIGNER(S):  Danial J. Neebel
**
** PROGRAMMER:  Danial J. Neebel
**
** NOTES:
**
*****************************************************************************

DIGIN   LDX     #REGBAS          Get value from port A
        LDAA    PORTC,X
        
        JSR     DATOUT          Transmit value to host.
        RTS


*****************************************************************************
**
** TITLE:  Output a digital output from TERMINAL port to port B.
**
** DATE:  3/16/91
** 
** PURPOSE:  To allow host to perform digital output.
**
** METHOD:  Disables interrupts reads a value from host.  Places value
** read from host on PORTB.  Then enables interrupts.
**
** CALLING
** CONVENTION:  DIGOUT
**
** INPUT:  RS232 via TERMINAL port from host.
** 
** OUTPUT:  PORTB
**
** DESIGNER(S):  Danial J. Neebel
**
** PROGRAMMER:  Danial J. Neebel
**
** NOTES:
**
*****************************************************************************

DIGOUT  JSR     DATIN           get byte from host

        BRSET   FLAGS RCVERR DIGOUTE    if error do not change port
        BRCLR   FLAGS RCVDAT DIGOUT     if no data recieved then keep looking

        LDX     #REGBAS         output byte to port
        STAA    PORTB,X

DIGOUTE BCLR    FLAGS RCVERR    clear receive error
        RTS

*****************************************************************************
**
** TITLE:  Analog Channel Transfer
**
** DATE:  3/15/91
**
** PURPOSE:  Transfer all channels requested
**
** METHOD:  Sends 1,2,3, or 4 bytes from the CHANx buffers to the HOST.
** 
** CALLING
** CONVENTION:  CHNOUT
**
** INPUT:  CHANMSK, CHAN1, CHAN2, CHAN3, CHAN4
** 
** OUTPUT:  RS232 via TERMINAL port to host.
**
** DESIGNER(S):  Danial J. Neebel
**
** PROGRAMMER:  Danial J. Neebel
**
** NOTES:
**
*****************************************************************************


CHNOUT  LDAA    CHANMSK         set up to store the channels requested
        STAA    SCRTCH1

        LDAA    #4              check only 8 channels
        STAA    SCRTCH2

        LDX     #CHAN4
CHNOUT1 LSR     SCRTCH1         check channel mask 
        BCC     CHNOUT2         channel mask bit = 0, ignore channel

        LDAA    0,X
        JSR     DATOUT          channel mask bit = 1, channel data to host

CHNOUT2 INX
        DEC     SCRTCH2
        BNE     CHNOUT1
        RTS                     returning here would mean no channels were
*                               output.



*****************************************************************************
* Timer Interrupt location
*****************************************************************************
*       ORG     $0FFE6
* OC2INT  FDB     DACISR

*****************************************************************************
* Reset Vector Location
*****************************************************************************
*       ORG     $0FFFE
* VRST    FDB     EDAC

* END OF FILE

⌨️ 快捷键说明

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