加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

ESP8266连接oneNET的51单片机汇编程序

(2018-09-02 10:58:56)
标签:

源码

分类: ESP8266

ESP8266连接oneNET51单片机汇编程序

     本例采用at89c2051单片机,晶振11.096MHZ,通讯速率9600TCP单连接方式,连接地址183.230.40.39,端口876,数据收发成功。

一、硬件电路如下图

http://s13/mw690/0068KRmqzy7nj6sMSAY8c&690

二、用到的AT命令:

;AT+CWMODE=1  设置模式,模式说明:AT+CWMODE = 1-Station模式,2-AP模式,3-APStation模式。重启后生效

;AT+CIPMUX=0   ;单路连接时发送指令为AT+CIPSEND=x , x为发送的字节数  注意只有在单连接的时候才可以设置为透传模式--就是串口的数据直接发送到网络,网络的数据直接发送到串口

;AT+CIPSTART="TCP","183.230.40.39",876

;AT+CIPSEND=50  向主机发送50个字节

三、汇编程序如下:

  ;AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA

ORG 0000H

                      AJMP MAIN;转入主程序

                      ORG 0003H ;外部中断P3.2INT0入口地址

                      RETI

                      ORG 000BH;中断陷阱

                      LJMP CT

                      RETI

                      ORG 0013H;中断陷阱

                      RETI

                      ORG 0023H

                      RETI

 

                      DD EQU P1.7;运行状态指示

                      FLAG_0  EQU     20H.0           ;接收到上行串口发来数据标志 p3.0

                      FLAG_3  EQU     20H.3           ;00分标志

                      FLAG    EQU     20H.4           ;通用标志寄存器

                      HM       EQU    21H             ;定时器毫秒存储

                      YEAR    EQU     22H             ;

                      MONTH   EQU     23H             ;

                      DAY     EQU     24H             ;

                      WEEK    EQU     25H             ;星期

                      HOUR    EQU     26H             ;小时3031

                      MINUTE  EQU     27H             ;分钟3233

                      SECOND  EQU     28H             ;3435

MAIN:

                       MOV SCon,#50h; 方式1,REN=1.SM0SM1SM2REN,TB8RB8TI,RI

                       MOV TMOD,#21H;波特率发生器T1工作在模式2

                       MOV TH1,#0FDH

                       MOV TL1,TH1

                       MOV PCON,#0H

                       SETB TR1   ;启动定时器T1

                       MOV   TH0, #0DCH   ;

                     MOV   TL0, #00H

                       MOV DPTR,#5000;延时5          ;

                       LCALL DelayXmS

                       LCALL ATEOK                    

 

                       MOV DPTR,#5000;延时5

                       LCALL DelayXmS

                       LCALL CWMODE;模式说明:AT+CWMODE =3 1-Station模式,2-AP模式,3-APStation模式。重启后生效    

 

                        MOV DPTR,#5000;延时5

                        LCALL DelayXmS

                        LCALL CIPMUX    CIPMUX=0                

 

                        MOV DPTR,#5000;延时5          ;

                        LCALL DelayXmS

                        CALL CIPSTART2                       ;连接onenetAT+CIPSTART="TCP","183.230.40.39",876

 

                        MOV DPTR,#5000;延时5

                        LCALL DelayXmS

                        CALL CIPSEND                        ;AT+CIPSEND=50,发送数据,建立ONENET连接

                        CALL CIPSEND100

 

                        MOV DPTR,#5000;延时5

                        LCALL DelayXmS

                        CALL CIPSEND                        ;

                        CALL CIPSEND28                 

 

A1:                      MOV DPTR,#1000;延时5

                         LCALL DelayXmS

                         CLR  FLAG_0

                         ORL 0A8H, #82H;允许定时器0中断

A2:                      SETB TR0

                         JB FLAG_0,A3  ;不为1等待,定时器0工作1分钟时会使FLAG_0=1,接收到数据使FLAG_0=1

                         JB RI,UARTI

                         AJMP A2

 ;**********************************************

A3:                      CLR TR0

                         CALL CIPSEND                        ;

                         CALL CIPSEND28

                         AJMP A1

 ;**********************************************     +IPD,16:0326688822222  0D 0A 2B 49 50 44 2C 31 36 3A 30 0E 00 07 33 32 36 36 38 38 38 32 32 32 32 32

 

