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

📄 16c550.asm

📁 16c550驱动程序 16c550驱动程序
💻 ASM
字号:
RBR_16C550  EQU   8200H    ;接收缓冲寄存器(READ ONLY)  (DLAB=0)
THR_16C550  EQU   8200H    ;发送缓冲寄存器(WRITER ONLY)(DLAB=0)
IER_16C550  EQU   8201H    ;中断使能寄存器(DLAB=0)
IIR_16C550  EQU   8202H    ;中断识别寄存器(READ ONLY)
LCR_16C550  EQU   8203H    ;线控制寄存器  
LSR_16C550  EQU   8205h    ;线状态寄存器
MSB_16C550  EQU   8201H    ;除数锁存器    (DLAB=1)
LSB_16C550  EQU   8200H    ;除数锁存器    (DLAB=1)
FCR_16C550  EQU   8202H    ;FIFO控制寄存器(WRITE ONLY)

BTEMT       BIT   ACC^6
BRBR        BIT   ACC^0

ORG         0000H

MOV    DPTR,#LCR_16C550 ;除数锁定允许
MOV    A,#83H 
MOVX   @DPTR, A 
MOV    DPTR,#LSB_16C550 ;波特率为9600baud 
MOV    A,#0cH 
MOVX   @DPTR, A 
INC    DPTR 
CLR    A 
MOVX   @DPTR, A
NOP
NOP
MOV    DPTR,#FCR_16C550 ;使能FIFO
MOV    A,#01H 
MOVX   @DPTR, A 
NOP
NOP
MOV    DPTR,#LCR_16C550 ;除数锁定禁止
MOV    A,#03H           ;8位数据位,一位停止位,无奇偶校验,DLAB=0;
MOVX   @DPTR, A 
NOP

MOV     R0,#30H
MOV     R6,#06H
lJMP    LOOP1        ;跳到循环发送
;LJMP    LOOP2        ;跳到循环接收

LOOP1:
    
     MOV     DPTR,#THR_16C550 
     MOV     A,#066H    
     MOVX    @DPTR, A 
     
     MOV     DPTR,#LSR_16C550
WAITT:     
     MOVX    A,@DPTR

     JNB     BTEMT,WAITT  ;判断TEMT位是否为1
     LCALL   DL1S
     AJMP    loop1
;--------------------------------------------------------     
LOOP2:
     MOV     DPTR,#LSR_16C550
WAITR:     
     MOVX    A,@DPTR
     JNB     BRBR,WAITR  ;判断RBR位是否为1
     
     MOV     DPTR,#RBR_16C550
     MOVX    A,@DPTR     ;读取RBR寄存器即是接收到的数据
     MOV     @R0,A
     INC R0
     DJNZ R6,LOOP2
     LCALL   DL1S
     AJMP    $
;--------------------------------------------------------      
;******************
 ;     延时程序    ;
;******************
	 DL1MS:  MOV   R3, #0F9H    ;延时 1250US  只为DISPLY所调用
	 DL1MS1: NOP
		 NOP
	         NOP
		 DJNZ  R3, DL1MS1
                 RET

	 DL50MS: MOV   R7, #0AH     ;50毫秒延时程序
	 DL50M1: DJNZ  R7, DL50M1   ; 调用10次
	     	 RET
	    
         DL100:  ACALL DL50MS       ;延时100毫秒
	         ACALL DL50MS
		 RET  
	    ;
	 DL05S: ACALL DL100         ; 延时0.5秒
	        ACALL DL100
		ACALL DL100
	        ACALL DL100
                ACALL DL100
                RET
          
	    ;
	DL1S:   ACALL DL05S         ;延时1秒
		ACALL DL05S
                RET   
     
END

⌨️ 快捷键说明

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