如何给单片机IO口输入高电平

我的想法是,单片机检测到外部有一个高电平输入时,就输出一些端口控制外围继电器,定义不同的脚位来检测外部输入的高电平,还有就是只需要在有这些外部高电平输入时,才做相应的动作(相应的端口输出),否则就一直检测这些输入点口。

#include<reg52.h> //包含头文件,一般情况不需要改动,头文件包含特殊功能寄存器的定义

sbit countsingle=P1^0; //定义计数信号输入
sbit relay1=P1^1; //定义继电器1位置
sbit relay2=P1^2; //定义继电器2位置
sbit relay3=P1^3; //定义继电器3位置
sbit relay4=P1^4; //定义继电器4位置

sbit passsingle=P1^5; //定义pass信号输入
sbit testsingle=P1^6; //定义再次测试信号

/******************************************************************/
/* 延时函数 */
/******************************************************************/
void delay(unsigned int cnt)
{
while(--cnt);
}
/******************************************************************/
/* 主函数 */
/******************************************************************/
main()
{
while(1)
{
if(countsingle=1) //当计数输入为高电平时
{
relay1=1; //产生信号让继电器1吸合
relay3=1; //产生信号让继电器3吸合
relay4=1; //产生信号让继电器4吸合
delay(5000);
}

{
if(passsingle=1) //High Voltage pass信号为高电平时
{
relay2=1; //产生信号让继电器2吸合
relay3=0; //产生信号让继电器3释放
relay4=0; //产生信号让继电器4释放
delay(5000);
testsingle=1; //产生信号让外部继电器导通再次给出测试信号
}
}

}
}
比如说以上的程序: 先定义了不同的脚位,然后是在检测到countsingle脚位输入为高电平是,做下面的动作。
还有就是我在外部输入高电平时,就直接用的+5V电源端去触发,为什么不行呢单片机根本没反应?要怎样才能输入高电平呢?
谢谢 ,
我用的是AT89S52单片机

if(countsingle=1) //错
if(countsingle==1) //应该是“双等号”。
后面还有一个错的地方。
----------------------------------
试试下面这个:
main()
{
while(1) {
if(countsingle == 1) { //当计数输入为高电平时
relay1 = 1; //产生信号让继电器1吸合
relay3 = 1; //产生信号让继电器3吸合
relay4 = 1; //产生信号让继电器4吸合
delay(5000);
}
if(passsingle == 1) { //High Voltage pass信号为高电平时
relay2 = 1; //产生信号让继电器2吸合
relay3 = 0; //产生信号让继电器3释放
relay4 = 0; //产生信号让继电器4释放
delay(5000);
testsingle = 1; //产生信号让外部继电器导通再次给出测试信号
}
}
}
温馨提示:内容为网友见解,仅供参考
第1个回答  2015-11-14
方法:
1.p1口做输入输出口前要先写值,1为输入,0为输出,且要接上拉电阻,不如换到其他口。
2.if(countsingle=1)改为if(countsingle==1) 。
3.最好先读取端口值再判断。
第2个回答  2010-06-19
4点建议
1.p1口做输入输出口前要先写值,1为输入,0为输出,且要接上拉电阻,不如换到其他口
2.if(countsingle=1)改为if(countsingle==1)
3.最好先读取端口值再判断
4. 一楼说的用中断也不错本回答被提问者采纳
第3个回答  2010-06-12
你直接荣 for 就可以了 别问我具体的很久不写了

例如检测P1^1 高电平 首先定义 P1^1 = 0 for(P1^1=1;其他的动作=1)这样循环就可以了
第4个回答  2010-06-12
你直接5V进去难道不怕烧了端口啊,多大的电流啊!
你要是用这种查询电平方式就在端口上接个电阻上拉5V好了,控制电流在你的单片机管教可承受的范围内

如何给单片机IO口输入高电平
if(countsingle=1) \/\/错 if(countsingle==1) \/\/应该是“双等号”。后面还有一个错的地方。--- 试试下面这个:main(){ while(1) { if(countsingle == 1) { \/\/当计数输入为高电平时 relay1 = 1; \/\/产生信号让继电器1吸合 relay3 = 1; \/\/产生信号让继电器3吸合 relay...

怎么用汇编语言在单片机一个I\/O输出高电平和低电平
看是什么单片机,不同的单片机汇编语言也是不同,拿51单片机来说,如果只是一个I\/O口,用SETB实现输出高电平,用CLR实现输出低电平,比如P1口,就是SETB P1.0,CLR P1.0以此类推P1.1,P1.2直到P1.7,注意如果使用P0口需接上拉电阻

51单片机引脚检测高电平输入的问题
在网上看到这样的一句话 “51单片机的I\/O 口检测高低电平是需要首先让该端口置为1的。此时这个引脚才被设置为输入”,--正确。也就是说如果上面的设计可以做到的话,那么就需要一开始的时候给高电平吗?--必须先给端口置一。--你的电路,是做不到的。--你的电路,按键、不按键,送到引脚...

单片机IO口输入电平问题
第一点,按键不要和数码管使用同一个I\/O脚,互相影响。按键要单独用一个I\/O脚。第二点,非要这么做(因I\/O脚不够用),关键问题是那个按键接在什么位置了,如下图的接法才行。如果是接在LED和电阻之间了就是你这种结果。第三点,把那个电阻的阻值加大为300~500殴。

51单片机:加了下拉电阻后默电是低电位,那如何再让这个IO口变高呢?
当输出高电平时,忽略管子的漏电流,两输入口需uA uA x15K=3即上拉电阻压降为3,输出口可达到2,此阻值为最大阻值,再大就拉不到2了。选10K可用。COMS门的可参考74HC系列 设计时管子的漏电流不可忽略,IO口实际电流在不同电平下也是不同的,上述仅仅是原理,一句话概括为:输出高电平时要喂饱...

52单片机io口可以通过赋值语句将低电平变成高电平吗
52单片机可以通过赋值将低电平变成高电平,但是这只限于io口仅作为输出(即将值写入io口)的状态下。当io口用于输入(即要读该口的值)时,一般也要先将该端口值赋1,此时才能接受低电平的输入,这时若外部电路拉低,该io口将输入低电平,不拉低则视为输入高电平。键盘检测就是利用这一原理,先将该...

单片机是如何控制IO口输出高低电平的 不要告诉我试靠程序 我要的是原理...
单片机控制端输出相应值,IO输出端输出相应值 简单的反相器示意图

给单片机输入电平信号怎么做
如果是0 和 1 的电平输入的话,一般会先将红外信号的输出通过一个 HC7414 滞回比较器,接到单片机。因为,红外的信号有可能处在非0 非1 的中间电压,如果不接一个滞回较器,单片机将无法识别其是0是1, 更重要的是,这时候可能会引起0和1来回无序跳变。当然,如果在程序里以这种非0非1的状态...

怎样设置单片机一开机时端口高低电平
绝大多数单片机在上电时端口自然全复位到高电平的。你如需低电平就要在初始化中先置一下。

单片机控制IO口输出高低电平的原理是什么?
\/\/P1口全部为高电平,对应的LED灯全灭掉,ff\\x0d\\x0a换算成二进制是 1111 1111\\x0d\\x0aP1 = 0xfe; \/\/P1口的最低位点亮,可以更改数值是其他的\\x0d\\x0a灯点亮\\x0d\\x0a\/\/0xfe是16进制,0x开头表示16进制数,fe换\\x0d\\x0a算成二进制是 1111 1110\\x0d\\x0awhile (1) \/\/主...

相似回答