C51的使用技巧(摘录于书本)

(1)采用短型变量

提高代码效率最基本的方法就是减小变量的长度。减少int(16bit)的使用,多用unsigned char(8bit)。

(2)使用无符号类型

(3)使用位变量

对于某些标志位应使用位变量而不是unsigned char,可以节省7位的存储单元,且在RAM中访问位变量比较快。

(4)用局部变量代替全局变量

(5)使用宏代替函数,让程序有更好的可读性

 

1.  bit和sbit都是C51扩展的变量类型

bit只有0和1两种值,sbit是对应可位移空间的一个位,可位寻址区:20H~2FH。 一旦用了sbit *** = REGE^6这样的定义,这个sbit量确定地址了,sbit大部分是用在寄存器中,方便对寄存器的某位进行操作的。

2. bit位标量

bit位标量是c51编译器的一种扩充数据类型,利用它可以定义一个位标量,但是不能定义位指针
也不能定义位数组。它的值是一个二进制位,不是0或1,类似boolean中的true和false。
 

3. sfr特殊功能寄存器

sfr也是一种扩充数据类型,点用一个内存单元,值域为0~255.利用它可以访问51单片机内部的所有特殊功能寄存器。如果sfr P1 = 0x90,这一句定P1为P1端口在片内的寄存器,在后面的语句中我们可以用P1=255(对P1端口的所有的引脚置高电平)之类的语句来操作特殊功能寄存器。sfr是定义8位的特殊功能寄存器而sfr16 则是定义16位特殊功能寄存器。
 1.定义的变量不要太多。低128位为用户定义变量的存放区域(默认时),也可以把变量放在高128位,但容易出错,尽量少放,最好不放。通过*.M51可以查看内存变量的存放,最好不要超过110个字节,否则程序无法运行或出错。

2.如一个变量多处使用可定义为全局变量。例如循环变量i、j,尽量减少参数传递。

3.静态变量最好放在程序存储区,用code定义。

4.变量应定义为无符号数,像标志位等仅占一位的变量应定义为bit。

5.子程序在main()主程序之后的应事先声明,放在前面的不用声明。

6.变量、子程序定义但没使用,系统给出警告。

7.虽然局部变量和全局变量不同名,但运行时可能被全局变量改变。

8.程序在编译后,有可能产生非常大的文件。比如原来5k,编译后变成10k,这是C汇编时程序空间分配太随意造成的。可首先屏蔽一部分程序编译,然后再去屏蔽再编译,可恢复,或一部分一部分复制到另一个文件中编译。

9.如产生脉冲信号用到定时器,要去掉脉冲信号时,应先关定时器,再按要求把电平置为高电平或低电平。

10.可使用软件实现“看门狗”功能。比如:一个程序运行一个循环需要50ms,则定时器可定位100ms,当超过100ms时,程序将复位,在程序循环最下面都重装定时器或重置定时器参数。

11.为了提高所求值的精度,可多次测量,然后排序,去掉最大值和最小值,求平均值,或直接求平均值。

12.可使用一个定时器进行多个定时。一般来说,两个定时器对大一点的程序就不够用了,假如几个定时时间分别为10ms、200us、50ms,则定时值可定位200us,另设两个变量即可。在需要多个定时时,找到他们的最小公约数定时即可。

13.我们往单片机中写程序时,写的是*.hex,不要被它的大小所迷惑,对于8k的单片机,小于20k的程序都可写进去。

 

 

转载于:https://www.cnblogs.com/lifan3a/articles/6433574.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值