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

📄 monichuankou.txt

📁 由于普通单片机只有一个串口,由于用户可能会用到多个串口,而对于双串口的单片机价格贵,不如自己动手选择两个IO口,自己模拟串口通讯,以下为模拟串口程序.
💻 TXT
字号:
;***************8模拟串口中断服务程序**********
;**************连线是:P3.2--P1.6**************
;******************* P1.7--P1.7****************
Jie_S: 
	CLR EA
	CLR EX0
main1:
 	MOV R1,#50H     ;接收数据首地址
	JNB P1.7,main1 ;jnb p0.1,	;等待高电平		
;**********收到高电平保持120US高电平否则是干扰信号
MAINa:
	mov r7,#60
jieshou:
	jnb P1.7,main    ;p0.1
	djnz r7,jieshou
	CLR P1.7  ;CLR P0.1
	SETB P3.2  ;SETB P0.0
;/////////////////////////将P0.1拉低,并等待P0.0变高
JIESHOU1:
	JNB P3.2,JIESHOU1  ;P0.0
	SETB P1.7      ;P0.1
	MOV R2,#08H
;/////////////////// P0.0变高开始接受信号到49H内 //////////
JIESHOU2:
	JNB P3.2,JIESHOU2  ;P0.0
JIESHOU3:
	NOP
	NOP
	NOP
	NOP
	MOV C,P1.7  ;P0.1
	RRC A
	MOV @R1,A    ;数据送接收地址
JIESHOU4:
	JB P3.2,JIESHOU4  ; P0.0
	DJNZ R2,JIESHOU2
	INC R1                ;地址加1,指向下一个接收数据地址
	CJNE R1,#57H,JIESHOU1 ;控制接收数据个数

	SETB P1.7  ;P0.1			
	SETB P3.2  ;P0.0		
	;ACALL MAIN10
	MOV A,50H
	XRL A,#40H
	JZ CSA1
	SJMP CSA

CSA1:	
	MOV A,50H
	XRL A,51H
	XRL A,52H
	XRL A,53H
	XRL A,54H
	;MOV 56H,A
	XRL A,55H
	JZ CSA2
CSA:
	SETB EA
	SETB EX0
	RETI
CSA2:	MOV A,56H
	XRL A,#0DH
	JZ CSA3
	SJMP CSA
CSA3:
	MOV CUP,#00H 
	MOV R0,#00H
	CALL FF
	SJMP CSA
;AJMP MAIN1
;**************将接收的数据处理******************
MAIN10:
	MOV A,50H
	XRL A,#40H
	JZ CSA
	MOV A,56H
	XRL A,#0DH
	JZ CSA
	MOV CUP,#00H 
	MOV R0,#00H
	CALL FF
	RET;AJMP Main
;**************************************************
;;**************************************************
;口线初始化:	
/*FASONG:	MOV R1,#40H  ;(R1)发送数据首地址				
				;20H通信正常=0通信口正常;否=1	
	CLR P3.2  ;p0.0				;p0.0=0
	SETB P1.7 ;p0.1				;p0.1=1	
;*********************
;等待p0.1=0表应答,
FASONG1:
	MOV R7,#50
;如在100US内p0.1变高表是干扰信号
FASONG2:
	JNB P1.7,FASONG	;p0.1		;p0.1=0=100US---OK
	DJNZ R7,FASONG2
	MOV R7,#30
;如在160US内p0.1不变底表是干扰信号
FASONG3:					
	JNB P1.7,FASONG4  ;p0.1		;100US>p0.1=0<160US-----OK
	DJNZ R7,FASONG3
	AJMP FASONG			;超时不应答,返回
;p0.1=0开始通信	
FASONG4:
	NOP
	NOP 
	SETB P3.2
	NOP 
	CLR P3.2
	ACALL FASONGTA
RET
;xxxxxxxxxxxxxxxxxxxx通信XXXXXXXXXXXXXXXXXX
FASONGTA:
	MOV R3,#08H	
	MOV A,@R1       ;@R1,送数据,发送
FWLP:	RrC A		;先发送最低位
	JC FAWR1
	AJMP FWR0
FAWR1:	SETB P3.2
	SETB P1.7  ;p0.1 ;发送高电平
	nop
	NOP
	NOP
	NOP
	NOP
	NOP
	SETB P3.2  ;p0.0
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR  P3.2  ;p0.0
	NOP
	NOP
	NOP
	NOP
	NOP
	CLR P1.7  ;p0.1
	nop
	NOP
	NOP
	NOP
	NOP
	AJMP FWLP1
FWR0:
	CLR P1.7  ;p0.1					;发送低电平
	nop
	NOP
	NOP
	NOP
	NOP
	SETB P3.2  ;p0.0
	nop
	NOP
	NOP
	NOP
	NOP
	CLR P3.2  ;p0.0
	NOP
	NOP
	NOP
	NOP
	NOP
FWLP1:
	DJNZ R3,FWLP
	INC R1           ;发送数据地址加1,指向下一数据
	CJNE R1,#4EH,FASONG4  ; 控制发送数据个数
;通信OK
	CLR P3.2  ;p0.0
	CLR P1.7  ;p0.1
	MOV 21H,#00H				;=0通信正常标记			
	ret

;**************延时子程序**************************
yansinms:					;延时n毫秒子程序
	mov r4,#63h
qn:	mov r5,#0FAh
	djnz r5,$
	djnz r4,qn
	djnz r7,yansinms
	ret
yansi10Ms:					;延时10毫秒子程序
	mov r4,#07dh
tim:	acall clerwdt
	djnz r4,tim
	ret
yansi100ms:					;延时100毫秒子程序
	mov r4,#63h
q100:	mov r5,#0eAh
	djnz r5,$
	;acall clerwdt
	djnz r4,q100
	ret
yansi1Ms:					;延时1毫秒子程序
	mov r4,#7Dh
tim1:	nop
	nop
	djnz r4,tim1
	ret

⌨️ 快捷键说明

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