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

📄 hc08sci.asm

📁 HC08通用SCI程序。HC08SCI.ASM
💻 ASM
📖 第 1 页 / 共 2 页
字号:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                                            ;
;                          Main Program Loop                                 ;
;                                                                            ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

MAIN:   sta     COPCTL                  ; Kick the dog.
        lda     CHAR                    ; Check for flag (CHAR) indicating
        cmp     #$55                    ;  -received string delimiter found.
        bne     END                     ; Loop to END if not found.
        jsr     SCITRANS_SUB            ; Echo input.
        mov     #$00,COUNT              ; Clear COUNT for next input.

END:    brset   0,PORTB,MAIN            ; Look for button = 0 (PTB0)
TEST1:  jsr     DELAY                   ;  -(button pressed).
        brset   0,PORTB,MAIN              ; Check again for debounce.
        bsr     SEND                    ; If button pressed send message.
        bra     MAIN

MSG:    fcb     $4D                     ; Message string; "MC68HC708XL36 :"
        fcb     $43
        fcb     $36
        fcb     $38
        fcb     $48
        fcb     $43
        fcb     $37
        fcb     $30
        fcb     $38
        fcb     $58
        fcb     $4C
        fcb     $33
        fcb     $36
        fcb     $20
        fcb     $3A
        fcb     $0D
        fcb     $00
        fcb     $00


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                                            ;
;                    Subroutine Body Includes Section                        ;
;                                                                            ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;; SEND SUBROUTINE

SEND:    ldhx    #MSG            ; Go to start of message.
CONT:    jsr     CHKTDRE         ; Check if transmitter ready.
TEST2:   mov     X+,SCDR         ; Send first character.
         lda     ,X
         cmp     #$0D            ; Check if character is 'ENTER KEY'($0D)
         beq     EXIT            ;  -and end transmission if equal.
         jmp     CONT            ; Loop to next character.
EXIT:    jsr     CHKTDRE         ; Check if transmitter ready.
         mov     #$0D,SCDR       ; Send Carriage Return to dumb terminal.
         rts
;;;;;;;;;;;;;;;;;;;;;; END TRANSMIT SUB



;;;;;;;;;;;;;;;;; SUBROUTINE CHECK SCS1 TDRE BIT

CHKTDRE: brclr  SCTE,SCS1,CHKTDRE       ; Wait for SCTE to be set.
         rts                            ; Return.
;;;;;;;;;;;;;;;;;;;;;;;; END SUBROUTINE ;;;;;;;;;;;;;;


;;;;;;;;;;;;;;;;;;;;;;;;;; SCI_TRANS SUBROUTINE
SCITRANS_SUB:   ldhx    #REC            ; Go to start of received message.

OUT:            jsr     CHKTDRE         ; Check SCTE flag.
TEST4:          mov     X+,SCDR         ; Send first character.
                lda     ,X              ; Load ACCA
                cmp     #$0D            ; Check if character is 'Enter Key' ($0D)
                beq     FIN             ; End transmission if equal.
                jmp     OUT             ; Send next character.

FIN:            mov     #$00,CHAR       ; Reset variable CHAR.
                jsr     CHKTDRE         ; Check if transmitter ready.
                mov     #$0D,SCDR       ; Send carriage return to dumb terminal.
                rts
;;;;;;;;;;;;;;;;;;;;;; END TRANSMIT SUB


;;;;;;;;;;;;;;;;;;;;;;; DELAY  SUBROUTINE ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;       Begin delay loop for debouncing.

DELAY:            ldhx     #$37CD         ; 3 cycles     14285 iterations.
OUTER:            sta      COPCTL         ; 3 cycles     Kick the dog.
                  aix      #-1            ; 2 cycles
                  cphx     #0             ; 3 cycles
                  bne      OUTER          ; 3 cycles
                  rts                     ; Total cycles/loop = 14
                                          ;  Time per cycle, @ 2MHz internal,
                                          ;  equals 500nS.
                                          ;  Loop iterations = 14285.
                                          ;  Delay time = 14285 ; 14 ; 500nS
                                          ;  equals 100mS.
;;;;;;;;;;;;;;;;;;;;;;;;;; END DELAY SUBROUTINE ;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                                            ;
;               Interrupt Service Routines for Main Routine                  ;
;                                                                            ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;;;;;;;;;;;;;;;;;;;;; RECEIVE SERVICE ROUTINE  ;;;;;;;;;;;;;;;
; RDRF (RECEIVE DATA REGISTER FULL) GENERATES AN INTERRUPT WHEN
; DATA IN SHIFT REGISTER IS TRANSFERED TO SCD

SCIRec_SVR:     pshh                    ; Save H register.
TEST3:          clrh
                ldx     COUNT           ; Get variable COUNT.
                lda     SCS1            ; Clear SCRF bit by reading SCS1.
                lda     SCDR            ; Load ACCA w/ SCDR.
                sta     REC,X           ; Write to RAM receive area.
                inc     COUNT           ; Increment variable COUNT.
                cmp     #$0D            ; Check if character is 'ENTER KEY'
                bne     LAST            ;  -and exit ISR if equal.
                mov     #$55,CHAR       ; Set CHAR at reception of (CR).
LAST:           pulh                    ; Retrieve H register.
                rti

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;                                                                            ;
;               Interrupt and Reset Vectors for Main Routine                 ;
;                                                                            ;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

        org     SCIRec_INT
        fdb     SCIRec_SVR


        org     $FFFE
        fdb     START







⌨️ 快捷键说明

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