|
采用查询的工作方式,编制一个串口通讯程序,实现单片机和PC机之间的串口通讯,其中PC机数据的发送和接收采用超级终端来执行。要求:超级终端发送16个字符给单片机,放在以30H开始的内存单元中;单片机接收成功后,将这16个字符回送给超级终端,每回送一个字符蜂鸣器叫一声。通讯波特率为9600bps 不知道是什么问题,超级终端显示的和键盘输入的字符都不一样..而且键盘输入同一个字符16次,超级终端上显示的字符都不一样..请高人指点 ORG 0000H SJMP MAIN ORG 0050H COMMAND_8255 EQU 3FFFH C_8255 EQU 3FFEH MAIN: CLR EA ;中断屏蔽(强行执行片外程序存储器中的程序) MOV SCON, #50H ;串口以方式1工作 MOV PCON, #00H ;SMOD=0 MOV TMOD, #20H ;定时器T1初始化位方式2 MOV TH1, #0FBH ;T1初值 MOV TL1, #0FBH MOV R1, #30H ;数据存放的起始单元 MOV R0, #10H SETB TR1 ;启动定时器T1 LOOPR: JBC RI, LOOPRR ;判断接受中断标志 SJMP LOOPR LOOPRR: MOV A, SBUF ;接收数据 MOV @R1, A INC R1 DJNZ R0, LOOPR ;判断是否接收完成 CLR TI MOV A, #0DH ;发送回车符 MOV SBUF, A LP: JBC TI, LOOPSS ;准备发送数据 SJMP LP LOOPSS: MOV R0, #10H ;设置要发送数据的个数 MOV R1, #30H ;设置要发送数据的首地址 LOOPS: CLR TI ;清发送中断标志 MOV A, @R1 INC R1 MOV SBUF, A ;发送 LOOP: JBC TI, RING ;发送成功则蜂鸣器鸣叫一声 SJMP LOOP RING: MOV DPTR, #COMMAND_8255 ;蜂鸣器鸣叫子程序 MOV A, #10000000B MOVX @DPTR, A MOV A, #0FFH MOV DPTR, #C_8255 MOVX @DPTR, A ACALL DELAY MOV A, #00H MOVX @DPTR, A ACALL DELAY DJNZ R0, LOOPS ;判断是否发送完成 MOV A, #0DH ;发送回车符 MOV SBUF, A SJMP END0 DELAY: MOV R7, #0FFH ;延时子程序 DELAY1: MOV R6, #0F0H DELAY2: DJNZ R6, DELAY2 DJNZ R7, DELAY1 RET END0: SJMP END0 END
|
|