UARTI:                  CLR TR0

                        LCALL PDDA;调用串口接收0D/0A数据子程序

UARTI1:                 CLR RI;清楚串口中断标志

                        LCALL PDRI

                        MOV A,SBUF

                        XRL A,#2BH

                        JNZ A2;判断串口数据是不是“+号” ;+IPD,17:0 326688811111

               

UARTI2:                 CLR RI;软件清除串口中断标记

                        LCALL PDRI;等待下一个串口数据

                        MOV A,SBUF;将串口寄存器中接收到de数据给A

                        CJNE A,#49H,EXITT;判断串口数据;"I"   2B 49 50 44 2C 31 37 3A 30 0F 00 07 33 32 36 36 38 38 38 31 31 31 31 31 31

                        CLR RI;软件清除串口中断标记          8                   

                        LCALL PDRI;等待下一个串口数据                           

                        MOV A,SBUF;将串口寄存器中接收到de数据给A

                        CJNE A,#50H,EXITT;判断串口数据;"P"

 

                        MOV R3,#5;定义接收数据总长度         5

                        LCALL TGSJ;调用接收串口数据子程序

                        CLR RI;软件清除串口中断标记

                        LCALL PDRI;等待下一个串口数据

                        MOV A,SBUF;

                        MOV R2,A

                        CJNE A,#01H,U1;PDRD;判断串口数据

                        MOV DPTR,#5000;延时5

                        LCALL DelayXmS

                        CALL CIPSTART2  ;=40说明连接断开,重新连接

                        MOV DPTR,#5000

                        LCALL DelayXmS

                        CALL CIPSEND       ;AT+CIPSEND=50,发送数据,建立ONENET连接

                        CALL CIPSEND100

                        AJMP EXITT

 

U1:                     MOV A,R2

                        XRL A,#02H    ;判断串口数据=02说明连接成功

                        JNZ U2

                        MOV DPTR,#5000;延时5

                        LCALL DelayXmS

                        CALL CIPSEND                        ;

                        CALL CIPSEND28

                        AJMP EXITT

U2:                     MOV A,R2

                        XRL A,#30H    ;判断串口数据=30说明是数据

                        JNZ EXITT

                        MOV R3,#12;定义接收数据总长度       

                        LCALL TGSJ;调用接收串口数据子程序

 

                        CLR RI;软件清除串口中断标记

                        LCALL PDRI;等待下一个串口数据

                        MOV A,SBUF;

                        MOV R2,A

                        CJNE A,#31H,U3;判断串口数据

 

                        MOV R3,#8

 U22:                   CPL DD

                        MOV DPTR,#800;延时5

                        LCALL DelayXmS ;CALL DELAY2

                        DJNZ R3,U22

                        AJMP EXITT

 

U3:                     MOV A,R2

                        CJNE A,#32H,EXITT

                        MOV R3,#10

 U33:                   CPL DD

                        MOV DPTR,#800;

                        LCALL DelayXmS                   

                        DJNZ R3,U33

 

EXITT:                  MOV DPTR,#2000;延时5

                        LCALL DelayXmS

                        CLR RI;软件清除串口中断标记,退出串口中断

                       AJMP A1

 ;**********************************************

 

ATEOK:          ;发送AT指令!

                  MOV A,#41H;ASCIIA发送到串口去

                  LCALL FS

                  MOV A,#54H;ASCIIT发送到串口去

                  LCALL FS

                  LCALL HC;回车!

                  MOV R2,#15

ATEOK0:           LCALL PDOK;判断手机shi否回答OK?

                  JNZ ATEOK1;如果没有检测到OK,重复发

                  DJNZ R2,ATEOK0

ATEOK1:           RET

 

PDOK:           LCALL PDDA

                LCALL PDRI;等待下一个串口数据

                MOV A,SBUF;将串口寄存器中接收到de数据给A

                CJNE A,#4FH,SB;判断串口数据  "O"=4F

                CLR RI;软件清除串口中断标记

                LCALL PDRI;等待下一个串口数据

                MOV A,SBUF;将串口寄存器中接收到de数据给A

                CJNE A,#4BH,SB;判断串口数据 "K"=4BH

                LCALL PDDA

                MOV A,#0FFH;检测到OK,A1

                CPL DD

                RET

