;**************************************************** ;W77E516双串口演示程序 ;串口0发送00H-0FH的16个数据,用定时器2作为波特率发生器 ;串口1发送10H-1FH的16个数据,用定时器1作为波特率发生器 ;长沙菊阳微电子有限公司 www.jywdz.com ;**************************************************** $nomod51 #include "D:\Keil\C51\ASM\reg520.inc" ;请根据您计算机上的Keil目录进行修改 ORG 0000H LJMP START ORG 30H START: MOV SP,#5FH ;初始化堆栈 ;串口0发送00H-0FH的16个数据 MOV SCON0,#01000000B ;串口0工作于方式1 MOV A,#00H ;待送的第一个数据 MOV R1,#16 ;待送的数据个数 MOV RCAP2H,#0FFH MOV RCAP2L,#0B8H ;4800波特,#B8h 11.0592M;#88h 18.432M;#7dh 20M;#70h 22.1184M MOV TH2,#0FFH MOV TL2,#0B8H ;4800波特,#B8h 11.0592M;#88h 18.432M;#7dh 20M;#70h 22.1184M MOV PCON,#00H SETB RCLK SETB TCLK SETB TR2 SEND0: MOV SBUF0,A LOOP0: JBC TI,NEXT0 ;是否送完从00H开始的16个数据? AJMP LOOP0 NEXT0: CALL DELAY ;延时 INC A DJNZ R1,SEND0 ;串口1发送10H-1FH的16个数据 MOV TMOD,#00100000B ;定时器T1设置为方式2作波特率发生器 MOV TH1,#0FAH ;4800波特定时初值:FA,11.0592M;F6,18.432M;F5,20M;F4,22.1184M MOV TL1,#0FAH SETB TR1 ;定时器T1开始运行。 MOV SCON1,#01000000B ;串口1工作于方式1 MOV A,#10H ;待送的数据 MOV R1,#16 SEND1: MOV SBUF1,A LOOP1: JBC TI1,NEXT1 ;是否送完从10H开始的16个数据? AJMP LOOP1 NEXT1: CALL DELAY ;延时 INC A DJNZ R1,SEND1 SJMP $ ;延时程序 DELAY: MOV R7,#10 DELAY1: MOV R6,#200 DELAY2: NOP NOP NOP NOP DJNZ R6,DELAY2 DJNZ R7,DELAY1 RET END