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

📄 rs232.asm

📁 ASM51-RS232串行通讯
💻 ASM
字号:
;******************************************************
;           程序功能描述
;   uPSD3251与PC机通过RS232进行全双工通讯。
;   uPSD3251每500ms向PC机上发一个字节,利用串口调试
;   软件观察上发的数据,并可同时利用串口调试软件下发
;   数据至uPSD3251。uPSD3251收到下发指令后,根据下发
;   的指令调整步长,指令分别为0,1,2时,步长分别为1,2,4,
;   其它指令无效,默认步长为1。CPU晶振为11.0592MHz
;******************************************************
WDKEY           DATA    0AEH

TIMER0_H        EQU     0F8H            ;TH0=0F8H,TL0=0D5H,定时2毫秒(晶振:11.0592MHz)		
TIMER0_L        EQU     0D5H		
COUNT           DATA    38H             ;定时器0的计时累计单元
TX_BUFF		DATA	39H		;通信发送缓冲单元
_500MS_OK       BIT     0               ;定时500ms的标志位
    
VAL             DATA    30H             ;串行输出数据的步长存储单元

                ORG     0000H
                JMP     MAIN
                ORG     000BH
                JMP     TIMER0_ISR
                ORG     0023H
                JMP     UART0_RCV

MAIN:	
                MOV     WDKEY,#55H
                MOV     SP,#7FH                  
                LCALL   UART0_INIT      ;初始化UART0
                LCALL   TIMER0_INIT
                MOV     A,#0            ;初始化A为0
                MOV     VAL,#1          ;初始化步长为1
UART0XMIT:
                JNB     TI,UART0XMIT    ;等待串行口发送完一个字节
                CLR     TI 
LOOPWAIT:                     
                JNB     _500MS_OK,LOOPWAIT     ;延时500ms
                CLR     _500MS_OK  
                MOV	A,TX_BUFF
                ADD	A,VAL
                MOV     SBUF,A          ;发送一个字节          
                MOV	TX_BUFF,A                                      
                JMP     UART0XMIT
;******************************************************
;名称:	    UART0_INIT
;功能:	    初始化UART0:9600波特率,方式1,中断允许,高优先级
;入口条件:  无			
;出口信息:  TI=1
;影响资源:  TMOD,TH1,TL1,ET1,TR1,SCON,PCON,PS,IE,TI
;调用程序:  无
;堆栈深度:  0
;******************************************************
UART0_INIT:
                ANL     TMOD,#0FH       ;定时器1方式2
                ORL     TMOD,#20H       
                MOV     TH1,#0FDH       ;9600波特率11.0592MHz
                MOV     TL1,#0FDH
                CLR     ET1             ;禁止定时器1中断
                SETB    TR1             ;启动定时器1
                MOV     SCON,#50H       ;串口方式1,允许接收
                MOV     PCON,#0
                SETB    PS              ;高优先级
                ORL     IE,#90H         ;允许串行中断
                SETB    TI              ;启动发送  
                RET
;******************************************************
;名称:	    UART0_RCV
;功能:	    UART0的接收中断服务程序
;入口条件:  TI=1,RI=1
;出口信息:  步长在VAL中
;影响资源:  RI,VAL
;调用程序:  无
;堆栈深度:  2
;******************************************************
UART0_RCV:
                PUSH    PSW
                PUSH	ACC
                JNB     RI,RCV_REC      ;接收到一个字节
                CLR     RI              ;RI清零                      
                MOV     A,SBUF  
                CJNE	A,#0,CASE0   
                MOV	TX_BUFF,#00H     
                MOV     VAL,#1          ;收到字节为0,则步长等于1
CASE0:
                CJNE    A,#1,CASE1 
                MOV	TX_BUFF,#00H
                MOV     VAL,#2          ;收到字节为1,则步长等于2               
CASE1:
                CJNE    A,#2,RCV_REC
                MOV	TX_BUFF,#00H
                MOV     VAL,#4          ;收到字节为2,则步长等于4
RCV_REC:       
		POP	ACC
                POP     PSW
                RETI
;******************************************************
;名称:	    TIMER0_INIT
;功能:	    初始化定时器0:2ms的定时中断,低优先级
;入口条件:  无			
;出口信息:  COUNT=250,_500MS_OK=0
;影响资源:  TMOD,TH0,TL0,PT0,ET0,EA,TR0,COUNT,_500MS_OK
;调用程序:  无
;堆栈深度:  0
;******************************************************
TIMER0_INIT:
                ANL     TMOD,#0F0H	;定时器0,工作方式为方式1 
                ORL     TMOD,#01H                                      		
                MOV     TH0,#TIMER0_H   ;置计数初值                            
                MOV     TL0,#TIMER0_L                                                             	
                CLR     PT0             ;低优先级		
                SETB    ET0             ;使能定时器0中断源	
                SETB    EA              ;允许所有中断源                                      			
                SETB    TR0             ;启动定时器0 
                MOV     COUNT,#250         
                SETB    _500MS_OK       
                RET

;******************************************************
;名称:	    TIMER0_ISR
;功能:	    2ms的定时中断,每500ms置标志位_500MS_OK
;入口条件:  TF0=1			
;出口信息:  _500MS_OK=1
;影响资源:  TH0,TL0,COUNT,_500MS_OK
;调用程序:  无
;堆栈深度:  1
;******************************************************
TIMER0_ISR:	
                PUSH	PSW
                MOV     TH0,#TIMER0_H           ;重新装载计数值                              
                MOV     TL0,#TIMER0_L  
                DJNZ    COUNT,TIMER0REC
                MOV     COUNT,#250
                SETB    _500MS_OK
TIMER0REC: 
                POP	PSW                                                        			
                RETI                     

                END
            

⌨️ 快捷键说明

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