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

[09-12 18:32:08]   来源:http://www.88dzw.com  EDA/PLD   阅读:8151

文章摘要:static unsigned char current_dat;//定义一个通用的辅助字节变量static unsigned char addr;//自定义地址变量缓冲单元static unsigned char Rdat;//自定义读数据缓冲单元bit bdata switch_sign;//自定义的翻转标志位(应作全局变量定义)……addr=0x7F6;//给一个原来的存储地址REEPROM();//调用读取E2PROM的子程序current_dat=Rdat;//将读出的数据还给通用的辅助字节变量if(current_dat==0xA5) {//判断读出的数据是否等于“0xA5”swi

C51编程中的自定义“位”及其保存方案,标签:eda技术,eda技术实用教程,http://www.88dzw.com

  static unsigned char current_dat;//定义一个通用的辅助字节变量

  static unsigned char addr;//自定义地址变量缓冲单元

  static unsigned char Rdat;//自定义读数据缓冲单元

  bit bdata switch_sign;//自定义的翻转标志位(应作全局变量定义)

  ……

  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] 


Tag:EDA/PLDeda技术,eda技术实用教程EDA/PLD

《C51编程中的自定义“位”及其保存方案》相关文章

分类导航
最新更新
热门排行