📄 zhuji1.asm
字号:
;假设ADC0809端口地址存放在DPTR中,A存放需要读取的模拟输入地址
RESULT EQU 50H ;RESULT 用于存放模拟输入转化的数字量
DATASTORE EQU 60H ;存放每次调用子程序时的模拟量
;接到读取数据的命令读取对应的某一路 并传送数据
;串口发出的命令为0FFH时说明收到数据后的确认信号
;串口发出的命令为80H时说明主机命令其顺序采集8路信号
;串口发出的命令为1XH时说明主机命令其采集某路信号,X表示采集的路数
;串口发出的命令为00H时说明对方主机确认可以接收数据
;串口收到的命令为00H时说明收到对方主机发来的信号有效
;串口收到的命令为0C0H时说明收到对方主机发来的信号无效
;串口收到的命令为060H时说明采集数据准备好,等待对方主机发来确认可以接收信号
;有特殊要求只采一路
ORG 0000H
AJMP ADC_DATA
;====================================
ORG 0100H
ADC_DATA:CLR P3.5
MOV PS,#16H
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
;=======================================================
MAINWAIT:MOV A,#12H
MOV R0,A
LCALL SENDINSTR
LJMP MAINWAIT
SENDINSTR:
INSTRWAIT: MOV A,R0
MOV SBUF,R0 ;发出特殊采集某路的命令
INSTRWAIT1: JBC TI,INSTRWAITRESP ;数据传送结束转
LJMP INSTRWAIT1
INSTRWAITRESP:
JBC RI,INSTRWAITRESP1 ;判断是否有回应信号 00
LJMP INSTRWAITRESP
INSTRWAITRESP1:
MOV A,SBUF
CJNE A,#00H,INSTRWAIT ;收到确认信号是否为00H,00H表示对方接收成功,否则重发命令
INSTRWAIT3:JBC RI,INSTRWAIT4 ;等待对方数据采集结束,请求传送信号
LJMP INSTRWAIT3
INSTRWAIT4:MOV A,SBUF
CJNE A,#60H,INSTRWAIT3 ;检测是否为对方数据采集完的请求信号,60H表示对方采集完
MOV A,#00H ;00 表示收到请求信号给与确认
MOV SBUF,A ;如果对方采集完,则接收采集的数据
INSTRWAIT5:JBC TI,INSTRWAIT6 ;等待数据传送结束
LJMP INSTRWAIT5
INSTRWAIT6:JBC RI,INSTRWAIT7 ;等待数据传送结束
LJMP INSTRWAIT6
INSTRWAIT7:MOV A,SBUF ;接收采集的数据方入一个指定位置
MOV DATASTORE,A
;给对方发送确认信号0FFH
MOV A,0FFH
MOV SBUF,A
INSTRWAIT8:JBC TI,INSTRWAIT9
LJMP INSTRWAIT8
INSTRWAIT9:RET
END
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -