历史上的今天
今天是:2025年02月10日(星期一)
2020年02月10日 | PIC16F877A串口发送字符串问题
2020-02-10 来源:eefocus
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、注意连接线的可靠性,如果用线连的话一定要检查线和插座是否稳定连接
PIC16F877A串口发送
//以下是串口发送程序
#include
#define ucharunsigned 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
#defineLEDRD1
__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);
}
史海拾趣
|
本帖最后由 paulhyde 于 2014-9-15 09:24 编辑 之前看到NEC有送开发板的活动,大家使用过程中有什么感触或心得呢? 希望可以贴图出来分享下。 因为我们学校已经有自己的开发板了,所以当时没有申请,但是很想了解下相关的信息。 … 查看全部问答> |
|
电路板系统的互连包括:芯片到电路板、PCB板内互连以及PCB与外部器件之间的三类互连。在RF设计中,互连点处的电磁特性是工程设计面临的主要问题之一,本文介绍上述三类互连设计的各种技巧,内容涉及器件安装方法、布线的隔离以及减少引线电感的措施 ...… 查看全部问答> |
|
从元器件角度看,GPS设备包含的关键元器件有七个,分别是天线、低噪音放大器(LNA)、RF接收转换(RF Section)、数字基带(Digital Baseband)、微处理器(Microprocessor)、微处理器周边外设(Processor Peripherals)、输入输出和驱动(I/O and Driver)。 ...… 查看全部问答> |
|
真实世界的应用需要真实世界的物理连接,一般来说,这意味着模拟信号要在系统内的某处被数字化处理,以便于微处理器、ASIC或FPGA采集数据并做出决策。 基本选用标准 当选择一款模拟数字转换器(ADC)时,大多数设计师似乎只关注几个主 ...… 查看全部问答> |
|
1. 51单片机 P2.5 I/O口上的LED灯一闪一闪: #include <reg51.h>sbit led0=P2^5; void delay () { unsigned int a; a=50000; while (a--); } void main (main){ vo ...… 查看全部问答> |




