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

📄 wrs232c.asm

📁 C8051F.rar
💻 ASM
字号:
;参考程序A: ;WRS232C.ASM 程序实现RS-232通信,运行前将TX0和P00 短接,RX0和
;P01短接,当接收到一个数据后,再将接收到的数据送出。
$include (c8051f020.inc)			    ;SFR declarations
BAUDRATE	  EQU		9600            ;UART0的波特率
SYSCLK		  EQU		11059200        ;系统时钟频率
BUZ		      EQU		P3.5            ;P3.5=0,响蜂鸣器
ReceiveBit	EQU		20H.0		    	  ;接收标志位
       ORG		0
       LJMP	main
       ORG	23H     ; UART0中断入口
       AJMP	UART0_ISR          
  ORG		0100H
main:   MOV	WDTCN,#0deH   ;关看门狗
	    MOV	WDTCN,#0adH
	    CLR	ReceiveBit     ;清除标志位
	    LCALL	SYSCLK_IniT     ;初始化外部晶体
	    LCALL	PORT_Init      ;初始化交叉开关和I/O口
	    LCALL	UART0_Init     ;初始化UART0
	    SETB	EA
	    SETB	ES
LOOP:   JNB	ReceiveBit,LOOP	     ;是否接收到一个数据
       	CLR	ES		             ;关串口中断0
       	CLR	EA		             ;关总中断
	    CLR	ReceiveBit	         ;清接收标志位
	    LCALL	Delay			 ;延时
	    MOV	A,R1
       	MOV	SBUF0,A		     ;将接收到数据送出
TINT:   JNB	TI,TINT		     ;发送标志位是否产生
	    CLR	TI		         ;清发送标志位
	    CLR	BUZ		         ;蜂鸣器响
	    LCALL	Delay		 ;延时
	    SETB	BUZ		     ;蜂鸣器灭
	      SETB	ES	             ;开中断标志
	      SETB	EA      
	      LJMP	LOOP
	      RET
;用外部晶体11.0592MHz作为系统时钟
SYSCLK_Init:
	    MOV   OSCXCN, #67h     ;使能外部晶体 ,11.0592MHZ 不分频
        CLR   A                ;等待至少1ms 
        DJNZ  acc, $           ;等待512us
        DJNZ  acc, $           ;等待512us
osc_wait:                      ;查询XTLVLD-->1?
        MOV   a, OSCXCN
        JNB   acc.7, osc_wait
        ORL   OSCICN, #08h     ;选择外部晶体作为系统时钟 
        RET
;初始化交叉开关和I/O口
PORT_Init:
	MOV  XBR0,#04H             ;使能UART0
	MOV  XBR1,#00H
	MOV  XBR2,#40H	          ;使能交叉开关和弱上拉
	ORL  P0MDOUT,#01H	      ;使能TX0作为推挽输出
	ORL  P3MDOUT,#0H          ;使能P3.5 作为推挽输出,驱动蜂鸣器.
	RET
;UART0 用T1作波特率发生器
UART0_Init:
	MOV  SCON0,#50H	;SCON0: 模式1, 10-bit UART, 使能RX
	MOV  TMOD,#20H	;TMOD: 定时器T1, 模式2, 8-bit 自动重载
	MOV  TH1,#0B8H	;设置定时器1作为波特率的重载值
                	;TH1=256-11059200/9600/16=256-72=184=0B8H
	SETB TR1 ;打开定时器1 
	ORL  CKCON,#10H	;定时器1用系统时钟作为它的时基
	ORL  PCON,#80H	;SMOD0 = 1;波特效率加倍
	RET
;串口中断0服务子程序
UART0_ISR:
	JB  TI,SENDINT  ;是发送中断还是接收中断
	CLR RI 	       	;清接收标志位
	MOV A,SBUF0
	MOV R1,A        ;保存接收到的数据
	SETB ReceiveBit	;置接收标志
SENDINT:
 	CLR  TI		      ;清发送标志位
	RETI
;延时子程序
Delay:
    MOV   R7, #18h			
Delay1:
    MOV   R6, #80h
Delay0:
    MOV   R5, #00h
    DJNZ  R5, $
    DJNZ  R6, Delay0
    DJNZ  R7, Delay1
	  RET
	END

⌨️ 快捷键说明

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