关于51单片机串口通信问题

DISP1:
clr EA
PUSH ACC
PUSH DPH
PUSH DPL
pd1:
JBC RI,DISP1_1
LJMP pd1
DISP1_1:
MOV A,SBUF
MOV DPTR,#TAB1
MOVC A,@A+DPTR
cjne a,#0f9h,pd2

MOV A,50H ;50H中存放采样值
MOV B,#100
DIV AB
ORL A,#00110000B ;转换成ASCII码
MOV DIS_2,a
mov a,B
MOV B,#10
DIV AB
ORL A,#00110000B ;转换成ASCII码
MOV DIS_3,a

MOV A,b
ORL A,#00110000B ;转换成ASCII码
mov DIS_4,a

CLR TI
MOV A,DIS_2
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示整数第一位

CLR TI
MOV A,DIS_3
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示小数第一位

CLR TI
MOV A,DIS_4
MOV SBUF,A
JNB TI,$ ;发送给PC,通过串口调试助手显示小数第二位

pd2:

POP DPL
POP DPH
POP ACC

MOV SCON,#50H ;设置成串口1方式
SETB EA
RET

TAB1:DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H
DB 0FFH,0FFH,0FFH,0FFH,0FFH,0FFH,0FFH
DB 0C0H,0F9H,0A4H,0B0H,99H,92H,82H,0F8H,80H,90H

想知道这段程序中的
DISP1:
clr EA
PUSH ACC
PUSH DPH
PUSH DPL
pd1:
JBC RI,DISP1_1
LJMP pd1
DISP1_1:
MOV A,SBUF
MOV DPTR,#TAB1
MOVC A,@A+DPTR
cjne a,#0f9h,pd2
还有最下面那个表TAB1是什么意思?实现了什么功能?

这个子程序是串口中断接收服务子程序
DISP1:
clr EA ;关中断
PUSH ACC ;入栈保护
PUSH DPH ;入栈保护
PUSH DPL ;入栈保护
pd1:
JBC RI,DISP1_1 ;判断是否接收完毕一个字节,没有完就等待
LJMP pd1
DISP1_1:
MOV A,SBUF ;将接收缓冲区的值复制出来
MOV DPTR,#TAB1 ;取查表首地址
MOVC A,@A+DPTR ;根据接收的数据值做偏移量取值,也就是说接收的数是十的话,就取TAB1中的第十个数据给累加器。
cjne a,#0f9h,pd2 ;比较从TAB1表中取的数是否为#0F9H,如果是的话继续执行,将采样值转换成ASCII码,并通过串口发出去,不是的话中断返回。

你这个程序是从一个大程序截取的一段,单纯看这一段的话没有实际意义
温馨提示:内容为网友见解,仅供参考
无其他回答

51单片机串口通信是全双工的,但是为什么又说它的发送和接受不可以同时进...
51单片机串口通信是全双工的,发送和接受可以同时进行。不可以同时进行的是半双工。全双工方式分别由两根不同的传输线传送数据时,通信双方都能在同一时刻进行发送和接收操作,通信系统的每一端都设置了发送器和接收器,因此,能控制数据同时在发送和接受两个方向上传送。半双工使用同一根传输线既作接收又...

51单片机串口通信问题
1、是在一个字节接收成功或一个字节发送成功以后进入中断程序(不过,一般在发送时是将中断关闭的,也就不进入中断了)。此时,定时器的作用就是为了设定串口速率,因为单片机的速度和串口的速度不是一个数量级的,所以一定要有个变速箱。2、数据的接收是由硬件控制的,其实,数据的接收发送都是有一个...

51单片机串行口发送数据到上位机(1)
51单片机的串行口工作模式包括通用异步收发器(UART)的模式0、模式1、模式2和模式3。模式0通常用于扩展并行输入或输出口,模式1用于10位数据的异步通信,而模式2和模式3则用于11位数据的异步通信,增加了奇偶校验位。此外,串行通信控制寄存器(SCON)用于设置工作方式和波特率,而电源管理控制寄存器(PCON...

51单片机与计算机串口通信无法读出数据?
1 判断你的硬件有没有问题;方法是 用跳线讲串口的pin2 和pin3短接,用串口调试助手发送数据看调试助手能不 能自己收到,能就说明是单片机程序有问题 2 你检查你的波特率是生成程序是否正确, 中断和主程序用 1楼给你程序,我看了 没问题。这样就可以实现串口通信了 ...

51单片机串口通信问题求解
51单片机串口通信接收数据和发送出去,这不是一个整个过程,即接收和发送没有什么关系的,是完全可以只发送,或只接收的,不需要接收就发出去的。而且不论是接收或发送,每次都是一个字节的,没有什么8个字节的事。但是每发送一个字节,或接收一个字节,数据本身是8个位,注意是8个位,并不是8个字节...

51单片机串口问题,单片机串口连了MC55通信模块。然后单片机怎么再连接计 ...
第一种方案,可使用单片机其余端口模拟串口,经 TTL-232 转换电路与计算机连接。缺点是编程比较麻烦。第二种方案,使用一个或者2个单片机的端口控制一个三态门或者模拟开关来切换与计算机通信或者与MC55通信。

51单片机串口通信收到乱码
单片机发送的是ASCII码,所以,串口助手接收时,要显示字符型,即十六进制显示的选项不要打勾。

51单片机串口通信收到乱码
若是收正确,送有问题;可以查下TXD这PIN的线路是否存在错误。若是有收到,但资料不正确;查下TH1,TL1的值是否正确。光看1、2、3的传送,应该没有错!还可以先送单个资料如1,看单笔传送是否正确。若是单个正确,那就是冲突问题了!

51单片机中串口通信在哪个端口,有没有固定的。。
51单片机中的串口通信是通过P3口的两个引脚(即P3.0和P3.1)实现的,其中P3.0口为串口接收引脚(RXD),P3.1口为串口发送引脚(TXD)。在51单片机中,串口通信的端口是固定的,即P3.0口和P3.1口。这两个引脚通过串口通信电路与串口通信芯片相连,实现串口通信功能。需要注意的是,在使用51...

51单片机串口通讯(模式1)问题:发送内容前半部分出错,后半部分正确。错...
ET1=1;此语句是罪魁祸首,定时器1已经作为串口波特率发生器了,就不能做其他用途了,此时定时必须禁止中断,而你程序中恰恰相反,来了句ET1=1;开启了定时器1中断,导致串口波特率发生混乱。那当然串口通信会有问题了,删掉ET1=1;该语句即可。

相似回答