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

📄 uart2.asm

📁 aduc814的汇编程序例子
💻 ASM
字号:
;====================================================================
;
; Author        : ADI - Apps
;
; Date          : Febuary 2001
;
; File          : UART2.asm
;
; Hardware      : ADuC814
;
; Description   : This Program transmits the numbers 0->7F (starting
;                 with 0) down the UART in ASCII form to the PC where
;                 they can be viewed using the preconfigured 
;                 Hyperterminal program.  (c:\ADuC\9600com1.ht)
;                 After the transmission of the 16 bytes a 5 second
;                 delay is called and the process is repeated.
;
;====================================================================
;              
$MOD814                                ;Use 8052 predefined Symbols

LED	EQU	P3.3

;____________________________________________________________________
                                                  ; BEGINNING OF CODE
CSEG
ORG 0000H

	JMP MAIN

ORG 0060H                    ; Start code at address above interrupts			


MAIN:                          ; Main program
       
        MOV     RCAP2H,#0FFh   ; config UART for 9830baud
        MOV     RCAP2L,#-7     ; (close enough to 9600baud)
        MOV     TH2,#0FFh
        MOV     TL2,#-7
        MOV     SCON,#52h
        MOV     T2CON,#34h

START:        
        CPL      LED           ; CPL LED with each transmission
        MOV      DPTR, #TITLE 
        CALL     SENDSTRING    ; write title block on screen

        MOV      R0, #00H    ; Start transmissions from 0
        MOV      R1, #08H    ; Start a new line after 8 transmissions
      
LOOP1:                        ; Every eight transmissions start on a
                              ; new line
        MOV      A, #10       ; Transmit a linefeed
        CALL     SENDCHAR
        MOV      A, #13       ; Transmit a carriage return
        CALL     SENDCHAR

        MOV      R1, #08H 
      
LOOP2:  
        MOV      A, #20H      ; Transmit a SPACE (=ASCII 20) between
                              ; transmissions on same line
        CALL     SENDCHAR

        MOV      A, R0        ; Transmit R0 = present data
        CALL     SENDVAL
        INC      R0           ; increment data
        
        CJNE     A, #7FH, CONT ; check if data =7F, if no continue
        JMP      WAIT5S        ; if = 7F wait 5s and repeat

CONT:   DEC      R1            ; decrement R1....
        MOV      A, R1          
        CJNE     A, #00H, LOOP2 ; and check if new line is required
                                ; jump to loop 2 for a space
        JMP      LOOP1          ; jump to loop 1 for a new line
        

WAIT5S: MOV      A, #50         ; wait 5s 
        CALL     DELAY   
        JMP      START        ; start transmissions again
        

;____________________________________________________________________
                                                         ; SENDSTRING

SENDSTRING:     ; sends ASCII string to UART starting at location
                ; DPTR and ending with a null (0) value

        PUSH    ACC
        PUSH    B
        CLR     A
        MOV     B,A
IO0010: MOV     A,B
        INC     B
        MOVC    A,@A+DPTR
        JZ      IO0020
        CALL    SENDCHAR
        JMP     IO0010
IO0020: POP     B
        POP     ACC

        RET

;____________________________________________________________________
                                                           ; SENDCHAR

SENDCHAR:       ; sends ASCII value contained in A to UART

        JNB     TI,$            ; wait til present char gone
        CLR     TI              ; must clear TI
        MOV     SBUF,A

        RET

;____________________________________________________________________
                                                            ; SENDVAL

SENDVAL:        ; converts the hex value of A into two ASCII chars,
		; and then spits these two characters up the UART.
                ; does not change the value of A.

        PUSH    ACC
        SWAP    A
        CALL    HEX2ASCII
        CALL    SENDCHAR        ; send high nibble
        POP     ACC
        PUSH    ACC
        CALL    HEX2ASCII
        CALL    SENDCHAR        ; send low nibble
        POP     ACC

        RET


;____________________________________________________________________
                                                          ; HEX2ASCII

HEX2ASCII:      ; converts A into the hex character representing the
                ; value of A's least significant nibble

        ANL     A,#00Fh
        CJNE    A,#00Ah,$+3
        JC      IO0030
        ADD     A,#007h
IO0030: ADD     A,#'0'

        RET

;____________________________________________________________________
                                                              ; DELAY
                                                        ; 100ms DELAY
DELAY:					; Delays by 100ms * A
					; 100mSec based on 2.097152MHZ 
					; Core Clock 
					; i.e. default ADuC814 Clock

		MOV	R2,A		; Acc holds delay variable
 DLY0:		MOV	R3,#022h	; Set up delay loop0
 DLY1:		MOV	R4,#0FFh	; Set up delay loop1
		DJNZ	R4,$		; Dec R4 & Jump here until R4 is 0
		DJNZ	R3,DLY1         ; Dec R3 & Jump DLY1 until R3 is 0
		DJNZ	R2,DLY0		; Dec R2 & Jump DLY0 until R2 is 0
		RET			; Return from subroutine

;____________________________________________________________________


TITLE:    DB 10,10,13,'____________________________________',10,13
          DB 'Analog Devices MicroConverter ADuC814',10,13
          DB '         UART Demo Routine',10,13
          DB '  Transmission of Data from 0 to 7F',10,13,0

END

⌨️ 快捷键说明

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