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

📄 wrs485r.asm

📁 C8051F系列单片机外围电路功能模块程序
💻 ASM
字号:
;参考程序D://文件名:WRS485R.asm接收对方发来的字符(ASCII),LCD显示R>abcd
;实验仪通过UART1实现RS-485通信,运行前应将TX1和P00 短 接,RX1和P01短接.
;当接收到数据后,再将接收到的数据送出。
;WRS485.ASM  用UART1外扩MAX485实现RS-485通信,运行前将TX1和P00 短接,
;RX1和 P01短接,当接收到一个数据后,再将接收到的数据送出。
;WRS485R.ASM
$include (c8051f020.inc)          ;SFR declarations

SYSCLK		EQU	11059200   ; SYSCLK frequency in Hz
BAUDRATE	EQU     9600       ;Baud rate of UART in bps
BUZ		EQU		P3.5
P32		EQU		P3.2 ;接收/发送控制
TIMER1		EQU		SYSCLK/BAUDRATE/16
ReceiveBit	EQU		20H.0
        ORG		0
	AJMP	main
	ORG	0A3H
	AJMP	UART1_ISR
	ORG	0100H
main:
	MOV	WDTCN,#0deH	;关看门狗
	MOV	WDTCN,#0adH
	CLR	ReceiveBit
	LCALL	SYSCLK_Init	;初始化晶体
	LCALL	PORT_Init	;初始化交叉开关和I/O口
	LCALL	UART1_Init	;初始化UART0
	LCALL	LCD_Init		;LCD初始化
	SETB	EA 		;使能总中断标志
	ORL	EIE2,#40H	;使能UART1中断
	CLR	P32		;接收模式
  MOV  	P7,#52H  ;显示R>
	MOV  	P6,#0CH
	MOV  	P6,#0DH
	LCALL	Delay
	MOV  	P7,#3EH
	MOV  	P6,#0CH
	MOV  	P6,#0DH
	LCALL	Delay
LOOP:
	JNB	ReceiveBit,LOOP	;接收到一个数据
	CLR	ReceiveBit	;清接收位
	MOV A,R1        ;接收空字符不显示
	JZ LOOP
	MOV  	P7,A      ;显示接收字符
	MOV  	P6,#0CH
	MOV  	P6,#0DH
	MOV	SBUF1,R1
	LJMP	LOOP
	RET
;使能外部11.0592MHz晶体作为系统时钟
SYSCLK_Init:
	MOV   OSCXCN, #67h            ;使能外部晶体
        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:
	ORL	XBR2,#44H	;使能UART1,交叉开关和弱上拉 
	ORL	P0MDOUT,#01H	;使能TX1作为推挽输出
	ORL	P1MDOUT,#40H	;使能LED作为推挽输出
	ORL	P3MDOUT,#0dfH
	MOV  	P74OUT,#0FFH	;P4-P7口设为推挽方式
	RET
UART1_Init:
	MOV	SCON1,#50H	;SCON1: 模式1, 8位UART,使能RX
	MOV	TMOD,#20H	;TMOD: 定时器1, 模式2, 8位重载
        MOV	TH1,#0B8H	;设置作为波特率定时器1的重载值
				              ;TH1=256-11059200/9600/16=256-72=184=0B8H
	SETB	TR1		;开定定时器1
	ORL	CKCON,#10H	;定时器1用系统时钟作为时基
	ORL	PCON,#10H	;SMOD1 = 1
	RET

;UART1的中断服务子程序
UART1_ISR:
	MOV	A,SCON1
	ANL  A,#01
	CJNE	A,#01H,U_I
	ANL	SCON1,#NOT(01H)	;请接收标志位
	MOV	A,SBUF1;	;保存接收数据
	MOV	R1,A
	SETB	ReceiveBit	;置接收位
U_I:
	ANL	SCON1,#NOT(02H)	;清发送标志位
	RETI
;延时子程序
Delay:  MOV   R7, #08h			
Delay1: MOV   R6, #80h
Delay0: MOV   R5, #00h
        DJNZ  R5, $
        DJNZ  R6, Delay0
        DJNZ  R7, Delay1
	RET
;LCD初始化
LCD_Init:
	MOV  	P6,#09H
	LCALL	Delay
	MOV  	P7,#038H		;两行显示
	MOV  	P6,#08H
	MOV  	P6,#09H
	LCALL	Delay
	MOV  	P7,#0EH			;开显示,开光标,字符不闪烁
	MOV  	P6,#08H
	MOV  	P6,#09H
	LCALL	Delay
	MOV  	P7,#06H			;I/D=1,AC自动增1;S=0,整体显示不移动
	MOV  	P6,#08H
	MOV  	P6,#09H
	LCALL	Delay
	MOV  	P7,#01H			;清除DDRAM,置AC=0
	MOV  	P6,#08H
	MOV  	P6,#09H
	LCALL	Delay
	RET  	
	END

⌨️ 快捷键说明

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