PIC16F877A串口发送字符串问题

出处:维库电子市场网 发布于:2015-10-22 10:33:02

  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<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() (LED2=0)
  #define LED3_OPEN() (LED3=1)
  #define LED3_CLOSE() (LED3=0)
  #defineCPU_FOSC8000000
  #defineBAUD9600
  unsigned char* LYMS="AT+CWMODE=3\r";
  unsigned char* SZLY="AT+CWSAP=\"ESP8277_TYC\"\,\"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=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);
  }

关键词:ICPIC串口

版权与免责声明

凡本网注明“出处:维库电子市场网”的所有作品,版权均属于维库电子市场网,转载请必须注明维库电子市场网,https://www.dzsc.com,违反者本网将追究相关法律责任。

本网转载并注明自其它出处的作品,目的在于传递更多信息,并不代表本网赞同其观点或证实其内容的真实性,不承担此类作品侵权行为的直接责任及连带责任。其他媒体、网站或个人从本网转载时,必须保留本网注明的作品出处,并自负版权等法律责任。

如涉及作品内容、版权等问题,请在作品发表之日起一周内与本网联系,否则视为放弃相关权利。

相关技术资料
广告
上传BOM文件: BOM文件
*公司名:
*联系人:
*手机号码:
QQ:
应用领域:

有效期:
OEM清单文件: OEM清单文件
*公司名:
*联系人:
*手机号码:
QQ:
有效期:

扫码下载APP,
一键连接广大的电子世界。

在线人工客服

买家服务:
卖家服务:

0571-85317607

客服在线时间周一至周五
9:00-17:30

关注官方微信号,
第一时间获取资讯。

建议反馈

联系人:

联系方式:

按住滑块,拖拽到最右边
>>
感谢您向阿库提出的宝贵意见,您的参与是维库提升服务的动力!意见一经采纳,将有感恩红包奉上哦!