PIC16F877A串口发送字符串问题

发布者:数字思维最新更新时间:2020-02-10 来源: eefocus关键字: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、注意连接线的可靠性,如果用线连的话一定要检查线和插座是否稳定连接


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

}

关键字:PIC16F877A  串口发送  字符串 引用地址:PIC16F877A串口发送字符串问题

上一篇:怎样解决pic单片机读修改写问题
下一篇:PIC单片机模拟异步串行通讯UART源程序

推荐阅读最新更新时间:2024-11-20 10:54

PIC16F877A和AVR的单片机的PWM输出程序
//在PICC编译器主,调试通过,PIC16F877A的PWM信号输出 #include pic.h #define uchar unsigned char #define uint unsigned int __CONFIG(0x1832); void delay() { uint k; for(k=0;k 5000;k++); } void main() { uchar k; T2CON=0X04; //开定时器2 CCPR1L=0X0F; //PWM匹配初值 CCP1CON=0X3C; //设置CCP1 模块为PWM 工作方式,且其工作循环 PR2=0XFF; //设置PWM 的工作周期 TRI
[单片机]
飞思卡尔MC9S12G64串口发送接收驱动
因为之前刚入职,对串口调试不了解,下面整理一下书上的串口程序。 移植性还比较强 使用说明:MC9S12系列的串口有两种查询方式 1》使用中断方式查询 2》在主函数中使用轮询的方式的方法进行查询 这两种方法在下面函数中都有体现,需要在用的时候注意分别提取 主要是初始化的SCI1CR2的寄存器配置和调用中断的时候,注意串口1的中断号是VectorNumber_Vsci1 21 注意串口0的中断号是VectorNumber_Vsci0 20
[单片机]
PIC16F877A单片机(如何写 配置字)
1 MPLAB X V5.0,编译器为XC8(V2.0) 单击production—set Configuration Bit----点击 generate source code to output ----复制生成内容到main函数 // PIC16F877A Configuration Bit Settings // 'C' source line config statements // CONFIG #pragma config FOSC = EXTRC // Oscillator Selection bits (RC oscillator) #pragma config WDTE = O
[单片机]
<font color='red'>PIC16F877A</font>单片机(如何写 配置字)
51单片机实现通过串口用delay延时方式发送一串数据
一、使用proteus绘制简单的电路图,用于后续仿真 二、编写程序 /******************************************************************************************************************** ---- @Project: USART ---- @File: main.c ---- @Edit: ZHQ ---- @Version: V1.0 ---- @CreationTime: 20200713 ---- @ModifiedTime: 20200713 ----
[单片机]
51单片机实现通过<font color='red'>串口</font>用delay延时方式<font color='red'>发送</font>一串数据
基于PIC16F877A单片机的一种车载红外夜视仪设计
0 引言 随着汽车市场的快速发展和安防意识的日益强化,人们对汽车安全保障技术的要求越来越高,而现有汽车照明系统在雪夜、雪天或大雾等能见度较低情况下视距不远、效果不佳的弊病成为汽车行驶的安全隐患之一。更严重的是在夜晚行车时,驾驶员通常会被对方车辆的灯光干扰出现盲区,容易发生车祸。夜视系统却可以在黑暗中帮助驾驶员导航,使驾驶员在有灯光和黑暗两种情况下都能看清驾驶环境。因此开发一种结构简单、性能稳定、可靠性好、适用性强的汽车红外夜视系统,具有重要的市场应用前景。 1 系统总体设计 1)系统原理 根据工作原理的不同,红外夜视系统分为被动红外夜视系统和主动红外夜视系统。主动红外夜视系统利用其所携带的红外光源主动照射目标,由光学系
[单片机]
基于<font color='red'>PIC16F877A</font>单片机的一种车载红外夜视仪设计
51单片机中用中断方式实现串口数据发送与接收
/* Description:用中断方式实现串口数据发送 Author:Jcy Date:2012-5-2 */ #include reg52.h #define uint unsigned int #define uchar unsigned char uchar receive_ser; //串口接收到的数据 uchar flag=0; uchar receivebuf = Jcy ; uchar i=0; uchar j; void init_ser() { TMOD=0X20;//定时器1工作在方式2 TH1=0XFD; TL1=0XFD; //波特率9600,51单片机大多用这个 TR
[单片机]
空数组和空字符串的判定
空数组是不含任何元素的数组,他的基本特征是数组长度是否为0,为0则为空,非0则非空。8.0以前就是这样判定的。以下是两种方法的比较。 1. 空字符串是不含任何字符的字符串,相当C语言中 新增的空字符串VI是个多态VI,共可以检测5种数据类型。 String,path,variant,picture 和DSC TAG
[测试测量]
空数组和空<font color='red'>字符串</font>的判定
Labview串口程序中字符串与其它类型数据的转换问题
Labview的串口只能传送字符串类型的数据,所以要把数值型数据进行收发要进行数据类型转换 数值型数据 字符串数据 ------ 数据发送--------- 接收到的字符串 数值型数据 原理看似很简单,但是在实际的执行过程中却碰到了很多问题 现象1: 用单片机向Labview串口发送数据,在Lv中经过字符串至字节数组转换,再索引数组即可得到发送的数值,跟程序中的大小相符,没有出现ASCII码格式过来捣乱的情况 但是如果由Lv向单片机发送数据,按照逆向思维,先将数据转换至字符串,然后再写入缓冲区,单片机接收到的却是ASCII码,而且是0~9的ASCII码,不知道哪个地方出了问题
[测试测量]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved