Board logo

标题: 如何对I/O口进行位操作 [打印本页]

作者: auto_hj    时间: 2007-4-17 12:24     标题: 如何对I/O口进行位操作

我想用MC9S12DG128B的PORTH或PORTS作为普通的I/O使用,应该怎么初始化?
如何对I/O进行位操作?在这个上面看过用PORTB_BIT0来对PORTB进行位操作的,但是对于PORTS或PORTH就不行?
作者: strongchen    时间: 2007-4-17 13:35

可能对PORTS和PORTH的定义格式稍有不停。你看一下头文件中的定义即可。
作者: redfox301    时间: 2007-4-17 18:56

你试试PTH_BIT0
作者: auto_hj    时间: 2007-4-17 22:38

找到了,是PTH_PTH0!
但是我在上面接了一个按键,想通过下面的程序来检测按键是否按下的时候,却什么反应都没有?什么原因?搞两个晚上了,还是没有结果,帮帮忙解释一下,谢谢版主!
void main(void)
{
/* put your own code here */
minitue=0;
CRG_Init();
PORT_Init();
ECT_Init();
EnableInterrupts;

for(;;)
{
if(PTH_PTH0==0)
{
delay10ms();
if (PTH_PTH0==0)
{
minitue=minitue+1;
dispbuf[4]=minitue%10;
dispbuf[3]=minitue/10;
if (minitue==60)
{
hour++;
if (hour==24)
{
hour=0;
}
}
}
}

} /* wait forever */
/* please make sure that you never leave this function */
}

作者: auto_hj    时间: 2007-4-17 22:41

在头文件里说,PORTH是可以用做普通,I/O口的,为什么在使用的过程中,一点反应都没有,还有我再显示时钟的时候,用主循环显示与定时中断刷新的结果为什么不一样?
奇怪中~~~
作者: strongchen    时间: 2007-4-18 10:02

PORTH是可以作为普通IO口使用的。你仔细检查一下端口的配置。用万用表量一下口线的电平变化是否正确,再单步调试一下数据是否读入正常。
作者: auto_hj    时间: 2007-4-18 10:55

我现在改用常用的PORTB做I/O口,接了一个按键接在PORTB_BIT0上面,当按下时,输出电平为0,说明电平这一块是没有问题的!
当初始化如下时,主循环能够检测到低电平:
PORTB=0XFE;
DDRB=0XFF;
当初始化为:
PORTB=0XFF;
DDRB=0XFF;
时,用按键把PORTB_BIT0的电平拉低的时候就检测不到了,显示不发生任何改变!
我在想用外部电路拉低的时候,PORTB_BIT0的读数仍然为高电平?不然就不会出现上面的情况了~~
检测按键是否按下的程序如下:
while(1)
{
if(PORTB_BIT0==0)
{
delay10ms();
if (PORTB_BIT0==0)
{
minitue=minitue+1;
dispbuf[0]=minitue%10;
dispbuf[1]=minitue/10;
if (minitue==60)
{
minitue=0;
hour++;
dispbuf[3]=hour%10;
dispbuf[4]=hour/10;
if (hour==24)
{
hour=0;
}
}
}
}

}

作者: auto_hj    时间: 2007-4-18 11:07

读取的PORTB的值是否与DDRB有什么联系?
该怎么处理?谁有做过这方面的事情,麻烦帮忙解决一下~~,先谢了 ~

[此贴子已经被作者于2007-4-18 11:07:45编辑过]


作者: strongchen    时间: 2007-4-18 11:27

当DDRB中相应的位为1是,端口为输出,0才是输入。当端口为输出时,读出的是数据寄存器的值,而不是端口上的实际电平。你这样输出高电平,而端口又外部接低,很可能损坏端口和芯片的。
作者: auto_hj    时间: 2007-4-18 12:51

我尝试了很多方法,都不行~
怎么初始化,才能检测到外部按键?
作者: strongchen    时间: 2007-4-18 13:12

设置成输入并上拉(内部或外部上拉)。
作者: auto_hj    时间: 2007-4-18 19:44

多谢版主~~




欢迎光临 电子技术论坛_中国专业的电子工程师学习交流社区-中电网技术论坛 (http://bbs.eccn.com/) Powered by Discuz! 7.0.0