请教点51的基础知识啊
大家好啊,我以前都是干linux的,突然有个51的事情,想请假下基础知识。
1、写某个引脚,比如有这么一句话, PORT_A=1;这就给写高电平了是吗,但是这个高电平保持多久呢,还是一直保持直到有PORT_A=0;,如果我要产生一个方波是不是写:
for(int i=0;i<100;i++)
{
PORT_A=1;
delay(5);
PORT_A=0;
delay(5);
}
这样的代码就行了?
2、我在一些实例里看到P1M2和P1.2是啥意思啊,P1的第二个引脚(第二个bit)??
谢谢大家指点啊!!
[解决办法]
1.51中,可以单独使用一个端口,如P1,也可以使用其中一个引脚,如P1.4,但P1.4不能直接使用,需要sbit。如果是P1=1,则只是P1.0为高电平,且会一直持续。如果是PORT_A是某个引脚,则只是此引脚为高电平。
2.每一个端口的引脚号是从0开始,P1.0~P1.7.所以P1.2是第三个。
[解决办法]
P1M2寄存器在某些片子里是配合P1M1来进行IO口的功能设置,比如说是输入还是输出,要不要加上拉之类,默认的都是双向的,没特殊要求不需要修改
[解决办法]
P1M2 与 P1M1 有些芯片资料里写的是P1M1与P1M0,这是配置端口P1的工作模式用的特殊寄存器,有四种模式
准双向 可以读写, 读入的内容不一定等于刚写出的内容,因为电平状态可被外部拉高拉低
强推挽 可以读写, 但读入的内容一定等于刚写出的内容,不能被外部拉高拉低(外部若也有强拉会烧掉芯片)
高阻(只读) 只能读不能输出, 置高或置低都不会反应到外部,读取时总是外部电平状况
开漏 输出的只是较短的脉冲,电平状态不会持久保持, 保持的时间长短也是由外部电路而定的
老型号的芯片是没有多种模式设置的,详情要参考芯片资料,而C51与C还是有些差异的,要留意那个编译器,如 P1=1; 与 P1 = 0x01;可能是不同的,前者,只把P1最低引脚置1,其它7个引脚没动作
后者是把P1最低引脚置1,其它7个引脚清0,可能这只是uV4的问题,我从微机C/C++编程转到单片机C51编程,早先被这类问题烦得要死,后来不得不写完编译了再对比一下汇编代码,有时会发现被编译器“优化”得不再是自己的逻辑,可能完全变了样,uV3好像没有这个问题,当然你可能根本不用uV编译器