当前位置:首页 > 电源 > 数字电源
[导读]PIC16F877A串口发送,查询方式,就为了调出这个费了我一天时间,原来是串口芯片电压问题,现总结如下:1、注意232串口芯片供电电压,有5V和3.3V的2、注意TXD、RXD接线,单片

PIC16F877A串口发送,查询方式,就为了调出这个费了我一天时间,原来是串口芯片电压问题,现总结如下:

1、注意232串口芯片供电电压,有5V和3.3V的

2、注意TXD、RXD接线,单片机的TXD接232芯片的R2OUT,单片机的RXD接232芯片的T2IN

3、注意ESP8266的UTXD接MCU的RX,URXD接MCU的TX

4、注意ESP8266的UTXD接232的T2IN,URXD接232的R2OUT

5、串口波特率设置成9600

6、注意连接线的可靠性,如果用线连的话一定要检查线和插座是否稳定连接

7、系统连线如下图所示

 

 

PIC16F877A串口发送 - allegro_tyc - allegro_tyc的博客

//以下是串口发送程序

#include

#define uchar unsigned char

#define uint unsigned int

__CONFIG(0x3B32);

void delay2ms(uint x)

{

uint a,b;

for(a=x; a>0; a--)

for(b=152; b>0; b--);

}

void UART_SendByte(unsigned char dat)

{

TXREG=dat;

while(TRMT==0);

}

void serial_init()

{

TRISC=0xbf;//设置RX为输入,TX为输出

TXSTA=0x24;

RCSTA=0x80;

SPBRG=0x33;//本人使用的是8MHz晶振,9600=8000000/(16*(X+1))->X=51->X=0x33

GIE=1;

PEIE=1;

RCIE=1;

}

void main()

{

serial_init();

while(1)

{

UART_SendByte(0x31);

UART_SendByte(0x32);

UART_SendByte(0x33);

delay2ms(500);

}

}

//以下是MCU发送AT命名给ESP8266的程序

#include

#define uchar unsigned char

#define uint unsigned int

#define LEDRD1

__CONFIG(0x3B32);

#define LED_OPEN() (LED=1)

#define LED_CLOSE() (LED=0)

#defineCPU_FOSC8000000

#defineBAUD9600

unsigned char* LYMS="AT+CWMODE=3r";

unsigned char* SZLY="AT+CWSAP="ESP8277_CYT","1234567890",11,3r";

unsigned char* RST="AT+RSTr";

unsigned char* LCAP="AT+CWLAPr";

unsigned char* SZDLJ="AT+CIPMUX=1r";

unsigned char* KQFU="AT+CIPSERVER=1,5000r";

unsigned char* FSSJ="AT+CIFSRr";

void delay2ms(uint x)

{

uint a,b;

for(a=x; a>0; a--)

for(b=152; b>0; b--);

}

void sys_init()

{

TRISD=0x00;//设置PORTD口为输出

}

void usart_init()

{

TRISC=0xbf;//设置RX为输入,TX为输出

TXSTA=0x24;

RCSTA=0x80;

SPBRG=0x33;//本人使用的是8MHz晶振,9600=8000000/(16*(X+1))->X=51->X=0x33

GIE=1;

PEIE=1;

RCIE=1;

}

void usart0_putchar(unsigned char data)

{

while (!TRMT);

TXREG = data;

}

void print(unsigned char* p_string)

{

while (*p_string)

{

if (*p_string != 'r')

{

usart0_putchar(*p_string);

}

else

{

usart0_putchar('r');

usart0_putchar('n');

}

p_string++;

}

}

void send_command()

{

print(LYMS);delay2ms(500);delay2ms(500);

print(SZLY);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(RST);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(LCAP);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(SZDLJ);delay2ms(500);delay2ms(500);

print(KQFU);delay2ms(500);delay2ms(500);

print(FSSJ);delay2ms(500);delay2ms(500);

}

void main()

{

sys_init();

usart_init();

send_command();

while(1)

{

PORTD = 0xff;

delay2ms(500);

PORTD = 0x00;

delay2ms(500);

}

}

//以下是MCU发送AT命名给ESP8266的程序,并接收命令、解析并作出反应

#include

#define uchar unsigned char

#define uint unsigned int

unsigned char RX_Buffer[32];

unsigned char RX_CNT=0;

#define LED1RD1

#define LED2RD2

#define LED3RD3

__CONFIG(0x3B32);

#define LED1_OPEN() (LED1=1)

#define LED1_CLOSE() (LED1=0)

#define LED2_OPEN() (LED2=1)

#define LED2_CLOSE() (LED2=0)

#define LED3_OPEN() (LED3=1)

#define LED3_CLOSE() (LED3=0)

#defineCPU_FOSC8000000

#defineBAUD9600

unsigned char* LYMS="AT+CWMODE=3r";

unsigned char* SZLY="AT+CWSAP="ESP8277_TYC","1234567890",11,3r";

unsigned char* RST="AT+RSTr";

unsigned char* LCAP="AT+CWLAPr";

unsigned char* SZDLJ="AT+CIPMUX=1r";

unsigned char* KQFU="AT+CIPSERVER=1,5000r";

unsigned char* FSSJ="AT+CIFSRr";

void delay2ms(uint x)

