论坛风格切换切换到宽版
  • 4365阅读
  • 10回复

如何让单片机获取低电平。 [复制链接]

上一主题 下一主题
离线bg4cdl
 
发帖
27
只看楼主 倒序阅读 0楼 发表于: 2010-03-26
我使用的是attiny13v的芯片,我设置pb4为输入并定义为高电平。
然后我判断它是否是低电平,能否直接将其与gnd短接就可以了?
如果我串联一个光敏二极管是否就可以达到光控目的了?
离线bg4cdl
发帖
27
只看该作者 1楼 发表于: 2010-03-26
谁来帮帮我?
离线BG4IGX
发帖
7470
只看该作者 2楼 发表于: 2010-03-26
要接上拉电阻。
离线BG5CEH
发帖
721
只看该作者 3楼 发表于: 2010-03-26
我使用的是attiny13v的芯片(我也在玩,哈哈),我设置pb4为输入并定义为高电平。
然后我判断它是否是低电平,能否直接将其与gnd短接就可以了? (是的,直接接地,就可以。)
如果我串联一个光敏二极管是否就可以达到光控目的了?(估计不行哦~)
离线BG7PMZ
发帖
3139
只看该作者 4楼 发表于: 2010-03-28
'
我使用的是attiny13v的芯片(我也在玩,哈哈),我设置pb4为输入并定义为高电平。
然后我判断它是否是低电平,能否直接将其与gnd短接就可以了? (是的,直接接地,就可以。)
如果我串联一个光敏二极管是否就可以达到光控目的了?(估计不行哦~)
'

我也在玩avr,樓主,你只要把ddrxn設置成0(輸入),portxn設置為1(使能內部上拉電阻),然后在外部io口直接對地接一個光敏電阻,就可以正常觸發,有光的時候,光敏電阻有足夠低的內助把內部上拉電阻拉低,pinn跳變成低電平,光敏二極管沒測試過不知可否直接使用
离线bg4cdl
发帖
27
只看该作者 5楼 发表于: 2010-03-29
'
我使用的是attiny13v的芯片(我也在玩,哈哈),我设置pb4为输入并定义为高电平。
然后我判断它是否是低电平,能否直接将其与gnd短接就可以了? (是的,直接接地,就可以。)
如果我串联一个光敏二极管是否就可以达到光控目的了?(估计不行哦~)
'

我试过直接接地,并没有能改变我的程序触发。
我是用bascom-avr的大家能帮我看看我的程序里面有什么错么?
$regfile = "attiny13.dat"
$crystal = 1000000                          
$noramclear
config watchdog = 2048
start watchdog
config portb.0 = output                      
config portb.4 = input
portb.4 = 1
  waitms 10
if portb.4 = 1 then
  portb.0 = 1
  waitms 180
  portb.0 = 0
else
  portb.0 = 1
  waitms 950
  portb.0 = 0
end if
powerdown
end

我想让portb.4和gnd短接后让portb.0输出后一种结果。可惜只有第一种结果奇怪来。
离线BG5CEH
发帖
721
只看该作者 6楼 发表于: 2010-03-29
#include <iot13v.h>
#define uint unsigned int
#define pbo0_0     portb&=~(1<<0);
#define pbo0_1     portb|=(1<<0);
#define pbo1_0     portb&=~(1<<1);
#define pbo1_1     portb|=(1<<1);
#define pbo2_0     portb&=~(1<<2);
#define pbo2_1     portb|=(1<<2);


void main()
{
     ddrb = 0b11100111;//设定pb0~2为输出,pb3~4为输入
     portb= 0xff;
     
     while(1)
     {
           if(!(pinb&(1<<4)))   //不加!高电平为真。pb4接地,pb0亮。
           {
                 pbo0_0;
                 pbo1_1;
                 pbo2_1;
                 delay(200);
           }
           

                else if(!(pinb&(1<<3)))   //pb3接地,pb1亮。
           {
                  pbo0_1;
                  pbo1_0;
                  pbo2_1;
                  delay(200);
           }
           


           else                   //没有健按下pb2亮。
           {
              pbo0_1;
                 pbo1_1;
                 pbo2_0;
           }
     }
}




void delay(uint ms) //延时子程序
{
  uint i,j;
     for(i=0;i<ms;i++)
          {
                for(j=0;j<1141;j++);
      }
}
离线BG5CEH
发帖
721
只看该作者 7楼 发表于: 2010-03-29
使用icc avr6.31 分别是pb3 pb4接地
我自己试验用的,可以
附件: 键盘2输入.rar (0 K) 下载次数:41
离线bg4cdl
发帖
27
只看该作者 8楼 发表于: 2010-03-30
我找到原因了,是我代码里面有点小问题。而且加上循环后,有明显差别了。
离线BD7RC
发帖
3283
只看该作者 9楼 发表于: 2010-04-05
嚯嚯,楼主也在用bascom-avr?代码里面,读取输入脚的值的那个if语句中,if portb.4 = 1 then ,应该用pind.4,否则得不得正常的逻辑值。
离线bg4cdl
发帖
27
只看该作者 10楼 发表于: 2010-04-06
'
嚯嚯,楼主也在用bascom-avr?代码里面,读取输入脚的值的那个if语句中,if portb.4 = 1 then ,应该用pind.4,否则得不得正常的逻辑值。
'

对了就错在这里了,后来发现问题了。呵呵呵