关于51单片机串口通信问题
DISP1:clrEAPUSHACCPUSHDPHPUSHDPLpd1:JBCRI,DISP1_1LJMPpd1DISP1_1:MOVA,SBUFMOVDPTR,#TAB...
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是什么意思?实现了什么功能? 展开
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码,并通过串口发出去,不是的话中断返回。
你这个程序是从一个大程序截取的一段,单纯看这一段的话没有实际意义
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码,并通过串口发出去,不是的话中断返回。
你这个程序是从一个大程序截取的一段,单纯看这一段的话没有实际意义
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询