单片机给IO口赋值的原则是什么?

我是新手,关于IO口赋值,单片机给IO口赋值的原则是什么?通常我们定义某IO口为0或1,或者定义P1(或者P2,P3)=0xfe,(0xfd,0xfc,等等),这种情况下我们都是要么给这个IO口一个高电平要么给一个低电平,即0或1;

我们还可以赋别的值给某个IO口吗?

下面的这个程序里赋值的原理是什么?定义i为无符号字符型(0-255),那么我们给的是高电平还是低电平,这里面的道理是什么?请教高手多多指点!!!谢谢!!!

#include <reg52.h>
void delay(void)
{
unsigned int i;
for(i=0;i<20000;i++);
}
void main(void)
{
unsigned char i;
for(i=0;i<255;i++)
{
P0=i;
delay();
}
}
小弟刚学单片机,一直对这个没搞明白,如这个主函数里for(i=0;i<255;i++),i<255,i++,自加1,那i的值不是在0-255之间吗,而IO口只能给赋值0或1,那i在0-255之间(除0和1之外)时有什么含义?小弟以前是学文科的,对中间的道理不是很明白;它和前面定义i=0又有什么联系?

这个流水灯的程序是怎么实现流水变化的??P0口=i=0,就是P0口对应的8个LED都是低电平,都是亮的,它又是如何实现流水变化的?实验测试过程序没有问题,只是对其中的道理没有搞明白,希望高手指点一下,不胜感激!!

你看哈,i=0时,化为二进制为00000000所以对应的彩灯都为低,都亮,为1的时候二进制为00000001,最后一位为1,所以对应的灯不亮,其余亮,为2的时候二进制为00000010,倒数第二位为1,对应的灯不亮,其余亮~~~~~i为254时二进制为11111110,只有最后一位为0所以只有一个灯亮,255时二进制11111111都为高电平1,灯都不亮!这样循环的时候就形成流水灯了,另外跟你说一下,灯的一端是固定接了高电平的,所以我们需要在另外一端通过程序控制为低电平才能是灯导通,发光,这里就是用P0口控制
你说的IO口只能0或1是指IO口的某一位,如p0.0,p0.1-------p0.7每个p口有8位
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-12
IO口只能是给0或1,给不了其它的东东,也没办法给。对一个IO口赋什么值就要看你要对这个口做什么。程序开始阶段要对IO口初始化,譬如首先是不能点亮某口的LED,或者不能驱动某口的继电器,或者不驱动某口的可控硅等等。在程序运行达到某个条件,如某键被按下,某负载工作了,某条件满足了等再去改变某IO口的状态。这是你的程序流程决定了的。追问

小弟刚学单片机,一直对这个没搞明白,如这个主函数里for(i=0;i<255;i++),i<255,i++,自加1,那i的值不是在0-255之间吗,而IO口只能给赋值0或1,那i在0-255之间(除0和1之外)时有什么含义?小弟以前是学文科的,对中间的道理不是很明白;它和前面定义i=0又有什么联系?

追答

我不懂C。对汇编只限听说过。对一个RAM单元自加1,譬如说开了计时器,每一秒该单元自动加1,就是计时了,你想计时达30秒时去干什么事情,不断的查这个单元是否到了30就行了。举例,到30秒后关闭P0.1口外接的继电器,点亮P0.2口的LED灯。你软件这样写就可以了。

本回答被网友采纳
第2个回答  2013-04-12
I/O口只能是零和一。但是数据表达不一定要是二进制并且I/O口工作不一定一起同时工作。。。。赋值好像没什么要求但是引脚(电路)有要求。。。
第3个回答  2013-04-12
P0的意思是P00~P07 i的范围是0~255 相应你转换成二进制数就是0 ~11111111, 当i=0时,P0口的状态为00000000
相似回答