|
180黑幣
我希望把51單片機(jī)串口接收的數(shù)據(jù),分別提取后兩位,倒數(shù)第三第四位,并轉(zhuǎn)換成整形
單片機(jī)程序如下:
- #include "reg52.h"
- #include "stdio.h"
- #include "string.h"
- #define uchar unsigned char
- #define uint unsigned int
- void send_byte(uchar by);
- void send_string(uchar *p);
- void delay(uint n);
- uchar rst[]="AT+RST\r\n";
- uchar mod[]="AT+CWMODE=3\r\n";
- uchar wico[]="AT+CWJAP=\"Nick\",\"qweasdzxc\"\r\n";
- uchar sev[]="AT+CIPSTART=\"TCP\",\"192.168.43.31\",8080\r\n";
- uchar mods[]="AT+CIPMODE=1\r\n";
- uchar sen[]="AT+CIPSEND\r\n";
- uchar in[]="in\r\n";
- uchar copa[]="bye\r\n";
- uint g,y,r;
- sbit ght=P2^0;
- sbit yht=P2^1;
- sbit rht=P2^2;
- void UsartInit()
- {
- SCON=0X50;
- T2CON=0X34;
- PCON=0X80;
- RCAP2H=(65536-39)/256;
- RCAP2L=(65536-39)%256;
- ES=0;
- EA=1;
- ET0=1;
- ET1=1;
- EX0=1;
- IT0=1;
- EX1=1;
- IT1=1;
- }
- void main()
- {
-
- UsartInit();
- send_string(rst);
- delay(1);
- send_string(mod);
- delay(1);
- send_string(wico);
- delay(10);
- send_string(sev);
- delay(10);
- send_string(mods);
- delay(5);
- send_string(sen);
- delay(3);
- ES=1;
- g=5;
- y=2;
- r=5;
- while(1)
- {
- ght=0;
- yht=1;
- rht=1;
- delay(g);
- ght=1;
- yht=0;
- rht=1;
- delay(y);
- ght=1;
- yht=1;
- rht=0;
- delay(r);
- }
- }
- void send_byte(uchar by)
- {
- SBUF = by;
- while(!TI);
- TI = 0;
- }
- void send_string(uchar *p)
- {
- while(*p!= '\0')
- {
- send_byte(*p);
- p++;
- }
- }
- void delay(uint n)
- {
- unsigned int i=0;
- for(i=0;i<n;i++)
- {
- #pragma asm
- DEL3:MOV R0,#100
- DEL2:MOV R1,#100
- DEL1:MOV R2,#25
- DEL0:NOP
- NOP
- DJNZ R2,DEL0
- DJNZ R1,DEL1
- DJNZ R0,DEL2
- #pragma endasm
- }
- }
- void Usart() interrupt 4
- {
-
- uchar str1;
- #include "reg52.h"
- #include "stdio.h"
- #include "string.h"
- #define uchar unsigned char
- #define uint unsigned int
- void send_byte(uchar by);
- void send_string(uchar *p);
- void delay(uint n);
- uchar rst[]="AT+RST\r\n";
- uchar mod[]="AT+CWMODE=3\r\n";
- uchar wico[]="AT+CWJAP=\"Nick\",\"qweasdzxc\"\r\n";
- uchar sev[]="AT+CIPSTART=\"TCP\",\"192.168.43.31\",8080\r\n";
- uchar mods[]="AT+CIPMODE=1\r\n";
- uchar sen[]="AT+CIPSEND\r\n";
- uchar in[]="in\r\n";
- uchar copa[]="bye\r\n";
- uint g,y,r;
- sbit ght=P2^0;
- sbit yht=P2^1;
- sbit rht=P2^2;
- void UsartInit()
- {
- SCON=0X50;
- T2CON=0X34;
- PCON=0X80;
- RCAP2H=(65536-39)/256;
- RCAP2L=(65536-39)%256;
- ES=0;
- EA=1;
- ET0=1;
- ET1=1;
- EX0=1;
- IT0=1;
- EX1=1;
- IT1=1;
- }
- void main()
- {
-
- UsartInit();
- send_string(rst);
- delay(1);
- send_string(mod);
- delay(1);
- send_string(wico);
- delay(10);
- send_string(sev);
- delay(10);
- send_string(mods);
- delay(5);
- send_string(sen);
- delay(3);
- ES=1;
- g=5;
- y=2;
- r=5;
- while(1)
- {
- ght=0;
- yht=1;
- rht=1;
- delay(g);
- ght=1;
- yht=0;
- rht=1;
- delay(y);
- ght=1;
- yht=1;
- rht=0;
- delay(r);
- }
- }
- void send_byte(uchar by)
- {
- SBUF = by;
- while(!TI);
- TI = 0;
- }
- void send_string(uchar *p)
- {
- while(*p!= '\0')
- {
- send_byte(*p);
- p++;
- }
- }
- void delay(uint n)
- {
- unsigned int i=0;
- for(i=0;i<n;i++)
- {
- #pragma asm
- DEL3:MOV R0,#100
- DEL2:MOV R1,#100
- DEL1:MOV R2,#25
- DEL0:NOP
- NOP
- DJNZ R2,DEL0
- DJNZ R1,DEL1
- DJNZ R0,DEL2
- #pragma endasm
- }
- }
- void Usart() interrupt 4
- {
-
- uchar str;
- str=SBUF;
- RI = 0;//
- }
- void Iny0() interrupt 0
- {
- ES=0;
- send_string(in);
- ES=1;
- }
- void Iny1() interrupt 2
- {
- ES=0;
- send_string(copa);
- ES=1;
- }
- str1=SBUF;
- RI = 0;//
- }
- void Iny0() interrupt 0
- {
- ES=0;
- send_string(in);
- ES=1;
- }
- void Iny1() interrupt 2
- {
- ES=0;
- send_string(copa);
- ES=1;
- }
復(fù)制代碼
|
最佳答案
查看完整內(nèi)容
想像一下:一個(gè)數(shù)據(jù)流從你面前流過(guò),你如何知道誰(shuí)是最后一個(gè)呢?
無(wú)法確定最后一個(gè)是誰(shuí),又何來(lái)倒數(shù)呢?
問(wèn)題的前鍵就是這個(gè)!
也即通訊協(xié)議是如何定義:結(jié)束標(biāo)記的!
你先規(guī)劃一個(gè)緩沖區(qū),大小=4個(gè)字節(jié)+結(jié)束標(biāo)記。每次收到數(shù)據(jù)就依序放入這個(gè)區(qū)域(循環(huán)放置,并設(shè)置一個(gè)指針PX,每次輸入使PX指向它,目的:可以知道何處是頭,何處是尾。)每次輸入后,在PX(注意是循環(huán)+,要保證不溢出)的地方,判一下是不是結(jié)束標(biāo)記,如何是 ...
|