📄 congji_senddata.asm
字号:
;假设ADC0809端口地址存放在DPTR中,A存放需要读取的模拟输入地址
RESULT EQU 50H ;RESULT 用于存放模拟输入转化的数字量
INSTRFLAG EQU 60H ;用于存放接收的确认信息,成功全为1,否则全为0
;接到读取数据的命令读取对应的某一路 并传送数据
;串口收到的命令为0FFH时说明收到数据后的确认信号
;串口收到的命令为80H时说明主机命令其顺序采集8路信号
;串口收到的命令为1XH时说明主机命令其采集某路信号,X表示采集的路数
;串口收到的命令为00H时说明对方主机确认可以接收数据
;串口发出的命令为00H时说明收到对方主机发来的信号有效
;串口发出的命令为0C0H时说明收到对方主机发来的信号无效
;串口发出的命令为060H时说明采集数据准备好,等待对方主机发来确认可以接收信号
ORG 0000H
AJMP ADC_DATA
;====================================
ORG 0100H
ADC_DATA:CLR P3.5
MOV PS,#80H
MOV DPTR,#0EFFFH ;ADC初始化
;初始化串口通信的方式,波特率为1200
MOV TMOD,#20H ;计数器1工作于方式2
MOV TH1,#0E8H
MOV TL1,#0E8H ;设置定时常数
SETB TR1 ;启动计数器1
MOV SCON,#50H ;设置串行通信方式1
MOV PCON,#00H ;定义smod=0
;=======================================================
;主机必须发送信号过来才能出此循环
WAIT:JBC RI,WAITHUJIAO
SJMP WAIT
WAITHUJIAO:
ACALL JUDGE ;判断子程序是否为顺序执行
LJMP WAIT
;--------进行数据采集----------------------
JUDGE:MOV A,SBUF
CJNE A,#80H,XUANZE ;顺序采集字程序
LCALL SHUNXU
LJMP XUANZEEND1
XUANZE:MOV R0,A
ANL A,#0F0H
CJNE A,#10H,WAITTRANS
;***********************20050922
MOV SBUF,#00H ;收到有效命令发送确认信号00H,即握手确认
XUANZE1:JBC TI,XUANZE2 ;等待发送完成
SJMP XUANZE1
;***********************
XUANZE2:MOV A,R0
ANL A,#0FH ;GET LOWER 4BITS
MOV R1,A
LCALL GETDATA
LJMP XUANZEEND1
WAITTRANS:
MOV SBUF,#0C0H ;收到无效效命令发送需对方重发信号0C0H,即握手确认,此信号让对方重发
XUANZE3:JBC TI,XUANZEEND1 ;等待发送完成
SJMP XUANZE3
XUANZEEND1: RET
;采集数据
GETDATA:
;开启模拟通道后读取数字数据
MOV DPTR,#0EFFFH
MOV A,R1
MOVX @DPTR,A ;启动数据转换通道
STRO:
MOV C,P3.3 ;查询****************************************
;CPL C ;????????????????????
JNC STRO1
;CJNE A,#00H,STRO1
SJMP STRO
STRO1:
MOVX A,@DPTR
MOV RESULT,A
;传送给GR47
LCALL SENDDATA
RET
;----------------------------------------------------------------
SENDDATA:
;初始化串口通信的方式,波特率为1200
MOV TMOD,#20H ;计数器1工作于方式2
MOV TH1,#0E8H
MOV TL1,#0E8H ;设置定时常数
MOV TR1,#40H ;启动计数器1
MOV SCON,#50H ;设置串行通信方式1
MOV PCON,#00H ;定义smod=0
SETB TR1
;检测对方是否忙
SENDDATA1:
MOV A,#60H ;收到60H表示为采集数据完毕,向主机发出请求信号
MOV SBUF,A
SENDWAIT1:
JBC TI,SENDLA1 ;等待发送完成
SJMP SENDWAIT1
SENDLA1:
JBC RI,SENDLA2
SJMP SENDLA1
SENDLA2:
MOV A,SBUF
CJNE A,#00H,SENDDATA1 ;收到0表示为对方主机空闲
;传送采集数据
SENDDATA2:
MOV A,RESULT
MOV SBUF,A ;串口输出
NOP
SENDWAIT2:JBC TI,SENDLP1 ;等待发送完成
SJMP SENDWAIT2
SENDLP1:JBC RI,SENDLP2 ;等待接收确认信号
SJMP SENDLP1
SENDLP2:MOV A,SBUF
CJNE A,#0FFH,SENDDATA2
RET
SHUNXU:
MOV SBUF,#00H ;收到有效命令发送确认信号
SHUNXU1:JBC TI,SHUNXU2 ;等待发送完成
LJMP SHUNXU1
SHUNXU2:MOV R3,#08H ;采集信号
MOV A,#00H
MOV R4,A
SX:MOV A,R4
MOV DPTR,#0EFFFH
MOVX @DPTR,A ;启动通道
SHUNXU3:MOV C,P3.3 ;查询检测转换是否完成*********
;CPL A ;???????????????????? 高还是低电平
JNC SHUNXU4
SJMP SHUNXU3
SHUNXU4:
MOVX A,@DPTR ;读取数据
MOV RESULT,A
LCALL SENDDATA1
INC R4
DJNZ R3,SX
RET
;-------------------------------------------------------
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -