c语⾔单⽚机管脚定义,单⽚机-IO管脚
希望对初学者提供帮助,我采⽤的C语⾔。有⼈说C语⾔容易⽐较容易掌握,汇编⽐较难。这种说法其实只是针对初学者。对于希望提⾼或者达到⼀定⽔平来说其实都有⼀样。我有个同事使⽤C语⾔设计⼀个多任务切换的程序,发现很难完成。但是使⽤汇编编写程序的程序员就⽐较容易。因为他对内存结构、堆栈分配⾮常清楚所以就⽐较容易实现。特别是做精确延迟,汇编显得⾮常有优势。在有些项⽬中C与汇编要嵌套使⽤,这就对程序员的要求⾮常⾼。
我的意思是,如果您希望以后将编写嵌⼊式软件作为⼀个⼯作⼿段。如果您的同事中有位汇编⾼⼿,那您就做汇编吧。有位这是⼀个绝好的机会。有⼈⼀辈⼦也不会有!
但是C语⾔⽐较易学易⽤,我们就以C⼊门吧。
IO就输⼊/输出的意思。单⽚机通过IO管脚与外界其他电路通讯。AT89S52应该是标准单⽚机,具有P0-P4合计4组IO,每组IO有8个管脚。以后⼀些其他⼚家基本按照这个规范⽣产产品。我们随便⼀个C51的单⽚机看看。
这就⼀个标准的双列直插的单⽚机。我们稍微观察⼀下看到1-8是P0端⼝,10-17是P3管脚,
40-32是P0管脚,28-21是P2管脚。4组管脚都可以做为普通的IO使⽤,也就是输出⾼低电平。或者读取外界电平。 其中P3管脚可以作为其他第⼆功能使⽤。
C51的P1-P3 IO是准双向/弱上拉⼯作模式,这句我们来分析⼀下,“准双向”的意思他可以作为IO管脚使⽤。“准”的意思是不能同时作为输⼊、输出使⽤。“弱上拉”也就是说外部电路如果希望他置低,需要⽐较⼤的电流。我理解就是这样,具体⼤家再查查资料吧。
嵌入式系统是什么意思P0管脚是开漏输出的,只能输出低电平,如果需要输出⾼电平,需要在外部使⽤上拉。但是P0管脚具有强灌电流能⼒,也就是吸收电流的能⼒。
XTAL1、XTAL2是晶振管脚。按照以下搭建的电路可以使单⽚机⼯作起来。
在有些单⽚机EA必须接⾼电平,有些单⽚机已经内部做了上拉就不需要拉。C1、R1是为了在上电时
提供⼀个短时间的⾼电平。在系统上电瞬间C1是导通的,相当于导线,RST通过电阻接地。所以RST现在是⾼电平。随着 C1充电通过R1的电流越来越⼩。知道最后完全不导电。RST就成了低电平。系统就开始稳定了⼯作了。根据单⽚机复位需要的时间设计该电路。
C2、C1、R2 与晶振形成了竞争电路,⼀般情况下⼚家会提供这⼏个元器件的选择。所以在初期不必太关⼼,只需参考别⼈电路即可。
C5、C6是滤波电容。
如果C51已经烧写了程序, 按照上图搭建电路后系统即可⼯作,
这个电路就⽐较丰富了,如果按照以上硬件电路。我们可以通过P1⼝完成流⽔灯实验、定时器实验、串⼝实验。 因为LED实验很简单,参考的例⼦⾮常多。我们按照上图硬件今天随⼿写⼏个。
sbit LED0 = P1^0;
void main( )
{
P1 = 0xFF;
LED0 =0;
while(1)
{
}
}
以上代码编译、下载运⾏后P1^0控制的LED会亮。 我们逐⾏分析。
sbit LED0 = P1^0; 声明了LED0变量,LDE0是⼀个位。sbit并不是标准C语⾔的类型。只有在单⽚机编程时使⽤。main 是主函数,也就是程序的⼊⼝。PC指针初始化位置指向他。
P1 = 0XFF; P1的输出寄存器置1,也就是输出低电平。所有P1管脚LED熄灭。
while(1){ } 在单⽚机编程中⾮常常⽤。防⽌程序执⾏结束后,出现不可预知的结果。
void delay( )
{
unsigned int m,n;
for(m=0;m<500;m++)
for(n=0;n<500;n++);
}
void main( )
{
P1 = 0xFF;
LED0 =0;
while(1)
{
delay( ) ;
LED0 =0;
delay( ) ;
LED0 =1;
}
}
以上代码编译、下载运⾏后P1^0控制的LED会闪烁!
LED0=0;点亮P10管脚LED亮,LED0 =1;熄灭LED。
delay( )是我们编写的函数,其中
for(m=0;m<500;m++)
for(n=0;n<500;n++); 是⼀段延迟程序。如果没有该函数否则LED0是不会闪烁的。如果对C语⾔不了解,可以关注我的博客C语⾔部分。以后我们还会介绍!
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论