单片机中code,sbit,unsigned关键字的作用(流水灯案列说明)

首先,写上一端单片机C语言流水灯点亮主函数
 #include "reg52.h"
 unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f};


 void delay()
 {
   unsigned int a;
   for(a=0;a<10000;a++);
   
 }

 int main()
 {
   unsigned int i;
   while(1)
   {
      for(i=0;i<8;i++)
	  {
	     P1=table[i];
		 delay();
	  }
   }
 }

首先,来解释一下code关键字的作用:

一般说来,我们在C语言中定义的每一个变量初始化后都会占用一定的内存(RAM)空间。但是在keil中提供了提

一个特殊的关键字“code”,这个关键字在标准C中是没有的。其语法举例如下:
unsigned char code table[]={0xfe,0xfd,0xfb,0xf7,0xef,0xdf,0xbf,0x7f}
我们知道,在单片机中一般都有两块存储区域,ROM和RAM,程序代码存储在ROM中,程序要用的变量存储在RAM中。而“code”的作用就是将其修饰过的变量存储在ROM中而非RAM。
在单片机中,RAM空间都比较小,是比较宝贵的。“code”的意义就是将一些初始化后值一直保持不变的变量(如:固定的常数、表格、常量数组、只读常量等)放置于ROM区,从而节省了RAM空间。
注意:用“code”修饰的变量是不能在程序运行时改变的!

在上面定义的数组中,每一个都对应一个LED灯的点亮,将其值赋给p1端口,则可以此实现流水灯的效果。

sbit关键字的作用:
 sbit是定义特殊功能寄存器的位变量。bit和sbit都是C51扩展的变量类型。
典型应用是:sbit P0_0=P0^0;       //即定义P0_0为P0口的第1位,以便进行位操作。bit和int char之类的差不多,只不过char=8位, bit=1位而已。都是变量,编译器在编译过程中分配地址。 
在C语言里,如果直接写P1.0,C编译器并不能识别,而且P1.0也不是一个合法的C语言变量名,所以得给它另起一个名字,这里起的名为P1_0,可是P1_0是不是就是P1.0呢?你这么认为,C编译器可不这么认为,所以必须给它们建立联系,这里使用了Keil C的关键字sbit来定义,sbit的用法有三种:
第一种方法:sbit 位变量名=地址值
第二种方法:sbit 位变量名=SFR名称^变量位地址值
第三种方法:sbit 位变量名=SFR地址值^变量位地址值
如定义PSW中的OV可以用以下三种方法:
sbit OV=0xd2 (1)说明:0xd2是OV的位地址值
sbit OV=PSW^2 (2)说明:其中PSW必须先用sfr定义好
sbit OV=0xD0^2 (3)说明:0xD0就是PSW的地址值

因此这里用sbit P1_0=P1^0;就是定义用符号P1_0来表示P1.0引脚,如果你愿意也可以起P10一类的名字,只要下面程序中也随之更改就行了。

unsigned关键字的作用:

整型有无符号(unsigned)和有符号(signed)两种类型,在默认情况下声明的整型变量都是有符号的类型(char有点特别),如果需声明无符号类型的话就需要在类型前加上unsigned。无符号版本和有符号版本的区别就是无符号类型能保存2倍于有符号类型的数据,比如16位系统中一个int能存储的数据的范围为-32768~32767,而unsigned能存储的数据范围则是0~65535。

 在一些不可能取值为负数的时候,可以定义为unsigned,在一些底层的嵌入式编程的数据一般都是无符号的。 

  • 11
    点赞
  • 45
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值