设为首页收藏本站帮助中心
查看: 131|回复: 0
收起左侧

C51/STC单片机 定义(32字节)256位位数组(逻辑型数组)的实现方法 解决Keil不支持位数组

[复制链接]
发表于 2021-12-4 18:57:13 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?加入我们

x
本帖最后由 GPIO 于 2021-12-4 18:57 编辑

1.png
单片机型号:STC任意 晶振频率:任意 硬件连接:无
Keil不支持定义 bit 位数组,因为51指令集没有间接位寻址。
BDATA只有16字节(128位,最多可定义128个bit变量) 如果不够用,可通过以下两个函数实现。
  1. #include "reg51.h"
  2. #define u8 unsigned char
  3. u8 BitArray[32];                //位数组 32*8=256位 相当于 bit BitArray[256];
  4. bit ReadBitArray(u8 pc) {                //读位数组 参数1:位地址 返回位值
  5.         return 1 << (pc & 7) & BitArray[pc >> 3];
  6. }

  7. void WriteBitArray(u8 pc,bit dat) {                //写位数组 参数1:位地址 参数2:位值
  8.         u8 a = pc >> 3;
  9.         u8 b = 1 << (pc & 7);
  10.         if (dat) {
  11.                 BitArray[a] |= b;
  12.         } else {
  13.                 BitArray[a] &= ~b;
  14.         }
  15. }

  16. void main() {
  17.         u8 pc = 0;
  18.         bit dat;
  19.         while (1) {
  20.                 dat = ReadBitArray(pc);
  21.                 dat = !dat;
  22.                 WriteBitArray(pc, dat);
  23.                 pc++;
  24.         }
  25. }
复制代码

相关帖子

这个小可爱很神秘,什么都没留下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 加入我们

本版积分规则