SB:             CLR A;没有检测到OK,A清零

                CLR RI;清除有串口数据标志

                RET

 

 

PDRI:            SETB REN;占用R4/R5/R1

               MOV R1,#220;300毫秒超时退出!

PBZ:           MOV R4,#100;67

DY2:           MOV R5,#8

DY1:           JB RI,KKQ;检测到RI1就退出

               DJNZ R5,DY1;25微秒检测一次

               JB RI,KKQ;检测到RI1就退出

               SETB C;程序正常时C=1

               DJNZ R4,DY2;内循环50毫秒

               DJNZ R1,PBZ;超时退出

               CLR C;对串口接收超时退出C=0

               CLR RI;清除有串口数据标志

KKQ:           RET

;检测手机shi否回答0D/0A?

PDDA:           CLR RI;清除有串口数据标志

                LCALL PDRI;2秒内检测串口shi否有数据返回?

                MOV A,SBUF;将串口寄存器中接收到de数据给A

                CJNE A,#0DH,SB;判断串口数据   换行键

                CLR RI;软件清除串口中断标记

                LCALL PDRI;等待下一个串口数据

                MOV A,SBUF;将串口寄存器中接收到de数据给A

                CJNE A,#0AH,SB;判断串口数据

                CLR RI;软件清除串口中断标记

                RET

 

FS:             CLR     ES

                ;;CLR TI;先对TI进行软件复位

                MOV SBUF,A

                JNB     TI,     $

                CLR     TI

                SETB    ES

               ;;;;;;;;;; LCALL PDTI;调用检测TI变为高电平de子程序

                RET

 ;跳过接收数据de子程序(专门针对PDU码数据)

TGSJ:

                SETB C

                CLR RI;软件清除串口中断标记

                LCALL PDRI;等待下一个串口数据

                MOV A,SBUF;将串口寄存器中接收到de数据给A

                JNC XPAS;如果检测到发生超时退出,就跳出这段程序

                DJNZ R3,TGSJ;判断是否已经收全部数据?

XPAS:           RET

 

 

 ;发送HC回车指令!

HC:

                MOV A,#0DH

                LCALL FS

                MOV A,#0AH

                LCALL FS

                RET

 ;发送AT指令!

AT1:

                  MOV A,#41H;ASCIIA发送到串口去

                  LCALL FS

                  MOV A,#54H;ASCIIT发送到串口去

                  LCALL FS

                  RET

;发送AT+C,应答

ATC:

                LCALL AT1

                MOV A,#2BH      ;+

                LCALL FS

                MOV A,#43H     ;C

                LCALL FS

                RET

;***************************************************

;***************************************************

