硬汉嵌入式论坛

 找回密码
 立即注册
查看: 3414|回复: 9
收起左侧

关于寄存器开发的问题

[复制链接]

15

主题

38

回帖

83

积分

初级会员

积分
83
发表于 2017-5-12 09:14:32 | 显示全部楼层 |阅读模式
stm32直接操作寄存器的方法,在51单片机不适用是吗。如下所示:
stm32下:
#define GPIOA_BSRRL *(__IO uint16_t *) 0x40020018
此时可直接对使用, GPIOA_BSRRL=0;
原理就是使用指定的寄存器的赋值的方法。

51下:

#define P_1  *(  unsigned char *) 0x97
此时做 P_1=0;
但是貌似不行,调试如下图:


所以,51上跟STM32上两种方法不适用???
回复

使用道具 举报

15

主题

38

回帖

83

积分

初级会员

积分
83
 楼主| 发表于 2017-5-12 09:15:17 | 显示全部楼层
51调试图,汇编貌似正确
1.jpg
回复

使用道具 举报

15

主题

38

回帖

83

积分

初级会员

积分
83
 楼主| 发表于 2017-5-12 09:17:24 | 显示全部楼层

回 刘志伟 的帖子

刘志伟:51调试图,汇编貌似正确 (2017-05-12 09:15) 
现象确实错误的。没有反应。
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2017-5-12 10:00:11 | 显示全部楼层
0x97确定是地址吗:

我知记得51里面是这么定义的,确切的说,51的那个C叫C51,不是标准C。具体还需要你翻看help文档看看

sfr ACC    = 0xE0;//累加器A  (可位寻址)
sfr B      = 0xF0;//寄存器B  (可位寻址)
sfr DPL    = 0x82;//数据指针低位 (不可位寻址)
sfr DPH    = 0x83;//数据指针高位 (不可位寻址)
sfr SP     = 0x81;//堆栈指针 (不可位寻址)
sfr SBUF   = 0x99;//串行数据缓冲器 (不可位寻址)
sfr TL0    = 0x8A;//T0低字节 (不可位寻址)
sfr TL1    = 0x8B;//T1低字节 (不可位寻址)
sfr TH0    = 0x8C;//T0高字节 (不可位寻址)
sfr TH1    = 0x8D;//T1高字节 (不可位寻址)
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2017-5-12 10:00:48 | 显示全部楼层
//  Ports
sfr P0     = 0x80;//端口0(可位寻址)
sfr P1     = 0x90;//端口1(可位寻址)
sfr P2     = 0xA0;//端口2(可位寻址)
sfr P3     = 0xB0;//端口3(可位寻址)
回复

使用道具 举报

15

主题

38

回帖

83

积分

初级会员

积分
83
 楼主| 发表于 2017-5-12 10:40:52 | 显示全部楼层

回 eric2013 的帖子

eric2013:// &#160orts
sfr P0     = 0x80;//端口0(可位寻址)
sfr P1     = 0x90;//端口1(可位寻址)
sfr P2     = 0xA0;//端口2(可位寻址)
sfr P3     = 0xB0;//端口3(可位寻址) (2017-05-12 10:00) 
没错啊。它用的sfr这种类型,但是,如果我不用sfr来定义,用上面说到的方法,按道理来说应该也可以吧?不是吗?
回复

使用道具 举报

1万

主题

7万

回帖

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
115694
QQ
发表于 2017-5-12 10:50:10 | 显示全部楼层

回 刘志伟 的帖子

刘志伟:没错啊。它用的sfr这种类型,但是,如果我不用sfr来定义,用上面说到的方法,按道理来说应该也可以吧?不是吗? (2017-05-12 10:40) 
端口地址对吗,0x97?,我上面贴的是STC,你这个难道是定义的P1_7?
另外查下Help文档,看看这个sfr还有什么特殊作用,能够在反汇编的时候生成其它的东西。

ps:这个51已经好多年不搞了,仅限于跟你讨论。
回复

使用道具 举报

15

主题

38

回帖

83

积分

初级会员

积分
83
 楼主| 发表于 2017-5-12 10:51:16 | 显示全部楼层

回 eric2013 的帖子

eric2013:0x97确定是地址吗:

我知记得51里面是这么定义的,确切的说,51的那个C叫C51,不是标准C。具体还需要你翻看help文档看看

sfr ACC    = 0xE0;//累加器A  (可位寻址)
....... (2017-05-12 10:00) 
是地址啊,汇编这样操作的话是正常的,但是在C下就不可以了,难道是内核问题?只能这么安慰自己了。
回复

使用道具 举报

15

主题

38

回帖

83

积分

初级会员

积分
83
 楼主| 发表于 2017-5-12 11:13:04 | 显示全部楼层

回 eric2013 的帖子

eric2013:端口地址对吗,0x97?,我上面贴的是STC,你这个难道是定义的P1_7?
另外查下Help文档,看看这个sfr还有什么特殊作用,能够在反汇编的时候生成其它的东西。

ps:这个51已经好多年不搞了,仅限于跟你讨论。 (2017-05-12 10:50) 
恩。我也只是讨论,只是无聊,找回很久以前遇到过的问题,然后来探讨一下。
回复

使用道具 举报

0

主题

29

回帖

29

积分

新手上路

积分
29
发表于 2017-6-2 08:31:40 | 显示全部楼层
貌似是不行[s:152]
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|小黑屋|Archiver|手机版|硬汉嵌入式论坛

GMT+8, 2025-5-13 03:23 , Processed in 0.445147 second(s), 27 queries .

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2023, Tencent Cloud.

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