首页 | 新闻 | 新品 | 文库 | 方案 | 视频 | 下载 | 商城 | 开发板 | 数据中心 | 座谈新版 | 培训 | 工具 | 博客 | 论坛 | 百科 | GEC | 活动 | 主题月 | 电子展
返回列表 回复 发帖

如何对I/O口进行位操作

如何对I/O口进行位操作

我想用MC9S12DG128B的PORTH或PORTS作为普通的I/O使用,应该怎么初始化?
如何对I/O进行位操作?在这个上面看过用PORTB_BIT0来对PORTB进行位操作的,但是对于PORTS或PORTH就不行?
可能对PORTS和PORTH的定义格式稍有不停。你看一下头文件中的定义即可。
海纳百川  有容乃大
你试试PTH_BIT0
找到了,是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 */
}
在头文件里说,PORTH是可以用做普通,I/O口的,为什么在使用的过程中,一点反应都没有,还有我再显示时钟的时候,用主循环显示与定时中断刷新的结果为什么不一样?
奇怪中~~~
PORTH是可以作为普通IO口使用的。你仔细检查一下端口的配置。用万用表量一下口线的电平变化是否正确,再单步调试一下数据是否读入正常。
海纳百川  有容乃大
我现在改用常用的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;
}
}
}
}

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

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

当DDRB中相应的位为1是,端口为输出,0才是输入。当端口为输出时,读出的是数据寄存器的值,而不是端口上的实际电平。你这样输出高电平,而端口又外部接低,很可能损坏端口和芯片的。
海纳百川  有容乃大
我尝试了很多方法,都不行~
怎么初始化,才能检测到外部按键?
设置成输入并上拉(内部或外部上拉)。
海纳百川  有容乃大
多谢版主~~
返回列表