打印

求助,,,仿照stm32写的51程序

[复制链接]
1419|6
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
qczzyjdxx|  楼主 | 2013-1-20 22:43 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
仿照stm32写的51程序,,,但是不能控制P0口,,,不知道原因,,是不是51不支持这种方式对寄存器操作,,
谁有这方面的经验,,,给讲一下,,,   谢谢了

#define P0   ((unsigned char) 0x80)    //映射P0的地址
typedef struct //定义一个结构体是表示io口
{
    volatile unsigned char IO0;
    // volatile unsigned char IO1;
    // volatile unsigned char IO2;
    // volatile unsigned char IO3;
} IOx;

#define p ((IOx*)P0) //宏定义p的地址是P0

void delay()
{
    int i;
    for(i=0;i<500;i++);
}
void main()
{
    IOx * xxx;//定义一个io口的指针
    xxx=p;//把io口的地址给io口的指针
    while(1)
    {
        xxx->IO0=0x00;
       delay();
        xxx->IO0=0xff;
        delay();
    }
}

相关帖子

沙发
ayb_ice| | 2013-1-21 08:01 | 只看该作者
差之毫厘,失之千里

51的SFR只支持直接寻址

使用特权

评论回复
板凳
gx_huang| | 2013-1-21 08:42 | 只看该作者
搞得我做了这么多年51的都看不懂!

使用特权

评论回复
地板
qingx| | 2013-1-21 08:46 | 只看该作者

使用特权

评论回复
5
nbsmaps| | 2013-1-21 09:32 | 只看该作者
51的C51编译器不支持这个语法啊,你用的是ARM的编译器了,反汇编看一下,根本不对的啊

使用特权

评论回复
6
lzqxs89| | 2013-1-21 09:40 | 只看该作者
ayb_ice 发表于 2013-1-21 08:01
差之毫厘,失之千里

51的SFR只支持直接寻址

这个应该是问题的本质所在。。

使用特权

评论回复
7
ayb_ice| | 2013-1-21 10:08 | 只看该作者
本帖最后由 ayb_ice 于 2013-1-21 10:10 编辑

通过指针操作是间接寻址,访问的是IDATA空间

其实通过明确的指针也可以访问SFR DATA空间,但编译器需要扩展一些关键字,定义指针时加上关键字说明一下,比如IAR就是那样做的,C51不行的,因为C51已经扩展了sfr关键字,专门用于定义SFR

使用特权

评论回复
评分
参与人数 1威望 +1 收起 理由
qczzyjdxx + 1 学习了
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

2

主题

7

帖子

0

粉丝