微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机串口通信试验汇编程序

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

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

//This is my x_Edprogramcode
//we use it as the pc communicated with themcu
//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
RETI

OUTPUT: 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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top