51单片机串口通信试验汇编程序 下载本文

内容发布更新时间 : 2024/9/20 14:32:44星期一 下面是文章的全部内容请认真阅读。

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