这些小活动你都参加了吗?快来围观一下吧!>>
电子产品世界 » 论坛首页 » 嵌入式开发 » MCU » 请教:寄存器操作问题

共7条 1/1 1 跳转至

请教:寄存器操作问题

菜鸟
2008-07-24 11:12:57     打赏

我在HEW中写了一个简单的控制IO口输出高低电平的试验,在调试的时候,发现变量可以正常变化,寄存器却一直未变。大家帮忙看看哪出问题了,先谢过了!

硬件环境:  CPU:H8S2166  仿真器:E10A

新建工程的时候选择“Application”,配置选项如下:
CPU family:H8S,H8/300,Tool chain:Hitachi H8S,H8/300 Standard;
Toolchain version:6.1.3.0,CPU Series:2000,CPU Type:2168F;
Targets:H8S/2168F E10A-USB SYSTEM(CPU 2000);
其他的都是默认设置。

代码:
#define P2DDR   (*(volatile unsigned long *)0xFFB1)  /* P2DDR Address*/
#define P2DR     (*(volatile unsigned long *)0xFFB3)  /* P2DR Address*/
void main(void)
{
 int i = 0;
 
 P2DDR = 0x08;
 while(1)
 {
         P2DR = 0x00;
         i++;
        if(i>100)
        {
             i = 0;
             P2DR = 0x08;
        }
 }
}
我按照仿真器用户手册上的说明,连接仿真器后,Download .abs文件之后,就可以单步执行程序了。在执行过程中发现:变量i的值可以正确地变化,而寄存器的值却一直未变,板子上也没有什么反应。
是不是对寄存器还需要什么初始化操作,或者HEW还需要注意哪些设置?




关键词: 请教     寄存器     操作     问题    

菜鸟
2008-07-24 11:53:27     打赏
2楼

 有2个错误:
1     H8S2166的P2口是个8位口,所以在定义时只能用*(unsigned char *),而不是*(unsigned long*)。否则当你操作时,会影响到别的SFR。
2     使用P2口作为输出口时,还有2个条件,一个是MCU的运行模式:扩展模式还是单芯片模式。我估计你使用的是单芯片模式。如果在单芯片模式下,如果想P2输出,还要设定PWOERB寄存器。这个寄存器默认值为0(输入),必须设定为10。


菜鸟
2008-07-24 14:59:30     打赏
3楼

多谢了,马上试试看!


菜鸟
2008-07-24 15:16:25     打赏
4楼
我按照你说的办法试了试,发现在运行过程中,PWOERB的值可以改变为10,但是P2DDR和P2DR的值还是一直不变。是不是对端口操作前还得配置其它的寄存器?

菜鸟
2008-07-27 21:27:29     打赏
5楼
哪位xdjm给指点一下?

菜鸟
2008-07-28 10:22:53     打赏
6楼
 去问了一下用过的同事,他们是这样回答的,请参考。

I/O寄存器的地址这样定义:

#define P2DDR   (*(volatile unsigned long *)0xFFB1)  /* P2DDR Address*/

#define P2DR     (*(volatile unsigned long *)0xFFB3)  /* P2DR Address*/

是不对的,应该是:

#define P2DDR   (*(volatile unsigned char *)0xFFFFB1)  /* P2DDR Address*/

#define P2DR     (*(volatile unsigned char *)0xFFFFB3)  /* P2DR Address*/


菜鸟
2008-07-28 15:37:41     打赏
7楼
多谢ammiezhang的帮助,我试过了,确实如你所说。现在寄存器可以正确变化了。不过现在还有其它的问题需要解决,不知能否给我 你同事的QQ之类的联系方式?不胜感激!
我的QQ:403173765

共7条 1/1 1 跳转至

回复

匿名不能发帖!请先 [ 登陆 注册 ]