Keil C51单片机开发心得简介
时间:10-02
整理:3721RD
点击:
用Keil写C51程序是最好不过的了。用伟福也可以写,但伟福的编辑能力就相差太远了。个人喜欢用Keil写代码,然后用伟福硬件仿真(只有WAVE的仿真头)。不过Keil是好用,但写代码关键还是C51水平,也就是编程能力,写C程序就离不开模块化这个词了。C51和A51,要扬长避短,发挥C的长处,就得将C模块化好。刚刚开始的时候就只是熟悉C51的语法规则了,熟悉了这个然后再追求程序的可读性和可移植性。
下面是使用Keil C51的一点心得:
1、程序可读性的提高
要提高程序的可读性,就得养成一良好的编程习惯了,例如变量用小写,常量用大写,函数第一个字母用大写等等。这样成习惯以后,自己看代码就会一目了然。另外还要灵活的在KEIL中使用TAB键对对齐文本,而不要敲空格代替(优势,试了就知道了)。
2、程序的可移植性的提高
程序的可移值性是C51的优势所在,要做到移植方便,就得熟悉C51的编译过程有一定的了解,合理组织文件。可以将一个功能模块(如显示驱动,端口读写)放在一个C文件中,作为一个函数调用,然后在主程序中申明该函数,就可以随便调用了。
移值的时候也只要把当前的C文件加入到新的项目中,同样的方法调用它就可以。
另外模块化程序要善用C里面的“#IFDEF”、“#ENDIF”、“#DEFINE”等专为模块设计提供的功能。例如设计一个外面带的晶振的驱动模块,在不同的晶振频率下,该项模块的设置位可能不同。如果就直接在程序中写设置位,晶振改变,这些设置位也要逐一修改,这个程序也就不通用了,也就是可移值性不好。要解决这个问题怎么办 ,“#IFDEF”、“#ENDIF”可以帮你解决问题。这两个命令的功能就不具体说了,书上面讲得很清楚。知道这些功能你就知道该怎样使用它们进行模块化设计了。
3、Keil C51的debug技巧
A51的程序执行时间可能通过指令周期计算出来,而C51的却无从下手,很多程序员为了得到精确的执行时间而研读反汇编代码,何等的悲哀。巧妙的使用Keil中的debug功能,问题就迎刃而解了。
下面举例说明:
该程序为一个延时程序,在12M的晶振下,调用一次的时间为16uS ,执行一次循环的时间为9uS(延时范围(25us~589.831ms))。这样来,假设有语句Delay(N);那么该语句的精确延时的计算公式就是(9*N+16)uS了.这个公式可以理解吧!
如何得到程序的调用时间和执行一次循环的时间了。接着看下面:
在主程序MAIN()函数下添加上面两条语句,当前的SEC栏为执行到DELAY(1);语句所花的时间。T(0-)
上面的SEC栏为执行完DELAY(1)所花的时间,这样就可以得到DEALY(1)这条语句的执行时间为595-570=25uS.
上面的SEC栏为执行完DELAY(2)所花的时间,这样就可以得到DEALY(2)这条语句的执行时间为629-595=34uS.
结果:T[DELAY(2)]-T[DELAY(1)]不就是执行一次循环的时间嘛,而T[DELAY(1)]减去执行一次循环的时间就是调用一次要花的时间了。精确到1uS!
下面是使用Keil C51的一点心得:
1、程序可读性的提高
要提高程序的可读性,就得养成一良好的编程习惯了,例如变量用小写,常量用大写,函数第一个字母用大写等等。这样成习惯以后,自己看代码就会一目了然。另外还要灵活的在KEIL中使用TAB键对对齐文本,而不要敲空格代替(优势,试了就知道了)。
2、程序的可移植性的提高
程序的可移值性是C51的优势所在,要做到移植方便,就得熟悉C51的编译过程有一定的了解,合理组织文件。可以将一个功能模块(如显示驱动,端口读写)放在一个C文件中,作为一个函数调用,然后在主程序中申明该函数,就可以随便调用了。
移值的时候也只要把当前的C文件加入到新的项目中,同样的方法调用它就可以。
另外模块化程序要善用C里面的“#IFDEF”、“#ENDIF”、“#DEFINE”等专为模块设计提供的功能。例如设计一个外面带的晶振的驱动模块,在不同的晶振频率下,该项模块的设置位可能不同。如果就直接在程序中写设置位,晶振改变,这些设置位也要逐一修改,这个程序也就不通用了,也就是可移值性不好。要解决这个问题怎么办 ,“#IFDEF”、“#ENDIF”可以帮你解决问题。这两个命令的功能就不具体说了,书上面讲得很清楚。知道这些功能你就知道该怎样使用它们进行模块化设计了。
3、Keil C51的debug技巧
A51的程序执行时间可能通过指令周期计算出来,而C51的却无从下手,很多程序员为了得到精确的执行时间而研读反汇编代码,何等的悲哀。巧妙的使用Keil中的debug功能,问题就迎刃而解了。
下面举例说明:
该程序为一个延时程序,在12M的晶振下,调用一次的时间为16uS ,执行一次循环的时间为9uS(延时范围(25us~589.831ms))。这样来,假设有语句Delay(N);那么该语句的精确延时的计算公式就是(9*N+16)uS了.这个公式可以理解吧!
如何得到程序的调用时间和执行一次循环的时间了。接着看下面:
在主程序MAIN()函数下添加上面两条语句,当前的SEC栏为执行到DELAY(1);语句所花的时间。T(0-)
上面的SEC栏为执行完DELAY(1)所花的时间,这样就可以得到DEALY(1)这条语句的执行时间为595-570=25uS.
上面的SEC栏为执行完DELAY(2)所花的时间,这样就可以得到DEALY(2)这条语句的执行时间为629-595=34uS.
结果:T[DELAY(2)]-T[DELAY(1)]不就是执行一次循环的时间嘛,而T[DELAY(1)]减去执行一次循环的时间就是调用一次要花的时间了。精确到1uS!
谢谢小编分享。
学习了 感谢小编 !
不错
very good!
谢谢分享
谢谢小编分享
好东西