资讯详情

ESP8266连接本地服务器的51单片机汇编程序

ESP连接本地服务器的51单片机汇编程序

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

硬件电路如下图所示

a4c26d1e5885305701be709a3d33442f.png

a4c26d1e5885305701be709a3d33442f.png

以下是常见的AT命令:

;服务器模式

;AT CIPMUX=1

允许多个客户端连接,当然,模块最多允许5个客户端连接(每个客户端对应一个id0-4)。还必须设置,否则服务器配置会出错

;AT CIPSERVER=1,5000 创建服务器

;AT CIPSERVER=1,8080

;AT CIPSEND=0,6

;AT CIFSR

查询模块IP地址

;AT CIPSTATUS

查询模块连接状态

;客户端模式

;AT CWMODE=1 设置模式,模式说明:AT CWMODE

= :1-Station模式,2-AP模式,3-AP兼Station模式。重启后生效

;AT CIPMUX=0;单路连接时发送指令AT CIPSEND=x

, x发送的字节数

请注意,只有在单连接时才能设置为传输模式——串口数据直接发送到网络,网络数据直接发送到串口

;AT CWJAP="LOVE","recon2012"

;AT CIPSTART="TCP","192.168.1.8",8080

;AT CWLAP

列出当前可用性

AP

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

;设置模块ip,发送AT CIPSTA="192.168.1.110";响应;AT CIPSTA="192.168.1.110"

busy p... 2,CONNECT

OK

;AT CWSAP="TEST","12345678",1,3

创建热点

;AT CWLIF

查看在线IP列表

三、汇编程序如下:

ORG 0000H

AJMP

MAIN;转入主程序

ORG

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

RETI

ORG

000BH;

LJMP

CT

RETI

ORG

0013H;中断陷阱

RETI

ORG

0023H

RETI

DD

EQU P1.7.操作状态指示

FLAG_0EQU20H.0

;接收到上行串发送的数据标志p3.0

FLAG_3EQU20H.3;00分标志

;FLAGEQU20H.4;通用标志寄存器

HMEQU21H;定时器毫秒存储

YEAREQU22H;年

MONTHEQU23H;月

DAYEQU24H;日

WEEKEQU25H;星期

HOUREQU26H;小时3031

MINUTEEQU27H;分钟3233

SECONDEQU28H;秒3435

MAIN:

MOV

SCon,#50h;

MOV

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

MOV

TH1,#0FDH ;波特率9600

MOV

TL1,TH1

MOV

PCON,#0H

SETB

TR1;启动定时器T1

MOVTH0,

#0D0H;

MOVTL0,

#00H

MOV

DPTR,#5000;延迟5秒;

LCALL

DelayXmS

LCALL

ATEOK;发送AT

MOV

DPTR,#5000;延时5秒

LCALL

DelayXmS

LCALL

CWMODE;

MOV

DPTR,#5000;延时5秒

LCALL

DelayXmS

LCALL

CIPMUX;CIPMUX=启动多路连接模式

MOV

DPTR,#5000;延迟5秒;

LCALL

DelayXmS

CALL

CIPSTART;建立TCP连接*

MOV

DPTR,#5000;延时5秒

LCALL

DelayXmS

CALL

CIPSEND;发送数据

CALL

CIPSEND100

MOV

DPTR,#5000;延时5秒

LCALL

DelayXmS

CALL

CIPSEND;发送数据,

CALL

CIPSEND28

A1:MOV

DPTR,#3000;延时5秒

LCALL

DelayXmS

CLRFLAG_0

ORL0A8H,

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

A2:SETB

TR0

JB

FLAG_0,A3;不要等1定时器0工作1分钟FLAG_0=接收数据使FLAG_0=1

JB

RI,UARTI;检测到RI变1;串口数据进来了;RI=1

AJMP

A2

ATEOK:;发送AT指令!

MOV

A,#41H;将ASCII代码A发送到串口

LCALL

FS

MOV

A,#54H;将ASCII将代码T发送到串口

LCALL

FS

LCALL

HC;回车!

MOV

R2,#15

ATEOK0:LCALL

PDOK;

JNZ

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

DJNZ

R2,ATEOK0