{

uint a,b;

for(a=x; a>0; a--)

for(b=152; b>0; b--);

}

void sys_init()

{

TRISD=0x00;//设置PORTD口为输出

}

void usart_init()

{

TRISC=0x80;//设置RX为输入,TX为输出

TXSTA=0x24;

RCSTA=0x90;

SPBRG=0x33;//本人使用的是8MHz晶振,9600=8000000/(16*(X+1))->X=51->X=0x33

RCIE=0x01;

TXEN=0x01;

TXIE=0x01;

PEIE=0x01; //外部中断使能

GIE=1;//总中断使能

}

void usart0_putchar(unsigned char data)

{

while (!TRMT);

TXREG = data;

}

void print(unsigned char* p_string)

{

while (*p_string)

{

if (*p_string != 'r')

{

usart0_putchar(*p_string);

}

else

{

usart0_putchar('r');

usart0_putchar('n');

}

p_string++;

}

}

void send_command()

{

print(LYMS);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(SZLY);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(RST);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(LCAP);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(SZDLJ);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(KQFU);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

print(FSSJ);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);delay2ms(500);

}

void interrupt usart(void)

{

if(RCIE&&RCIF)

{

//TXREG = RCREG;

RX_Buffer[RX_CNT] = RCREG;

if(RX_Buffer[0]==0x45)

RX_CNT++;

else

RX_CNT=0;

if(RX_CNT>=10)

{

if(RX_Buffer[0]==0x45&&RX_Buffer[1]==0x53&&RX_Buffer[2]==0x50)

{

if(RX_Buffer[4]==0x4C&&RX_Buffer[5]==0x45&&RX_Buffer[6]==0x44)

{

if(RX_Buffer[7]==0x31)

{

if(RX_Buffer[3]==0x4B)

LED1_OPEN();

if(RX_Buffer[3]==0x47)

LED1_CLOSE();

}

}

}

RX_CNT=0;

}

}

}

void main()

{

sys_init();

usart_init();

send_command();

LED1_OPEN();

LED2_OPEN();

LED3_OPEN();

while(1);

}

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

字符串是C语言中最基础的概念,也是最常被用到的。在嵌入式开发中,我们经常要将一些字符串通过串口显示到串口助手或调试终端上,作为信息提示,以便让我们了解程序的运行情况;或者是将一些常量的值转为字符串,来显示到液晶等显示设备...

关键字: 字符串 指针 C 语言

大家好,我是杂烩君。嵌入式大杂烩周记主要是一些实用项目学习分享,每篇一个主题。SDS 是 C 的字符串库,旨在通过添加堆分配的字符串来增强有限的 libc 字符串处理功能。

关键字: 嵌入式 项目 字符串

Redis为什么那么快?除了它是内存数据库,使得所有的操作都在内存上进行之外,还有一个重要因素,它实现的数据结构,使得我们对数据进行增删查改操作时,Redis能高效的处理。因此,这次我们就来好好聊一下Redis数据结构,...

关键字: 数据结构 REDIS 字符串 节点

今天,我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思。具体的题目如下:文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G.这个题目的意思应该很清楚了,比较直白。为了...

关键字: 腾讯 BITMAP UNSIGNED 内存

今天,我们来聊一道常见的考题,也出现在腾讯面试的三面环节,非常有意思。具体的题目如下:文件中有40亿个QQ号码,请设计算法对QQ号码去重,相同的QQ号码仅保留一个,内存限制1G. 这个题目的意思应该很清楚了,比较直白。为...

关键字: BITMAP UNSIGNED 内存 腾讯

一直觉得C语言较其他语言最伟大的地方就是C语言中的指针,有些人认为指针很简单,而有些人认为指针很难,当然这里的对简单和难并不是等价于对指针的理解程度。为此在这里对C语言中的指针进行全面的总结,从底层的内存分析,彻底让读者...

关键字: 微信 C语言 UNSIGNED INCLUDE

大家好,我是小林。前几天发了一篇「为了拿捏Redis数据结构,我画了20张图」,收获了很多好评,但是当时急于发文,有些地方没有写完,也有些地方写的不是很完善。然后我最近花了很多时间来完善文章,不仅加入了Redis新版本的...

关键字: 数据结构 REDIS 节点 字符串

▼点击下方名片,关注公众号▼大家好,很高兴和各位一起分享我的第45篇原创文章,喜欢和支持我的工程师,欢迎给我点赞、收藏、分享。加微信[xyzn3333]与作者沟通交流,免费获取更多单片机与嵌入式的海量电子资料。欢迎关注【...

关键字: 串口发送

摘要:为了更好地发挥随钻测井仪检测数据的真实性和使用灵活性等优点,文中基于Actel公司的APA075FPGA数据采集和传输系统所涉及到的AD数据采集、FPGA数据缓存、FPGA中数据的串口发送三部分,在实验室自制的一块...

关键字: 随钻井径检测 AD数据采集 FPGA 串口发送

道哥的第025篇原创一、前言二、最简单的格式化三、测试1:手动格式化数字四、测试2:混合格式化字符串和数字五、sprintf的实现机制六、总结一、前言在嵌入式项目开发中,字符串格式化是很常见的操作,我们一般都会使用C库中...

关键字: 字符串
关闭
关闭