微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 关于PIC16F877A串口发送任意字符串的问题

关于PIC16F877A串口发送任意字符串的问题

时间:07-14 来源:互联网 点击:

  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、系统连线如下图所示

  

  //以下是串口发送程序

  #include《pic.h》

  #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《pic.h》

  #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=3\r";

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

  unsigned char* RST="AT+RST\r";

  unsigned char* LCAP="AT+CWLAP\r";

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

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

  unsigned char* FSSJ="AT+CIFSR\r";

  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《pic.h》

  #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() (

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top