ATEOK1:RET

PDOK:LCALL

PDDA

LCALL

PDRI;等待下一个串口数据

MOV

A,SBUF;

CJNE

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

CLR

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

LCALL

PDRI;等待下一个串口数据

MOV

A,SBUF;

CJNE

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

LCALL

PDDA

MOV

A,#0FFH;检测到OK,对A置1

CPL

DD

RET

SB:CLR

A;没有检测到OK,对A清零

CLR

p>RI;清除有串口数据标志

RET

PDRI: SETB

REN;占用R4/R5/R1

MOV

R1,#220;

PBZ: MOV

R4,#80;67

DY2: MOV

R5,#8;8

DY1: JB

RI,KKQ;

DJNZ

R5,DY1;

JB

RI,KKQ;

SETB

C;程序正常时C=1

DJNZ

R4,DY2;内循环50毫秒

DJNZ

R1,PBZ;超时退出

CLR

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

CLR

RI;清除有串口数据标志

KKQ: RET

;检测0D/0A?

PDDA: CLR

RI;清除有串口数据标志

LCALL

PDRI;

MOV

A,SBUF;

CJNE

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

CLR

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

LCALL

PDRI;等待下一个串口数据

MOV

A,SBUF;

CJNE

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

CLR

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

RET

FS: CLR ES

MOV

SBUF,A

JNB TI, $

CLR TI

SETB ES

RET

;发送回车指令!

HC:

MOV

A,#0DH

LCALL

FS

MOV

A,#0AH

LCALL

FS

RET

;发送AT指令!

AT1:

MOV

A,#41H;将ASCII码A发送到串口去

LCALL

FS

MOV

A,#54H;将ASCII码T发送到串口去

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

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,#31H ;1

LCALL

FS

LCALL

HC;回车!

MOV

R2,#15

CWMODE0: LCALL

PDOK;

XRL

A,#0FFH

JZ

CWMODE1;

DJNZ

R2,CWMODE0

CWMODE1: RET

;发送;AT+CWLAP

CWLAP:

LCALL

ATC

MOV

A,#57H ;W

LCALL

FS

MOV

A,#4CH ;L

LCALL

FS

MOV

A,#41H ;A

LCALL

FS

MOV

A,#50H ;P

LCALL

FS

LCALL

HC;回车!

MOV

R2,#10

CWLAP1: LCALL

PDOK;判断是否回答OK?

JNZ

CWLAP2;如果没有检测到OK,继续检查

DJNZ

R2,CWLAP1

CWLAP2: 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,#31H ;1

LCALL

FS

LCALL

HC;回车!

MOV

R2,#10

CIPMUX0: LCALL

PDOK;

XRL

A,#0FFH

JZ

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

DJNZ

R2,CIPMUX0

CIPMUX1: RET

CIPSTART:

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,#32H ;2

LCALL

FS

MOV

A,#2CH ;,

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

LCALL

FS

MOV

A,#22H ;"

LCALL

FS

MOV

A,#31H ;1

LCALL

FS

MOV

A,#39H ;9

LCALL

FS

MOV

A,#32H ;2

LCALL

FS

MOV

A,#2EH ;.

LCALL

FS

MOV

A,#31H ;1

LCALL

FS

MOV

A,#36H ;6

LCALL

FS

MOV

A,#38H ;8

LCALL

FS

MOV

A,#2EH ;.

LCALL

FS

MOV

A,#31H ;" 1

LCALL

FS

MOV

A,#2EH ;.

LCALL

FS

MOV

A,#31H ;" 1

LCALL

FS

MOV

A,#30H ;" 0

LCALL

FS

MOV

A,#37H ;" 9

LCALL

FS

MOV

A,#22H ;"

LCALL

FS

MOV

A,#2CH

LCALL

FS

MOV

A,#35H ;"5

LCALL

FS

MOV

A,#30H ;"0

LCALL

FS

MOV

A,#30H ;"0

LCALL

FS

MOV

A,#30H ;0

LCALL

FS

LCALL

HC;回车!

MOV

R2,#15

CIPSTART0: LCALL

PDOK ;判断是否回答OK?

XRL

A,#0FFH

JZ

CIPSTART1

