日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 電源 > 數(shù)字電源
[導(dǎo)讀]PIC16F877A串口發(fā)送,查詢方式,就為了調(diào)出這個費了我一天時間,原來是串口芯片電壓問題,現(xiàn)總結(jié)如下:1、注意232串口芯片供電電壓,有5V和3.3V的2、注意TXD、RXD接線,單片

PIC16F877A串口發(fā)送,查詢方式,就為了調(diào)出這個費了我一天時間,原來是串口芯片電壓問題,現(xiàn)總結(jié)如下:

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、串口波特率設(shè)置成9600

6、注意連接線的可靠性,如果用線連的話一定要檢查線和插座是否穩(wěn)定連接

7、系統(tǒng)連線如下圖所示

 

 

PIC16F877A串口發(fā)送 - allegro_tyc - allegro_tyc的博客

//以下是串口發(fā)送程序

#include

#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;//設(shè)置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發(fā)送AT命名給ESP8266的程序

#include

#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=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;//設(shè)置PORTD口為輸出

}

void usart_init()

{

TRISC=0xbf;//設(shè)置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發(fā)送AT命名給ESP8266的程序,并接收命令、解析并作出反應(yīng)

#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;//設(shè)置PORTD口為輸出

}

void usart_init()

{

TRISC=0x80;//設(shè)置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);

}

本站聲明: 本文章由作者或相關(guān)機構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點,本站亦不保證或承諾內(nèi)容真實性等。需要轉(zhuǎn)載請聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請及時聯(lián)系本站刪除( 郵箱:macysun@21ic.com )。
換一批
延伸閱讀

在C/C++等低級語言中,字符串操作是安全漏洞的高發(fā)區(qū)。緩沖區(qū)溢出攻擊連續(xù)20年占據(jù)OWASP Top 10漏洞榜首,其中80%源于不安全的字符串處理。本文聚焦snprintf函數(shù)及其邊界檢查技術(shù),解析如何通過防御性編程...

關(guān)鍵字: 字符串 snprintf

在C語言編程中,字符串處理是基礎(chǔ)操作,但傳統(tǒng)庫函數(shù)如strcat()因缺乏內(nèi)存邊界檢查而成為安全漏洞的溫床。根據(jù)MITRE的CWE數(shù)據(jù)庫統(tǒng)計,緩沖區(qū)溢出漏洞中有超過30%源于不安全的字符串操作。本文將設(shè)計一個安全增強的字...

關(guān)鍵字: 字符串 strcat C語言

C語言因其高效性和底層控制能力被廣泛應(yīng)用于系統(tǒng)編程,但其缺乏內(nèi)置的邊界檢查和類型安全機制,使得輸入驗證成為保障程序安全的核心環(huán)節(jié)。從格式化字符串漏洞到整數(shù)溢出攻擊,未經(jīng)嚴(yán)格驗證的輸入可能導(dǎo)致緩沖區(qū)溢出、權(quán)限提升甚至遠程代...

關(guān)鍵字: C語言 字符串

在C語言的世界里,字符串作為字符數(shù)組的一種特殊形式,擁有著一個與眾不同的特性——結(jié)束符。這個結(jié)束符,即空字符(Null Character),用\0表示,在字符串的末尾靜靜地守候,扮演著標(biāo)識字符串終結(jié)的重要角色。相比之下...

關(guān)鍵字: C語言 字符串

字符串是C語言中最基礎(chǔ)的概念,也是最常被用到的。在嵌入式開發(fā)中,我們經(jīng)常要將一些字符串通過串口顯示到串口助手或調(diào)試終端上,作為信息提示,以便讓我們了解程序的運行情況;或者是將一些常量的值轉(zhuǎn)為字符串,來顯示到液晶等顯示設(shè)備...

關(guān)鍵字: 字符串 指針 C 語言

大家好,我是雜燴君。嵌入式大雜燴周記主要是一些實用項目學(xué)習(xí)分享,每篇一個主題。SDS 是 C 的字符串庫,旨在通過添加堆分配的字符串來增強有限的 libc 字符串處理功能。

關(guān)鍵字: 嵌入式 項目 字符串

Redis為什么那么快?除了它是內(nèi)存數(shù)據(jù)庫,使得所有的操作都在內(nèi)存上進行之外,還有一個重要因素,它實現(xiàn)的數(shù)據(jù)結(jié)構(gòu),使得我們對數(shù)據(jù)進行增刪查改操作時,Redis能高效的處理。因此,這次我們就來好好聊一下Redis數(shù)據(jù)結(jié)構(gòu),...

關(guān)鍵字: 數(shù)據(jù)結(jié)構(gòu) REDIS 字符串 節(jié)點

今天,我們來聊一道常見的考題,也出現(xiàn)在騰訊面試的三面環(huán)節(jié),非常有意思。具體的題目如下:文件中有40億個QQ號碼,請設(shè)計算法對QQ號碼去重,相同的QQ號碼僅保留一個,內(nèi)存限制1G.這個題目的意思應(yīng)該很清楚了,比較直白。為了...

關(guān)鍵字: 騰訊 BITMAP UNSIGNED 內(nèi)存

今天,我們來聊一道常見的考題,也出現(xiàn)在騰訊面試的三面環(huán)節(jié),非常有意思。具體的題目如下:文件中有40億個QQ號碼,請設(shè)計算法對QQ號碼去重,相同的QQ號碼僅保留一個,內(nèi)存限制1G.?這個題目的意思應(yīng)該很清楚了,比較直白。為...

關(guān)鍵字: BITMAP UNSIGNED 內(nèi)存 騰訊

一直覺得C語言較其他語言最偉大的地方就是C語言中的指針,有些人認為指針很簡單,而有些人認為指針很難,當(dāng)然這里的對簡單和難并不是等價于對指針的理解程度。為此在這里對C語言中的指針進行全面的總結(jié),從底層的內(nèi)存分析,徹底讓讀者...

關(guān)鍵字: 微信 C語言 UNSIGNED INCLUDE
關(guān)閉