久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
單片機串口的自定義數據協議發送程序問題
[打印本頁]
作者:
51c_yang
時間:
2021-7-9 16:39
標題:
單片機串口的自定義數據協議發送程序問題
求幫忙看看單片機代碼是不是有什么問題;描述是:發送的串口協議的 幀頭AA,長度4,數據(3個字節)異或校驗(只校驗數據位);
只有輸入正確的話會把數據發送到串口助手在電腦上顯示出來;
現在是發什么它都接受,根本給規定的不一樣;
代碼:#include <reg51.h>
#include<intrins.h>
#define uchar unsigned char
#define uint unsigned int
#define FOSC 11059200UL
#define BRT (65536 - FOSC / 115200 / 4)
sfr AUXR = 0x8e;
sfr T2H = 0xd6;
sfr T2L = 0xd7;
sfr S2CON = 0x9a;
sfr S2BUF = 0x9b;
sfr IE2 = 0xaf;
sfr P0M1 = 0x93;
sfr P0M0 = 0x94;
sfr P1M1 = 0x91;
sfr P1M0 = 0x92;
sfr P2M1 = 0x95;
sfr P2M0 = 0x96;
sfr P3M1 = 0xb1;
sfr P3M0 = 0xb2;
sfr P4M1 = 0xb3;
sfr P4M0 = 0xb4;
sfr P5M1 = 0xc9;
sfr P5M0 = 0xca;
bit busy;
uchar xor_check;//異或校驗
uchar recv_data;//臨時變量用來接收S2BUF中的數據
uchar recv_cnt = 0;
uchar recv_buf[10];//接收數據
uchar recv_flag = 0;
uchar machine_step = 0;
void delay_140us(void);
//void delay_1ms(unsigned int i);
void Uart2SEND(uint dat);
void Uart2SENDStr(char *p);
void Delay500ms() //@11.0592MHz
{
uchar i, j, k;
_nop_();
_nop_();
i = 22;
j = 3;
k = 227;
do
{
do
{
while (--k);
} while (--j);
} while (--i);
}
void Uart2Isr() interrupt 8
{
if ((S2CON & 0x01) == 1)
{
S2CON &= ~0x01;
recv_data = S2BUF;
switch(machine_step)
{
case 0:
if(recv_data == 0xAA)//判斷是不是幀頭
{
machine_step = 1;
}
else
{
machine_step = 0;
}
break;
case 1:
if(recv_data == 04)//判斷第二個數據
{
machine_step = 2;
recv_cnt = 0;//
}
else
{
machine_step = 0;
}
break;
case 2: //開始接收數據(3個字節)
xor_check ^= recv_data;
recv_buf[recv_cnt] = recv_data;
recv_cnt++;
if(recv_cnt > 2)
{
machine_step = 3;
}
else
{
machine_step = 2;
}
break;
case 3:
if(xor_check == recv_data)
{
recv_flag = 1;
}
machine_step = 0;
recv_cnt = 0;
xor_check = 0;
break;
default: break;
}
}
if ((S2CON & 0x02)== 1)
{
S2CON &= ~0x02;
busy = 0;
}
}
void Uart2Init()
{
S2CON = 0x10;
T2L = BRT;
T2H = BRT >> 8;
AUXR = 0x14;
busy = 0;
}
void Uart2SEND(uint dat)
{
while (busy)
busy = 1;
S2BUF = dat;
//Delay500ms();
}
void Uart2SENDStr(char *p)
{
while (*p)
{
Uart2SEND(*p++);
}
}
void main()
{
P0M0 = 0x00;
P0M1 = 0x00;
P1M0 = 0x00;
P1M1 = 0x00;
P2M0 = 0x00;
P2M1 = 0x00;
P3M0 = 0x00;
P3M1 = 0x00;
P4M0 = 0x00;
P4M1 = 0x00;
P5M0 = 0x00;
P5M1 = 0x00;
Uart2Init();
IE2 = 0x01;
EA = 1;
Uart2SENDStr("test");
while (1)
{
if(recv_flag == 1)
{
recv_flag = 0;
// Uart2SEND(recv_data);
Uart2SENDStr(recv_buf);
}
}
}
作者:
yzwzfyz
時間:
2021-7-10 08:54
1、電腦上的串口助手是不會聽你的協議的,它不受你的協議束縛,所以它能收發。
2、單片機的串口,硬件上也不受你的協議控制,它是來一個收一個,根本不會聽你協議。
3、你能做的就是,CPU收到數據后,組裝一下,再用軟件與你的協議進行比對,不符合協議的就放棄這組數據,符合的就解析這組數據(執行協議內容、指令)。
作者:
lishengaha
時間:
2021-7-10 09:20
你定了協議 你軟件要按照協議寫軟件功能啊。。不然協議是用來干啥的。
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
日韩激情一区
|
欧美一区不卡
|
欧美黑人一级爽快片淫片高清
|
精品国产一区二区三区性色av
|
午夜视频在线播放
|
鸳鸯谱在线观看高清
|
亚洲视频免费在线观看
|
狠狠干av
|
一区二区三区在线看
|
成人在线免费
|
国产日韩亚洲欧美
|
亚洲精品一区在线
|
一区天堂
|
四虎影院在线观看免费视频
|
求毛片
|
午夜精品久久久久久不卡欧美一级
|
亚洲成人播放器
|
国产精品区二区三区日本
|
国产在线一区二区
|
夜夜草视频
|
午夜激情在线视频
|
av午夜电影
|
99国产精品久久久久老师
|
中文字幕在线一
|
涩涩视频在线观看免费
|
中文字幕动漫成人
|
亚洲精品成人av久久
|
国产欧美精品一区二区色综合朱莉
|
美女日皮网站
|
久久久这里都是精品
|
草久久久
|
黄色片亚洲
|
最新一级毛片
|
蜜月va乱码一区二区三区
|
国产精品美女www
|
精品欧美激情精品一区
|
男人天堂久久久
|
国产乱码精品一品二品
|
亚洲人成人一区二区在线观看
|
成人免费在线视频
|
亚洲免费三区
|