DJNZ

R2, CIPSTART0

CIPSTART1: RET

CIPSEND28: MOV

A,#33H ;3

LCALL

FS

MOV

A,#30H ;0

LCALL

FS

LCALL

HC;回车!

MOV

R2,#10

FS400: LCALL

PDOK;

XRL

A,#0FFH

JZ

FSJ;

DJNZ

R2,FS400

RET

;发送AT+CIPSEND=2,

CIPSEND: LCALL

ATC

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

MOV

A,#32H ;2

LCALL

FS

MOV

A,#2CH ;,

LCALL

FS

RET

;发送100个字节

CIPSEND100: MOV

A,#31H ;1

LCALL

FS

MOV

A,#30H ;0

LCALL

FS

MOV

A,#30H ;0

LCALL

FS

LCALL

HC;回车!

MOV

R2,#15

CIPSEND0: LCALL

PDOK;

XRL

A,#0FFH

JZ

FLJ

DJNZ

R2,CIPSEND0

CIPSEND1: RET

FLJ: MOV

R2,#50 ;LJA=51,LJB=50 *

MOV

R0,#30H ;30H到62H共50个字节

MOV

DPTR,#LJB ;

FLJ1: CLR

A

MOVC

A,@A+DPTR

MOV

@R0,A

INC

R0

INC

DPTR

DJNZ

R2,FLJ1

MOV

R0,#30H;30H到62H共50个字节

MOV

R2,#50;LJA=51,LJB=50 *

FLJ2: ACALL

FSD

DJNZ

R2,FLJ2

LCALL

HC;回车!

RET

FSJ: MOV

R2,#15

MOV

R0,#30H

MOV

DPTR,#SJB;

FSJ1: CLR

A

MOVC

A,@A+DPTR

MOV

@R0,A

INC

R0

INC

DPTR

DJNZ

R2,FSJ1

MOV

R0,#30H

MOV

R2,#15

FSJ2: ACALL

FSD

DJNZ

R2,FSJ2

LCALL

HC;回车!

RET

FSD: MOV

DPTR,#ASCII

MOV A, @R0

FSD1: ANL A, #0F0H

SWAP A

MOVC

A,@A+DPTR

CALL

FS

MOV A, @R0

ANL A, #0FH

MOVC

A,@A+DPTR

CALL

FS

INC R0

RET

CT:

PUSH

ACC

PUSH

PSW

PUSH

DPH

PUSH

DPL

MOV TH0,

#0DCH;

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 ;到10秒检查一次开关量有无报警

CT2: MOV

A,SECOND

XRL

A,#25H

JNZ

CT8

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

CT8: MOV

A,SECOND ;WIFI

XRL

A,#30H ;到30秒

JNZ

CT3

MOV

A,MINUTE ;检查分+1是不是被4整除

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 ;到40秒检查一次开关量有无报警

CT4: MOV

A,SECOND

XRL

A,#55H

JNZ

CT0

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

CT0: MOV

A,SECOND

XRL A,

#60h

JNZ

DONE

MOV SECOND,

#00H

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

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

;跳过接收数据

TGSJ:

SETB

C

CLR

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

LCALL

PDRI;等待下一个串口数据

MOV

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

JNC

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

DJNZ

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

XPAS: RET

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

ASCII:DB

30H,31H,32H,33H,34H,35H,36H,37H,38H,39H,41H,42H,43H,44H,45H,46H;

SJB:DB

30H,0DH,00H,07H,33H,32H,36H,36H,38H,38H,38H,31H,31H,31H,31H

END

四、利用TCP/UDP调试工具看程序执行的结果如下图:

a4c26d1e5885305701be709a3d33442f.png

五、wifi设置

在你家中的wifi如TP-LINK的静态地址分配中,把ESP8266的MAC地址绑定到192.168.1.107IP上,如下图。如果不绑定,任其动态分配IP地址,你就要经常改程序中的ip地址。

a4c26d1e5885305701be709a3d33442f.png

标签: 连接器fh52f0r连接器

锐单商城拥有海量元器件数据手册IC替代型号,打造 电子元器件IC百科大全!

锐单商城 - 一站式电子元器件采购平台