⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 congji_senddata.asm

📁 用伟福开发环境编写的51通过rs232通信的源程序
💻 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 + -