• 已解决 73482 个问题
  • 已帮助 5993 位优秀工程师

51内核直接操作地址方式操作IO问题

我是爆米花啊 2018-05-25 浏览量:873

51内核单片机。我写了个操作IO的宏#define MADA_PIN_OUT(x,y,z)   *(x) = (((*(x))&(~(1<<(y))))|((z)<<(y)))不起作用。

于是我就写成图片里那样,做简单直接的测试。这两句是放在 1ms中断里的。实际测试波形。IO口并没有翻转。IO口配置没问题。

242424242.jpg

252525.jpg

51内核单片机。我写了个操作IO的宏#define MADA_PIN_OUT(x,y,z)   *(x) = (((*(x))&(~(1<<(y))))|((z)<<(y)))不起作用。

于是我就写成图片里那样,做简单直接的测试。这两句是放在 1ms中断里的。实际测试波形。IO口并没有翻转。IO口配置没问题。

0 0 收起

我来回答

上传资料:
选择文件 文件大小不超过15M(格式支持:doc、ppt、xls、pdf、zip、rar、txt)
最佳答案
  • 51是哈佛结构,这种写法只能操作memory,并不能操作io端口,因为端口的地址不是挂载内存上的,需要用sbit定义
    • 发布于 2018-05-26
    • 举报
    • 评论 0
    • 0
    • 0

其他答案 数量:5
  • IO口定义的寄存器是sbit
    • 发布于2018-05-25
    • 举报
    • 评论 0
    • 0
    • 0

  • 可以用寄存器实现的为什么要操作地址呢?sbit LED=P1^0;然后对LED进行操作就可以了,没必要用内存映射。​

    • 发布于2018-05-27
    • 举报
    • 评论 2
    • 0
    • 0
我是爆米花啊 回复了 donatello :原本的初衷是,把一堆不连续的IO放在结构体数组里。然后用宏来循环操作。这段程序短几倍几十倍,取决你要操作的IO数目。 回复
我是爆米花啊 回复了 donatello :原本的初衷是,把一堆不连续的IO放在结构体数组里。然后用宏来循环操作。这段程序短几倍几十倍,取决你要操作的IO数目。 回复

  • 记得51都是位操作啊,就是SBIT定义的,
    • 发布于2018-06-04
    • 举报
    • 评论 0
    • 0
    • 0

相关问题

问题达人换一批

51内核直接操作地址方式操作IO问题