大连创客空间

 找回密码
 立即注册吧!

QQ登录

只需一步,快速开始

一键登录:

搜索
查看: 5534|回复: 43
收起左侧

【大赛原创经验贴】正确理解PxIN输入寄存器,很重要~~~

  [复制链接]
发表于 2012-7-14 17:19:21 | 显示全部楼层 |阅读模式
购买主题 已有 8 人购买  本主题需向作者支付 5 九币 才能浏览
回复

使用道具 举报

发表于 2012-7-15 11:28:26 | 显示全部楼层
顶下
回复 支持 反对

使用道具 举报

发表于 2012-7-15 11:44:19 | 显示全部楼层
不错
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-15 18:07:51 | 显示全部楼层
都是我写一写小模块的时候出现的问题,出现问题就要搞清楚对吧,一起加油~~~
回复 支持 反对

使用道具 举报

发表于 2012-7-15 21:50:21 | 显示全部楼层
lz程序里面好像没有体现你上边说的:“解决的办法就是,加一个上拉或者下拉电阻,让这个寄存器在复位以后保持一个确定的数值(哼,我看你再变……)。这样一来,程序就不会出错咯。其实用中断的方式是一样的,因为输入寄存器的数值不确定,你输入电平的时候,你也不知道是上升沿还是下降沿对吧,所以PxIFG的置位就是乱七八糟的。”
还有能不能解释一下:“记住,把P1.0和P1.6的跳线帽拔下来哦~~~~”
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-15 23:00:55 | 显示全部楼层
程序上面是不能体现出来,但是你接电阻和不接电阻,效果就不一样了。我用的是msp430g2553的板子,就是那个小的,红色的lanuch pad,上面有跳线帽的,呵呵
回复 支持 反对

使用道具 举报

发表于 2012-7-16 18:39:26 | 显示全部楼层
不错 确实是个细节问题,  好像在进入main()函数时是给个初值应该也可以吧 省去硬件加上拉或下拉!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-16 20:17:26 | 显示全部楼层
PxIN是给不了初值的哦,我试过了,你也可以试试看。用PxREN都不行,达不到效果。所以,我只能从硬件下手了。估计是我们的用法有问题,TI这么大的厂家,不能做出漏洞对吧~
回复 支持 反对

使用道具 举报

发表于 2012-7-16 21:20:26 | 显示全部楼层
那P1REN是做什么的呢?
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-16 22:24:05 | 显示全部楼层
P1REN本来就是为了置位或者复位P1IN的,可是加进去以后没有效果
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-16 22:24:30 | 显示全部楼层
估计是我们的用法不对,知道的说下,谢谢了
回复 支持 反对

使用道具 举报

发表于 2012-7-17 00:11:37 | 显示全部楼层
回复 支持 反对

使用道具 举报

发表于 2012-7-17 02:28:51 | 显示全部楼层
123 发表于 2012-7-17 00:11
P1REN是电阻使能吧,P1OUT  选择上拉电阻

#include  <msp430g2553.h>
int i;
void main(void)
{
  WDTCTL = WDTPW + WDTHOLD;                 // Stop watchdog timer
  P1DIR |= 0x01;                            // Set P1.0 to output direction
  P1IE |= BIT3;                             // P1.4 interrupt enabled
  P1IES |= BIT3;                            // P1.4 Hi/lo edge
  P1REN |= BIT3;
  P1OUT |= BIT3;
  P1OUT &=~ BIT0;
  for (;;)
  {
    /* if(!(P1IN & BIT3))
    {
    P1OUT ^= BIT0;
    for (i = 0; i < 800; i++);
    } */
    if (P1IFG != 0)
    {
       P1OUT ^= BIT0;
       P1IFG = 0;
       for (i = 0; i < 800; i++);
    }
  }
}
回复 支持 反对

使用道具 举报

发表于 2012-7-17 02:31:46 | 显示全部楼层
我写的关于PxIN寄存器/* if(!(P1IN & BIT3))
     {
     P1OUT ^= BIT0;
     for (i = 0; i < 800; i++);
     } 和 if (P1IFG != 0)
     {
        P1OUT ^= BIT0;
        P1IFG = 0;
        for (i = 0; i < 800; i++);实现功能相同
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-17 08:43:43 | 显示全部楼层
静~~~ 发表于 2012-7-17 02:31
我写的关于PxIN寄存器/* if(!(P1IN & BIT3))
     {
     P1OUT ^= BIT0;

测试的对不?
回复 支持 反对

使用道具 举报

发表于 2012-7-18 15:52:18 | 显示全部楼层
可以用REN的吧。。。
回复 支持 反对

使用道具 举报

发表于 2012-7-18 23:17:17 | 显示全部楼层
很好学习!
回复 支持 反对

使用道具 举报

发表于 2012-7-19 08:28:43 | 显示全部楼层
本帖最后由 honghu 于 2015-4-5 09:17 编辑 <br /><br />很热闹啊 学习了~~

回复 支持 反对

使用道具 举报

发表于 2012-7-19 15:41:20 | 显示全部楼层
恩 楼主正解 我在调试的时候 也遇到了这个问题 我是用软件消除的

点评

嗯啊,注意到这点就好~~~嘿嘿  详情 回复 发表于 2012-7-19 15:58
回复 支持 反对

使用道具 举报

 楼主| 发表于 2012-7-19 15:58:38 | 显示全部楼层
低c灰太狼 发表于 2012-7-19 15:41
恩 楼主正解 我在调试的时候 也遇到了这个问题 我是用软件消除的

嗯啊,注意到这点就好~~~嘿嘿
回复 支持 反对

使用道具 举报

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

本版积分规则

单片机开发者1群:235808606;会员QQ 6群:254085994; 1群:12835691(满); 2群:121061287(满); 3群:237320668(满);4群:249652919(满);5群:253578883(满);大赛1群:187926790(满),2群:231577758(满),3群:249652919(满)。 TI杯4群:58129202(满)。
载入中

QQ|手机版|小黑屋|Archiver|大连创客空间 ( 辽ICP备15004617号-2  

GMT+8, 2017-3-1 00:45 , Processed in 0.238757 second(s), 32 queries .

地址:辽宁省大连市高新园区火炬路7号17层 QQ:2401085253

Copyright © 2010-2015 创客空间(大连)科技有限公司 All Rights Reserved.

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