AVR单片机与上位机通信协议的制定(1)

分享到:

单片机和上位机的串口通信协议分为上行协议和下行协议,要分别制定!

上行协议,即由单片机向上位机发送数据。

下行协议,即由上位机向单片机发送数据。

 

而通信协议又要分固定长度和不定长度两种

本文所介绍的协议属于简单的固定字长的通信协议!

 

下行协议由四个字节构成

 

起始字PRE 命令字ORD 值VAL 结束字END 附注
1byte 1byte 1byte 1byte  
BBH AAH(ORD_SATA)     单片机状态转换命令标识
01H EEH 模式1:空闲
02H EEH 模式2:温度采集
03H EEH 模式3:温度采集向上位机传送采集值
04H EEH 模式4:PWM测试
BBH DDH(ORD_PWM) value EEH PWM占空比值修改指令
BBH FFH(ORD_TEM) value EEH 目标温度控制指令

 

上表是简单的上位机对单片机的控制指令

下述函数是C#中封装的串口通信类中的发送函数的封装

public void SerSendCommu(byte orderDef, byte data)//参数1为命令字,参数二为要发送的数

//据,需要时可直接调用
{
Byte[] BSendTemp = new Byte[SEND_LENTH];
BSendTemp[0] = PRE;
BSendTemp[1] = orderDef;
BSendTemp[2] = data;
BSendTemp[3] = END;
this.serialPort1.Write(BSendTemp, 0, SEND_LENTH);
}

下位机中用中断方式接收字符,本文用的是GCC语言,下面是串口接收数据中断

ISR(USART_RXC_vect)//串口接收中断
{
unsigned char status,data;
status = UCSRA; //**首先读取UCSRA的值,再读取UDR值,顺序不能颠倒,否则读取UDR后的UCSRA的

//值即会改变**
data = UDR;
if(!Uart_RecvFlag)//判断缓存中的数据是否读完,读完则接收指令
{
if((status&((1<<FE)|(1<<PE)|(1<<DOR)))==0)
{
rx_buffer[rx_counter]=data;
rx_counter++;
switch(rx_counter)
{
case 1:
if(data!=USART_BEGIN_STX)
rx_counter=0;
break;
case 4:
rx_counter=0;
if(data==USART_END_STX)
Uart_RecvFlag=1;
break;
}
}
}

}

在单片机主循环程序的最前部分进行指令译码

if(Uart_RecvFlag)//接收到命令
{

switch(rx_buffer[1])
{
case 0xAA://单片机状态命令控制;
ucWorkStatue=rx_buffer[2];//指令数据

break;
case 0xDD://PWM值修改指令

OCR2=rx_buffer[2];
break;
case 0xFF://初始温度设定
break;
}
Uart_RecvFlag=0;
}

//随后进行执行指令

switch(ucWorkStatue)
{
case 1://空闲模式
break;
case 2://测量模式,但不输出
break;
case 3://测量模式,由串口输出
break;
case 4://PWM输出测试
break;
default:
break;
}
这样就可以利用串口对单片机进行在线命令控制了;
 

继续阅读
Microchip推出两大全新单片机系列

Microchip 8位MCU产品部副总裁Steve Drehobl表示:“新一代Arduino开发板选用ATmega4809器件,不仅加强了两家公司的合作关系,还为Arduino平台带来了CIP和智能模拟的优势”。

Microchip推出新款megaAVR单片机,结合特有耐辐射性能与低成本开发特性

为空间应用开发耐辐射系统不但需要很长的交期,而且成本非常高,因为系统必须具备极高的可靠性才能在恶劣的环境下长年工作。今天,NewSpace和其他重要的航空航天应用都要求加速开发,降低成本。为满足这些需求,Microchip Technology Inc.(美国微芯科技公司)推出了一种新型单片机(MCU),该器件结合了特有的耐辐射性能以及现有商用(COTS)器件的低成本开发特性。

如何用面包板搭建一个实验电路?

面包板是一种用于电路实验的器材,上面有很多孔,我们可以将元器件和导线插进去,组成我们需要的电路。如果发现电路有错,拔下元件和导线重新插接即可。电路做完后,所有元件还可以拔下来再次使用。

单片机控制板需要遵循哪些设计原则?

在元器件的布局方面,应该把相互有关的元件尽量放得靠近一些,例如,时钟发生器、晶振、CPU的时钟输入端都易产生噪声,在放置的时候应把它们靠近些。对于那些易产生噪声的器件、小电流电路、大电流电路开关电路等,应尽量使其远离单片机的逻辑控制电路和存储电路(ROM、RAM),如果可能的话,可以将这些电路另外制成电路板,这样有利于抗干扰,提高电路工作的可靠性。

Microchip的MPLAB Harmony软件升级,不但提高了代码效率,而且还增强了图形开发工具

Microchip Technology Inc.(美国微芯科技公司)日前宣布,现在可以从Microchip网站免费下载MPLAB® Harmony 2.0——适用于PIC32单片机的全功能固件开发框架。这一屡获殊荣的软件平台经过此次重要升级,使客户能够开发出更精简、更高效的代码,让器件速度更快,更具成本效益。除了质量更好的代码,此次升级还增加了许多可在MPLAB X集成开发环境(IDE)中使用的新工具。

©2018 Microchip Corporation
facebook google plus twitter linkedin youku weibo rss