设为首页收藏本站淘宝杂货铺

从F到0 - From F to 0

 找回密码
 注册已关闭
搜索
查看: 1141|回复: 0
收起左侧

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

[复制链接]
发表于 2021-12-4 18:57:13 | 显示全部楼层 |阅读模式
本帖最后由 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. }
复制代码

相关帖子

您需要登录后才可以回帖 登录 | 注册已关闭

本版积分规则

QQ|手机版|Archiver|从F到0 ( 蒙ICP备17002595号-1 )
蒙公网安备15010402000325号

腾讯云安全认证

GMT+8, 2024-4-27 11:45 , Processed in 1.345077 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表