51单片机串口通信试验汇编程序

51单片机串口通信试验汇编程序
51单片机串口通信试验汇编程序

51 单片机串口通信试验汇编程序

(今天是硬生生的把它给抠出来了):PC 通过串口助手向单片机系统传递命令和数据:以A5 开始,以5A 结束;中间是数据,长度不一,要求把数据部分用led 灯显示出来;并且要求循环显示;

//This is my x_Ed program code

//we use it as the pc communicated with the mcu

//At the same time,we want to see the result by LCD;

STFLAG BIT 00H // 收到起始码标志, 1 为收到起始码EDFLAG BIT 01H // 到结束码标志, 1 为收到结束码TMFLAG BIT 02H // 定时时间到标志, 1 为定时时间到ORG 0000H

SJMP Initialize// 主程序入口(初始化程序)

ORG 000BH // 定时器0 入口

LJMP TIMER0 // 定时器0 中断

ORG 0023H // 串口中断程序的入口地址

LJMP Transfer // 跳转到接受中断入口

///////////////////////////////////////////////////////////////

ORG 0050H

Initialize:

MOV SP,#70H // 设置堆栈

MOV TMOD,#21H //T1 工作方式 2 T0 工作MOV TH1,#0FDH // 波特率9600

MOV TL1,#0FDH //波特率9600 自动重装载MOV TH0,#3CH //定时50ms

MOV TL0,#0BH // 定时50ms

MOV SCON,#50H // 串口工作方式 1

MOV R6,#00H

// 定时次数计数器20 一秒

MOV R5,#00H //接收数据长度计数器

MOV R4,#00H //控制输出控制寄存器

MOV R0,#30H //数据存储地址

MOV R1,#30H //控制输出的数据缓存

CLR STFLAG //清起始标志位

CLR EDFLAG //清结束标志位

CLR TMFLAG //清时钟标志位

SETB PS //提高串口中断的优先级SETB TR1 // 打开定时器1;

SETB ES //打开串口中断允许位

SETB ET0 // 定时器0 中断允许位

SETB EA //打开全局中断允许位

///////////////// 等待接受命令//////////////////////// Main: JB STFLAG ,NODE3 //已经收到起始位

SJMP Main // 未起始继续等待

NODE3: JB EDFLAG,NODE4 // 已经收到结束位

SJMP Main // 未结束继续等待

NODE4: SETB TR0 // 打开定时器0;

NODE5: JB TMFLAG,OUTPUT

SJMP NODE5

/////////////////// 等待上位机传送数据并记录////////

Transfer: CLR ES

MOV A,SBUF

CJNE A,#0A5H,NODE0 // 检测到起始位

SETB STFLAG

SJMP JIEDIAN

NODE0: CJNE A,#05AH,NODE1 // 检测到结束位

SETB EDFLAG

MOV DPH,R5

MOV R4,DPH

clr ES //打开串口中断允许位

SJMP ret00

NODE1: MOV @R0,A // 既非起始码,又非结束码,则为数据INC R0

INC R5

MOV SBUF,#055H

JIEDIAN: CLR TI

CLR RI

SETB ES

ret00: RETI

TIMER0: CLR TR0

MOV TH0,#3CH

MOV TL0,#0B0H INC R6

CJNE R6,#20,RTN

SETB TMFLAG

MOV R6,#00H

RTN: SETB TR0

RETIOUTPUT: CLR TR0 clr TMFLAG MOV A,@R1 MOV P1,A INC R1 DJNZ R4,NODE4 MOV R1,#30H CLR TMFLAG

MOV DPH,R5

MOV R4,DPH

SJMP NODE4

RETI

END

相关主题
相关文档
最新文档