c#编写的上位机与单片机通信,这两行代码输出的值怎么来的

unsigned int rx_index;//串口指针
void usart_set_mode(void)
{
if(rx_index>6)
{
if(rx_temp[rx_index-7]=='m'&&rx_temp[rx_index-6]=='o'&&rx_temp[rx_index-5]=='d'&&rx_temp[rx_index-4]=='e')
{
if(rx_temp[rx_index-3]=='=')
{
if(rx_temp[rx_index-2]=='1'){
mode=1;
}
if(rx_temp[rx_index-2]=='0'){
mode=0;
}
if(rx_temp[rx_index-2]=='2'){
mode=2;
}
printf("mode=%bd\r\n",mode);
}
}
}
}
我就想知道他这个rx-temp的值怎么算出来的 我是萌新

第1个回答  2019-04-09
MScomm控件,以Visual Studio中是通用的控件,也就是说不仅VB能用,VC/C#都行用。 我试过,在C#中使用,跟VB一样的简单(我个人觉得甚至比VB更简单),直接从控件中拉到程序框,然后设置属性,再用事件触发函数处理数据的传送与接收就行。
第2个回答  2019-04-09
这不是算出来的,这是上位机发过来的,串口接收后存储在数组rx_index[ ]中
然后程序直接判断 mode=1还是mode=2 还是mode=0本回答被提问者采纳
第3个回答  2019-04-09
51系列单片机与上位机通讯有两种串口通讯方式:
方式一.使用自带串口通讯模块,使用RxD/TxD口,用内置定时器产生波特率,通过中断方式得到发送和接收数据
方式二.使用任一IO端口,自已进行收发解码操作。这种模式需要注意的地方比较多,比如
A.常用串口数据帧格式: 0+8位data+1, 0是起始位,1是停止位,是中间放8位数据
B.波特率,需要自已控制,而且了为采样准确,通常使用16分频方式,取中间几段来确定是否是有效数据。

串口通讯最重要的工作就是控制波特率,比如9600、19200等,如果使用不精确的内部RC震荡器,需要注意不要使用过高的波特率,
否则有可能丢数据或错位。
研究了一晚上,把这两种方式都试通了,现在可以用PC机用串口助手可向单片机发指令来控制单片机的状态,单片机也可以向PC机报告自已的数据。

之后测试了一个光敏电阻数模转换ADC试验,成功的把模拟的光线亮度转换成 0-255的分量,然后通过串口报告给主机。
想起很多前年,我的资本家同学XY给过我一个数码尺,可以把测量出来的长度数据直接用串口输出,当时我觉得这玩意太神奇了,完全不知道是怎么实现的。现在想想,感觉自已完全可以实现一个了,不外乎ADC+UART+MCU罢了,呵呵。

话说咱这块STC的MCU的ADC功能还是比较强大的(STC 12C5202AD),有8个模拟量采样口,可以并发进行8通道的256级采样。虽然精度不高,但对很多应用已经足够了。其实别说256级了,很多时候简单的开关两级变化就已经很有用了。

上周末还把我的四相步机电机研究了一下,写了一个小程序控制步进电机连续运动,也就是几个二进制状态的切换问题,没有技术含量,不叙。

红外遥控技术也研究了一下,原理同口串口通讯,只是波特率固定为38Khz,然后发的数据帧不同罢了。搞清原理,没有继续实验。
难怪外面有卖万能遥控器的,这里面就是一个红外串行通讯。万能遥控就是先收原厂遥控的码,再发出来罢了。实在不行,把所有的码都发一编,总有一个适合你。外面那些个汽车的电子钥匙解码器怕不会也是这个原理吧,也就是说,你蹲在人家汽车旁边,开个机器收无线码,然后就可以复制,或者自已发码,暴力破解?

研究了十几天的单片机和周边,感觉这块大体清楚了怎么回事,后面该干点啥子哩?
专用炒股机?声控小玩具?智能炸弹?无人机?激光窃听器?
第4个回答  2019-04-09
你用的是移动还是联通的网卡?移动的卡是比较贵,你换一下电信或者联通的试一试。要不然的话,你可以试一试。与另一个人合用一张卡。一个人用主卡一个人用副卡。还有联通的账号,现在每个联通号码都可以每个月免费500M流量。都是很划算的。你如果用那些很贵的套餐,一个月当然要交很多钱。或者是你尝试问一下移动的有没有其他的互联网套餐。建议去淘宝上找一找,淘宝上有很多优惠套餐的。但是如果你的号码。不愿意换号码的话,恐怕很难弄。移动公司就开这种这点。不让你改
第5个回答  2019-04-09
MScomm控件,以Visual Studio中是通用的控件,也就是说不仅VB能用,VC/C#都行用。 我试过,在C#中使用,跟V
相似回答