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

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() (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);
}

英特尔测试新型自旋量子位
一款可以实现室内UWB技术精确定位的智能手环
通过土壤水分速测仪来研究土壤墒情的变化
苹果7港版价格合人民币4798元 最实惠比国行便宜600元
智慧轨道交通可以解决哪种“城市病”
关于PIC16F877A串口发送任意字符串的问题
NLP如何帮AI摆脱智障之名 突破还乏善可陈
影响LED发光效率的主要因素
显示设备分辨率的提升 带来的将是视觉体验的革命
华为发布了《自动驾驶网络解决方案白皮书》
思特威推出全新5MP DSI-2技术全性能升级SC系列图像传感器新品SC5336P
SI522超低功耗13.56M芯片完全兼容RC522/FM17522 PIN2PIN
毛老子固件内嵌花生壳PHTunnel,内网穿透实现局域网应用远程外网访问
视觉的亮度特性
高通新款飞行控制芯片支持无人机室内飞行及空中识别物体
纵观云计算市场的现有格局及未来发展趋势
总投资450亿元的长三角人工智能超算中心暨产业基地项目正式开工
单片机中断程序是如何被中断的?
阿牛巴流量计的应用
基于RTSJ的实时嵌入式系统API的优化研究