串口助手向51单片机发送一个指令(AA),单片机接收到(AA)后先把P1灯全部打开,延时1S后熄灭

串口助手向51单片机发送一个指令(AA),单片机接收到(AA)后先把P1灯全部打开,延时1S后熄灭,第1张

如果在P1 = 0xFF;后面再加一个延时1S,会1S闪烁如
P1 = 0x00;
delayms(1000);
P1 = 0xFF;
delayms(1000);
或者 如下 会熄灭
if(MAIN_BUF==0xAA)
MAIN_BUF=0x00;
{
P1 = 0x00;
delayms(1000);
P1 = 0xFF;
}

单片机用ESP8266作为服务器,手机做客户端,用TCP连接 手机控制单片机是没有问题的,单片机在 收到 手机指令 回复应该也没有问题的,只是单片机对ESP8266的设置问题,透传 与 非透传 单片机发送数据 是不一样的。用 UDP连接 发送指令数据 是以广播形式发送的,单片机发送数据的格式和TCP连接基本一样。

这个很简单,我来教你玩:
首先我们说下硬件接法,USB转485信号电路块(只要20元,贵了的都是坑你的),MAX485芯片,110592M晶振(这个频率的晶振产生的波特率误差低)
思路:利用串口中断方式对P0口的LED进行控制(我只是举例,程序你自己写)
程序如下:
#include <reg51h> //选用晶振110592MHz
#define AddressID 0x31 //本机地址1
sbit RS485E=P3^7; //定义485的使能脚// RS5485E=0为接收状态 RS5485E=1为发送状态
sbit MAX485_DIR=P3^7;
main()
{
//通讯设置
SCON = 0xF0; //REN=1允许串行接受状态,串口工作模式3,SM2=1
TMOD|= 0x20; //定时器工作方式2
PCON|= 0x80; //波特率提高一倍
IP=0x10; //串口优先级高
TH1 = 0xf4; //fa // //baud2 / 波特率4800、数据位8、停止位1。效验位无 (110592M)
TL1 = 0xf4;
TR1 = 1; //开启定时器1
EA = 1; // 开总中断
ES = 1; //开串口中断
RS485E=0; // RS5485E=0为接收状态 RS5485E=1为发送状态
while(1);
}
void counter4(void) interrupt 4 using 2 //串口中断
{
while(RI==0);
RI=0;
if(SBUF==0x2a) //2a的ASCII码是
{
while(RI==0);
RI=0;
if(SBUF==AddressID) //发送本地地址31的ASCII码是1
{
while(RI==0);
RI=0;
if(SBUF==0x23) //23的ASCII码是#
{
P0=254; //P0=1111 1110,这里写你要对LED控制的程序
}
}
}

}
就是这么简单,已经调试通过,注释也有
PS:回答问题五天后的补充:解决了问题不追问,不给分,这个楼主不厚道,鉴定完毕 !

;110592M

;通讯波特率为9600bps

;按下接在P37的按键, 发送一串ASCII字符

ORG  0000H

AJMP MAIN

ORG 0030H

MAIN:

MOV  SCON,#50H;设置成串口1方式

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

MOV  PCON,#00H

MOV  TH1,#0FDH;预置初值

MOV  TL1,#0FDH;预置初值

SETB  TR1;启动定时器T1

;以上完成通讯初始化设置

JB  P37,$

ACALL  DELAY

JNB  P37,$

MOV A,#"%"

MOV  SBUF,A  ;单片机招待这条写数据发送缓冲器SBUF的指令,就启动发送,将"%"送通过串口发送出去

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"1"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"#"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"R"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"C"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"S"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"R"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"0"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"1"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#""

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#""

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#" "

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"c"

MOV SBUF,A

JNB TI,$

CLR TI

MOV A,#"R"

MOV SBUF,A

JNB TI,$

CLR TI

AJMP MAIN

;10毫秒延时子程序

DELAY:MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET

END

可以用任一串口调试助手收到这串字符。

用查表方法程序应该简单一点

;110592M

;通讯波特率为9600kbps,按下接在P37的按键, 发送一串23个ASCII字符:"% 01 # RC S R0001  cR"

ORG  0000H

AJMP MAIN

ORG 0030H

MAIN:

MOV  SCON,#50H;设置成串口1方式

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

MOV  PCON,#00H

MOV  TH1,#0FDH;预置初值

MOV  TL1,#0FDH;预置初值

SETB  TR1;启动定时器T1

;以上完成通讯初始化设置

MAIN1:

MOV R0,#23

MOV DPTR,#TAB

JB  P37,$

ACALL  DELAY

JNB  P37,$

SEND:

CLR TI

MOV A,#0

MOVC A,@A+DPTR

INC DPTR

MOV  SBUF,A  ;单片机招待这条写数据发送缓冲器SBUF的指令,就启动发送,数据通过串口发送出去

JNB TI,$

CLR TI

DJNZ R0,SEND

AJMP MAIN1

;10毫秒延时子程序

DELAY:MOV R4,#20

D2:MOV R5,#248

DJNZ R5,$

DJNZ R4,D2

RET

TAB: DB  "%"," ","0","1"," ","#"," ","R","C"," ","S"," "

DB  "R","0""0","0","1"," ","",""," ","c","R"

END

仅仅一个P10恐怕不行,还需要一个时钟CLK口 才比较好控制。不然会有一定误差产生误码。
如果仅仅是P10的话,可以用定时器来做,因为波特率是9600,所以每一位信号占用时间约为是104us,因此编程如下:
KEYSTA EQU P30
KEYEND EQU P31
ORG 0000H
LJMP MAIN
ORG 000BH
LJMP T0ISR
ORG 0030H
MAIN:
MOV TMOD,#02H
MOV TH0,#(256-104)
MOV TL0,#(256-104)
SETB ET0
SETB EA
LOOP:
JB KEYSTA,LP1
JNB KEYSTA,$
MOV R0,#30H
CLR A
MOV R2,#8
SETB TR0
LP1:
JB KEYEND,LOOP
JNB KEYEND,$
CLR TR0
SJMP LOOP
T0SIR:
MOV C,P10
RLC A
DJNZ R2,T0E
MOV R2,#8
MOV @R0,A
INC R0
T0E:
RETI
END

你是想用web远程监控单片机的运行,但是不知道怎么把单片机的信息上传到服务器,转化成web页面展示出来,我做过一个是通过阿里云IOT实现的

单片机内加入MQTT协议,与阿里云服务器通信,可以通过IOT studio快速配置生成web

官方给到历程是都是通过ESP的WiFi来联网。我做的是通过W5500联网的

把C语言Link Kit SDK移植到stm32单片机中,web由IOT studio生成。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/13302437.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-07-11
下一篇 2023-07-11

发表评论

登录后才能评论

评论列表(0条)

保存