新闻中心

EEPW首页>嵌入式系统>设计应用> C51编程中的自定义“位”及其保存方案

C51编程中的自定义“位”及其保存方案

作者: 时间:2013-02-17 来源:网络 收藏

  addr=0x7F6;//给一个原来的存储地址

  REEPROM();//调用读取E2PROM的子程序

  current_dat=Rdat;//将读出的数据还给通用的辅助字节变量

  if(current_dat==0xA5) {//判断读出的数据是否等于“0xA5”

  switch_sign=1;//将翻转“switch_sign”置“1”

  }

  else {

  switch_sign=0;//将翻转“switch_sign”置“0”

  }

  31个字节保存8个“位”

  用保存一个的字节变量来复原一个的过程上文已叙述了,接下来阐述1个字节变量保存8个自定义“位”的方案。1个字节变量保存8个自定义“位”的方案很多,例5是其中比较理想的一种:

  #defineuint unsigned int

  #defineuchar unsigned char

  uintaddr;

  ucharWdat,Rdat;

  uchar bdatacurrent_dat;//在可位寻址区定义unsigned char类型的字节变量current_dat

  sbitsign_bit1= current_dat^0;//用关键字sbit 定义位变量来独立访问可寻址位对象中的1位

  sbitsign_bit2= current_dat^1;//自定义标志位2

  sbitsign_bit3= current_dat^2;//自定义标志位3

  ……

  sbitsign_bit8= current_dat^7;//自定义标志位8

  ……

  void Bit_save() {//自定义标志位保存子程序

  addr=0x7F6;//给予存储地址

  Wdat= current_dat;//将current_dat赋值给写E2PROM的缓冲单元Wdat

  save_data();//调用保存子程序存储current_dat数据

  }

  void Bit_comeback() {//自定义标志位复原子程序

  addr=0x7F6;//给一个原来的存储地址

  REEPROM();//调用读取E2PROM的子程序

  current_dat=Rdat;

  //将读出的数据还给通用的辅助字节变量

  }

  以上这段程序所阐述的,也许是有关自定义位操作及其保存的一种最简捷的方案了。首先是在可位寻址区定义ucsigned char类型的通用字节变量current_dat,再用关键字“sbit”定义位变量来独立访问可寻址位对象的其中一位。这样将自定义标志位提高到类同于特殊功能寄存器(SFR)中可位访问的方式来操作了——字节变量current_dat中的8个位各自可以独立操作,且其保存或读出复原都只要直接将字节变量current_dat进行保存或读取即可,无须像其他方案那样需要进行逻辑与、逻辑或等的辅助操作。

  结语

  单片机的C语言编程中不一定都要有自定义的标志位,但是在某些场合运用了自定义的标志位,会使整个程序显得简洁而明快。当然,对于自定义标志位的保存也是视其具体情况而定——应该说是不得已而为之的。


上一页 1 2 3 下一页

评论


相关推荐

技术专区

关闭