完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
电子发烧友论坛
|
|
|
|
|
|
|
|
|
|
信鸿哥无坎坷!!!
|
|
|
|
|
|
|
|
|
学从鸿哥的感悟: “海到尽头天作岸,山登绝顶人为峰”------就像大海到了尽头,以苍天为岸,对自己是一种拓展;人登上山峦的顶峰,并不是把高山踩在脚下,而是站在山顶,高山提升了人的高度,并不是对高山的征服------我们有幸看到鸿哥的“战斗机驾驶法”,是因为我们站在了鸿哥的肩上,提升了“作战技能”。------协调是“编程之道”的至高技术标准,是编程学上那最合适的“度”,协调的理想结果是一切处于和谐之中,这种和谐就是步程活动在程序环境中各安其位,绚烂之极而归于平淡。------不是吗?要不,13亿的泱泱大国还提构建和谐社会干嘛呢? 贺鸿哥五十节例程 编程高手吴坚鸿, 创立框架教新人。 莫道年纪未三十, 人人尊敬投其门。 历来大师虽遵从, 编程之道常有新。 框架思想今抛出, 那家新说再出笼?
|
|
|
|
|
|
|
|
|
谢谢,看得我激情澎湃,你太有才了。这么捧鸿哥,还不知道怎么称呼你呢?你多大了?在哪工作?也是搞单片机开发的吗? |
|
|
|
|
|
|
|
|
谢谢你的夸奖,非常感谢。你很有才华,我非常佩服你的文采。 |
|
|
|
|
|
|
|
|
答鸿哥 未知前世阴德重? 今为新会一村童。 自幼深得父母爱, 学文习武乐融融! 身出寒门无所谓, 合家平安心是祈。 天公不从人所愿, 祸不单行双亲飞。 二八之年求独立, 大学之门遥无期。 天生我才何所用? 遭人白眼心深记! 幸得表兄看得起, 请入店中当修理。 日做夜挨二年几, 缺技少术受人气。 近来爱上单片机, 苦于无门难明理。 机缘巧合遇鸿哥, 暗自师从无脸皮。 勤学苦练有长进, 不觉心中暗自喜。 若能修得成正果, 哪怕剐去一身皮!
|
|
|
|
|
|
|
|
|
哈哈,thank you!学以致用,创新提高。好! |
|
|
|
|
|
|
|
|
确实有才,回到高中文言文的感觉,好好修炼,在工作的同时,勤学苦练,不断积累,相信你会成功的。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
你的文采已经很厉害了,再钻研一下单片机技术还是很有用的。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//鸿哥你好,关于第七节:安全可靠的串口通讯协议之校验,我觉得服务函数处理的不好,不知理解的对不
//稍微修改下通讯协议 01 55 A9 XX YY CY ,或者02 55 a5 xx yy yy cy 其中xx 为数据长度,yy为数据,cy为和校验 //对于数据头 01,x1,x2 ,假如第一位是01,只要x1 + x2 = 0xfe,该通讯即使只收到3个字节(01 55 a9)也会判断校验通过, //假如收到的数据是01 55 A9,读取 RCREG_buf_temp[2]=asy_recieve(); 这时会在asy_recieve()中把RCREG_read_total、 //RCREG_total这2个变量清零,后面如果再执行asy_recieve()都只能返回第一个字节 //然后执行完if(RCREG_buf_temp[0]==0x01&& RCREG_buf_temp[1]==0x55&& RCREG_buf_temp[2]==0xA9) //这时读取 //RCREG_buf_temp[3]=asy_recievse(); 不管后面执行多少次asy_recieve()都是返回RCREG_buf[0]的值,也就是0x01 //Valid_total= RCREG_buf_temp[3]; //0x01 //for(m_int=0;m_int< Valid_total;m_int++) //提取有效数据 //{ // RCREG_buf_temp[4+ m_int]=asy_recieve(); //返回0x01 //} //RCREG_buf_temp[4+ Valid_total]=asy_recieve(); //0x01 //Receive_sum=0; //累加校验和计算 //for(m_int=0;m_int<(Valid_total+4);m_int++) //累加校验和计算 //{ // Receive_sum=Receive_sum+ RCREG_buf_temp[m_int]; //} //if(Receive_sum== RCREG_buf_temp[4+ Valid_total]) //校验和正确 01 + 55 + a9 + 01 + 01 = 01 //所以即使只收到3个字节 01 55 a9,也会判断校验通过 //对于02 55 a5 xx yy yy cy等一大堆的协议也一样,正确的应为(02 55 a5 02 02 02 02) ,如果只收到02 55 a5 这3个字节 //该服务函数也会判断为校验正确的 //所以执行完if(RCREG_buf_temp[0]==0x01&& RCREG_buf_temp[1]==0x55&& RCREG_buf_temp[2]==0xA9) //这条语句后每次执行asy_recieve()前应判断RCREG_read_total的值, 不然asy_recieve()会出现一直读第一个字节也会校验通过 //而判断接收正确的个别情况。 //所以我修改成以下的程序 while(RCREG_read_total CLRWDT(); RCREG_buf_temp[0]= RCREG_buf_temp[1]; //数据移动,方便截取关键字 RCREG_buf_temp[1]= RCREG_buf_temp[2]; RCREG_buf_temp[2]=asy_recieve(); if(RCREG_buf_temp[0]==0xeb&& RCREG_buf_temp[1]==0x00&& RCREG_buf_temp[2]==0x55) //数据头”eb 00 55”判断 { if(RCREG_read_total < RCREG_total) RCREG_buf_temp[3]=asy_recieve(); //数据量 else //接收数据有误 { RCREG_buf_temp[0]=0; //把临时处理数据清零,方便下次接收 RCREG_buf_temp[1]=0; RCREG_buf_temp[2]=0; eusart_send(0x00); //串口发送多一个填充无效字节,避免硬件原因引起第一个字节丢失 eusart_send(0xeb); //串口发送应答的数据 eusart_send(0x00); //串口发送应答的数据 eusart_send(0x55); //串口发送应答的数据 break; } Valid_total= RCREG_buf_temp[3]; //数据长度 if(Valid_total + 5 <= RCREG_total) //5: 头3个字节+ 长度1个字节 + 校验1个字节 { for(m_int=0;m_int< Valid_total;m_int++) //提取有效数据 { RCREG_buf_temp[4+ m_int]=asy_recieve(); } } else//接收数据长度不够 { RCREG_buf_temp[0]=0; //把临时处理数据清零,方便下次接收 RCREG_buf_temp[1]=0; RCREG_buf_temp[2]=0; eusart_send(0x00); //串口发送多一个填充无效字节,避免硬件原因引起第一个字节丢失 eusart_send(0xeb); //串口发送应答的数据 eusart_send(0x00); //串口发送应答的数据 eusart_send(0x55); //串口发送应答的数据 break; } RCREG_buf_temp[4+ Valid_total]=asy_recieve(); //自带校验和 Receive_sum=0; //累加校验和计算 for(m_int=0;m_int< (Valid_total+4);m_int++) //累加校验和计算 { Receive_sum=Receive_sum+ RCREG_buf_temp[m_int]; } if(Receive_sum== RCREG_buf_temp[4+ Valid_total]) //校验和正确 { RCREG_buf_temp[0]=0; //把临时处理数据清零,方便下次接收 RCREG_buf_temp[1]=0; RCREG_buf_temp[2]=0; eusart_send(0x00); //串口发送多一个填充无效字节,避免硬件原因引起第一个字节丢失 eusart_send(0xeb); //串口发送应答的数据 eusart_send(0x00); //串口发送应答的数据 eusart_send(0xaa); //串口发送应答的数据 voice_time_cnt= cnt_voice_time; //蜂鸣器响“滴”一声就停 } else //校验和出错 { RCREG_buf_temp[0]=0; //把临时处理数据清零,方便下次接收 RCREG_buf_temp[1]=0; RCREG_buf_temp[2]=0; eusart_send(0x00); //串口发送多一个填充无效字节,避免硬件原因引起第一个字节丢失 eusart_send(0xeb); //串口发送应答的数据 eusart_send(0x00); //串口发送应答的数据 eusart_send(0x55); //串口发送应答的数据 } break; //退出循环 } } |
|
|
|
|
|
|
|
只有小组成员才能发言,加入小组>>
求解外围电路实现的是4脚给持续低电平复位并正常工作,高电平不工作的原因
2382 浏览 1 评论
4241 浏览 3 评论
PIC1946程序有一个变量在运行过程中恢复初始值其他变量保持不变
2619 浏览 2 评论
3118 浏览 0 评论
PIC16F1825的RC5引脚,在主程序中操作无效,在中断中可以改变是为什么?
4577 浏览 5 评论
有套STM32与西门子200程序需要代写,有兴趣的工程师与有联系!
2489浏览 1评论
用XC8编译PIC18F25K80时提示下面Error,求怎么解决这个问题
6799浏览 0评论
/9
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-12-15 13:28 , Processed in 1.038456 second(s), Total 85, Slave 75 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191

淘帖