;入口参数:DPTR=MS(毫秒1-65535mS

DELAYXMS:

               ; MOV WDT_CONTR ,#37H;喂狗

                MOV A,DPH

                MOV R7,#01

                JZ DF1

                MOV R7,DPH

DF1:            MOV A,DPl

                MOV R6,#1

                JZ DEL1

                MOV R6,DPl

DEL1:           MOV B,#0

                DJNZ B,$

                DJNZ B,$

                DJNZ R6,DEL1

                DJNZ R7,DF1

                RET

 

;发送 AT+CWMODE=1    W=57   M=4D  O=4F  D=44   E=45   1=31

CWMODE:

                LCALL ATC

                MOV A,#57H   ;W

                LCALL FS

                MOV A,#4DH   ;M

                LCALL FS

                MOV A,#4FH   ;O

                LCALL FS

                MOV A,#44H   ;D

                LCALL FS

                MOV A,#45H   ;E

                LCALL FS

                MOV A,#3DH     ;="3D"

                LCALL FS

                MOV A,#33H  ;1

                LCALL FS

                LCALL HC;回车!

                MOV R2,#15

CWMODE0:        LCALL PDOK;判断手机shi否回答OK?

                XRL A,#0FFH

                JZ CWMODE1;如果没有检测到OK,重复发

                DJNZ R2,CWMODE0

CWMODE1:        RET

 

CIPMUX:

                LCALL ATC

                MOV A,#49H   ;I

                LCALL FS

                MOV A,#50H   ;P

                LCALL FS

                MOV A,#4DH   ;M

                LCALL FS

                MOV A,#55H   ;U

                LCALL FS

                MOV A,#58H   ;X

                LCALL FS

                MOV A,#3DH     ;="3D"

                LCALL FS

                MOV A,#30H  ;1

                LCALL FS

                LCALL HC;回车!

                MOV R2,#10

CIPMUX0:        LCALL PDOK;判断手机shi否回答OK?

                XRL A,#0FFH

                JZ CIPMUX1;如果没有检测到OK,重复发

                DJNZ R2,CIPMUX0

CIPMUX1:        RET

;连接到主机AT+CIPSTART="TCP","183.230.40.39",876   IP183.230.40.39,端口876

CIPSTART2:

               LCALL ATC

                MOV A,#49H       ;I

                LCALL FS

                MOV A,#50H       ;P

                LCALL FS

                MOV A,#53H       ;S

                LCALL FS

                MOV A,#54H       ;T

                LCALL FS

                MOV A,#41H       ;A

                LCALL FS

                MOV A,#52H       ;R

                LCALL FS

                MOV A,#54H       ;T

                LCALL FS

                MOV A,#3DH     ;=

                LCALL FS

                MOV A,#22H  ;"

                LCALL FS

                MOV A,#54H  ;T

                LCALL FS

                MOV A,#43H  ;C

                LCALL FS

                MOV A,#50H  ;P

                LCALL FS

                MOV A,#22H  ;"

                LCALL FS

                MOV A,#2CH  ;,    ;连接到主机AT+CIPSTART="TCP","183.230.40.39",876

                LCALL FS

                MOV A,#22H  ;"

                LCALL FS

 

 

                MOV A,#31H       ;1连接到主机AT+CIPSTART="TCP","183.230.40.39",876

                LCALL FS

                MOV A,#38H       ;8

                LCALL FS

                MOV A,#33H       ;3

                LCALL FS

                MOV A,#2EH  ;.

                LCALL FS

                MOV A,#32H  ;2

                LCALL FS

                MOV A,#33H  ;3

                LCALL FS

                MOV A,#30H  ;0

                LCALL FS

                MOV A,#2EH  ;.

                LCALL FS

 

                MOV A,#34H  ;" 4

                LCALL FS

                MOV A,#30H  ;" 0

                LCALL FS

                MOV A,#2EH  ;.

                LCALL FS

 

                MOV A,#33H  ;" 3       IP183.230.40.39,端口876

                LCALL FS

                MOV A,#39H  ;" 9

                LCALL FS

                MOV A,#22H  ;"

                LCALL FS

                MOV A,#2CH  ;,    ;连接到主机AT+CIPSTART="TCP","183.230.40.39",876

                LCALL FS

 

                MOV A,#38H  ;"8

                LCALL FS

                MOV A,#37H  ;"7

                LCALL FS

                MOV A,#36H  ;"6

                LCALL FS

 

                LCALL HC;回车!

                MOV R2,#15

 

CIPSTART3:      LCALL PDOK;判断手机shi否回答OK?LCALL JCXMGR; MOV R2,#15

                XRL A,#0FFH; LCALL PDOK;判断手机shi否回答OK?

                JZ CIPSTART4;如果没有检测到OK,重复发

                DJNZ R2, CIPSTART3;DJNZ R2,CIPSTART0

CIPSTART4:      RET

 

 

CIPSEND28:      MOV A,#31H     ;2  3

                LCALL FS

                MOV A,#35H     ;8  0

                LCALL FS

                LCALL HC;回车!

                MOV R2,#15

FS400:          LCALL PDOK;判断手机shi否回答OK?LCALL JCXMGR; MOV R2,#15

                XRL A,#0FFH

                JZ FSZJ;FSJ;CSJ40;检测到>,转入CSJ

                DJNZ R2,FS400

                RET

 

 

 CIPSEND:       LCALL ATC        ;AT+CIPSEND=102

                MOV A,#49H       ;I

                LCALL FS

                MOV A,#50H       ;P

                LCALL FS

                MOV A,#53H       ;S

                LCALL FS

                MOV A,#45H       ;E

                LCALL FS

                MOV A,#4EH       ;N

                LCALL FS

                MOV A,#44H       ;D

                LCALL FS

                MOV A,#3DH     ;=

                LCALL FS

                RET

 

CIPSEND100:      MOV A,#35H     ;1

                LCALL FS

                MOV A,#30H     ;0

                LCALL FS

                LCALL HC;回车!

                MOV R2,#15

CIPSEND0:       LCALL PDOK

                XRL A,#0FFH

                JZ FLJA;CSJ;检测到>

                DJNZ R2,CIPSEND0

CIPSEND1:       RET

FLJA:     MOV R2,#50;49      ;ONENET

          MOV DPTR,#LJB      ;连接ONENET

          ACALL FS0

          RET

FSZJ:     MOV R2,#15;16       

FSZJ1:    MOV DPTR,#SJB       ;

FS0:      CLR ES                               ;ONENET

          MOVC A,@A+DPTR

          MOV SBUF,A

          JNB TI,$

          CLR TI

          INC DPTR

          LCALL HC;回车!

          SETB ES

          RET

 

 CT:

        PUSH ACC

       PUSH PSW

        PUSH DPH

       PUSH DPL

        MOV  TH0, #0DCH;88H

      MOV  TL0, #00H

        INC HM          ;毫秒

       MOV  A,HM

      CJNE  A, #64H, DONE  ;0AH

      MOV   HM, #00H

         CPL DD

      MOV   A,SECOND

        ADD A,#01H

        DA A

        MOV SECOND,A

        XRL A,#10H

        JNZ CT2

        SETB  FLAG_3          

CT2:    MOV A,SECOND

        XRL A,#25H

        JNZ CT8

        SETB  FLAG_3           ;10秒检查一次开关量有无报警

CT8:    MOV A,SECOND            ;WIFI

        XRL A,#30H              ;30

        JNZ CT3

        MOV A,MINUTE           

        ADD A,#01H

        MOV B,#02H

        DIV AB

        MOV A,B

        JNZ CT3

 

CT3:    MOV A,SECOND

        XRL A,#40H

        JNZ CT4

        SETB  FLAG_3           ;10秒检查一次开关量有无报警

CT4:    MOV A,SECOND

        XRL A,#55H

        JNZ CT0

        SETB  FLAG_3           ;10秒检查一次开关量有无报警

CT0:    MOV A,SECOND

      XRL  A, #60h

        JNZ DONE

        MOV   SECOND, #00H

        SETB  FLAG_0           ;心跳标志置位  ;1分钟发送一次       ;

        MOV 2CH,#06H

      MOV   A,MINUTE

        ADD A,#01H

        DA A 

        MOV MINUTE,A

CT1:    MOV A,MINUTE

        XRL  A,#30h             ;

        JNZ CT6

CT6:    MOV A,MINUTE

        XRL  A,#60h             ;

        JNZ DONE

      MOV   MINUTE, #00H

      MOV   A,HOUR

        ADD A,#01H

        DA A

        MOV HOUR,A

      XRL  A, #24h

        JNZ DONE

      MOV   HOUR, #00H

DONE:

        POP DPL

       POP DPH

        POP PSW

       POP ACC

        RETI

;********************************************** 0891683108403505F011000D91683131868651F8 0008000854084E0A75356E90

LJB:DB 10H,30H,00H,03H,45H,44H,50H,01H,40H,00H,80H,00H,07H,31H,30H,38H,30H,34H,35H,38H,00H   ;21

    DB 1CH,35H,6AH,4DH,47H,61H,48H,72H,30H,37H,3DH,75H,32H,43H,3DH,38H,52H,67H,78H,62H,44H,6FH,64H,4DH,5AH,36H,59H,73H,3DH;29

SJB:DB 30H,0DH,00H,07H,33H,32H,36H,36H,38H,38H,38H,31H,31H,31H,31H    15

END

四、利用手机软件看程序执行的结果如下图:




http://s10/mw690/0068KRmqzy7nj6tba6Rc9&690

0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有