单片机KeilC51编程心得,用时间换来的教训!收藏
【版本】
1.0.0
【操作系统】
STC11L05E单片机
【作者】
【开发日期】
20__-07-1510:11
【文档日期】
20__-07-1817:14
【源代码】
用IAR编写的在芯片MSP430上能正常执行的代码放在用KeilC编写的执行在STC11L05E芯片上就会有奇怪的问题,这些代码在PC上执行也是正常的,看来STC11L05E芯片很不怎么滴啊!
1、在中断服务程序里收到一个字节的数据,调用一个函数,将该数据传递给函数,函数里将数据保存到一个全局的数组中,但保存进去的数据再次读出来的时候却被改变了,如果将这个函数的代码全部移到中断服务程序里却执行正常;
/全局数组用来保存中断里收到的数据
unsignedcharbuf[32]=0;
intnPos=0;
voidOnReceived(unsignedcharRecvData)
buf[nPos]=RecvData;
if(buf[nPos]==RecvData)/错误:这里判断为FALSE
P1=0_fe;/LED灯亮
nPos++;
/中断服务程序
voidInterruptRoutine(void)interrupt4using2
/staticBOOLbFLag=FALSE;
if(RI)
RI=0;
OnReceived(SBUF);
/---------------------------------------------------------
/改成这样就没问题了
/---------------------------------------------------------
/中断服务程序
voidInterruptRoutine(void)interrupt4using2
/staticBOOLbFLag=FALSE;
if(RI)
RI=0;
buf[nPos]=SBUF;
if(buf[nPos]==SBUF)/错误:这里判断为TRUE
P1=0_fe;/LED灯亮
nPos++;
2、Byte数据相乘前要强制转换为Short型,否则结果错。
unsignedcharpData[4]={0_aa,0_bb,0_17};
/0_17=(unsignedchar)(0_aa0_bb/2)
ASSERT(pData[2]==(unsignedchar)(pData[0]pData[1]/2));/断言失败
ASSERT(pData[2]==(unsignedchar)(((short)pData[0](short)pData[1])/2));/断言成立,相乘前先转换为short型
3、将两个字节的Byte数赋值给一个Short变量时,最好采用移位的方法,直接操作指针会出错。
unsignedshortnShort=0;
unsignedcharpCharArray[2]={0_09,0_00};
/期望nShort变成0_0900,可XXX执行完以后却是_0000
((unsignedchar)nShort)=pCharArray;
(((unsignedchar)nShort)+1)=(pCharArray+1);
/改成移位的方式就没问题
nShort=pCharArray[0];
nShort|=(((unsignedshort)pCharArray[1])<<8);
总结:这些错误是我经过无数次地“修改代码->编译->烧录->通信测试->判断LED灯检查执行结果”反复操作而得到经验教训,这些问题的产生原因目前不得而知,请单片机编程工程师一起探讨并将您的看法回复本留言,谢谢!
编写单片机程序最好能用最精简的语法,否则编译器将会让你付出沉重的代价来排错,因为单片机的编译器是非常弱小的,按照杨的话说“最后一绝招,那就是使用汇编”,可计算机技术日新月异,一日千里,汇编的时代理应早就过去了,汇编语言那是给机器去使用的语言,人类应该使用接近自然语言的编程方法,这样才能解决更复杂的业务逻辑。
第三篇:单片机课程项目设计总结1300字
组员:赵,江,黄
一、在整个过程中出现的问题及解决方案
在整个课程项目的设计过程中,我们遇到了许多困难和问题,但是凭着良好的心态和不放弃的精神,我们最终顺利完成了作品的设计和制作。
1、编程基础不扎实。
由于大一时没有打下扎实的编程基础,在编写这次的项目程序时,我们总是干道无处下手。最后我们通过查资料,并师兄的指导下,找准了方向。
2、硬件连接原理在某些方面存在误解。
由于是第一次在没有老师的情况下做作品,有些时候就会想当然,缺少实战经验的我们缺少理论到实践的经验,不过实验室的两位学长在这方面帮了我们很多。
二、团队管理的心得体会:
单片机的课程项目设计给了我们一次团队合作的机会,对于我们这一代来说,团队合作精神是我们身上所缺少但却必须要具备的。
在这次的团队合作中我们有以下几点感悟:
1、心要齐
作为同一个团队的成员,大家都是为了同一个目标奋斗,所以要以积极的态度朝着好的方向努力。
就比如做这个课程设计,首先大家在做什么作品上面要达成认同,目标统一了之后才能团结起来去为之奋斗。在奋斗的时候,每个人的态度都要端正,不能有的人很积极的在准备,而有的人却在消极的应付差事,这样不仅不利于团队的发展,更会影响到队员之间的感情,最后很可能导致团队的解散,不仅作品完成不了,同学之间的友谊也多了裂痕。
2、心要宽
虽然大家在一个团队,为了同一个目标在奋斗,但是每个人依旧是个的个体,不可能在每一个方面大家都是想的一样的,当某个队员自己有一些想法时,我们要个他一个宽松的环境让他坦诚的说出心里的话,作为听众的我们,要耐心的听取他的意见,认真思考,然后用合适的方式进行讨论,不能别人一说什么就否定人家,这样一来,以后队里就不会再有人说话了,好的创意和想法也不会有被挖掘的机会。
如果我们自己心里有什么想法,也要大胆的说出来,但是要注意语气和措辞,毕竟这是大家的团队,不是以自己为领导的工作班子。要听得进别人的意见。
三、课程设计的心得体会:
这次单片机课程设计,在我们看来不仅仅是单纯的一个单片机的应用,而是多学科多领域的综合设计。做完这次设计,我们有以下几点心得体会:
1、做这个设计不是光靠学好单片机这一门课就可以的。
在这个课程项目的设计过程中,我们充分体会到了要全面发展,各个学科都要学好,知识的全面性很重要。比如在编写程序时,我们就明显感觉到了C语言的基础不够扎实,当初学C语言的时候并没有意识到它的重要性,而当我们真正开始做设计的时候才发现一个课程的项目设计是需要其他许多项目来给它做基础的。
2、做这个设计不是光靠学好书本上的知识就够的。
设计的灵魂便在于它的理念,要做出一个好的设计作品来,需要你平时对生活有足够的观察和了解,古话说,学以致用,及时你设计出来的东西原理再高深,但在实际生活中却无处可用,那也是没有任何价值的。所以在刻苦学习的同时,也要关注社会动态,了解人民生活所需,有一个正确的设计理念才能使自己走对第一步棋。
四、项目成员贡献排序
纵观整个设计制作过程,我们认为每一个人都是进了自己最大的努力的,所以大家的贡献一样,各占三分之一。
赵0.33江0.33黄0.33
五、课程改革建议
1、能否编一本更适合我们的教材,以便我们能更好的学习这门课。
2、可否减少一次上课时间,增加每周上课次数,这样有助于我们对知识的理解和吸收。