【一】单片机引脚介绍
1.电源引脚
●VSS:接地。
●VCC:外接5V电源。
2.外接晶振引脚
●XTAL1:当单片机使用内部振荡电路时,接外部晶体的一端和微调电容。当单片机采用外部时钟信号时,此引脚接地。
●XTAL2:当单片机使用内部振荡电路时,接外部晶体的一端和微调电容。当单片机采用外部时钟信号时,用来输入时钟脉冲。
3.控制引脚
●RST/VPD:复位信号输入端,高电平有效。当此引脚保持两个机器周期的高电平时,进行复位操作。该引脚的第二功能是备用电源。
●ALE/PROG:地址锁存允许信号端。当MCS-51单片机上电后,ALE引脚不断向外输出振荡器频率fosc 1/6的正脉冲信号。此引脚具有第二功能PROG,其作为对带有片内可编程ROM单片机进行固化程序写入操作时的编程脉冲输入端。
●EA/VPP:外部程序存储器地址允许输入端。当EA引脚接高电平时,CPU先访问片内程序存储器并执行其中的指令,然后再访问外部程序存储器。当EA引脚接低电平时,CPU只访问外部程序存储器并执行其中的指令,此时并不管该单片机是否具有片内程序存储器。该引脚的第二功能是作为对 EPROM 型单片机进行编程时的编程电源。
●PSEN:程序存储允许输出信号端。在访问片外程序存储器时,该引脚输出负脉冲作为读片外存储器的选通信号。在CPU从外部程序存储器取指令期间,PSEN信号在每个机器周期中两次有效。
4.输入/输出引脚
●P0口:8位漏极开路型双向I/O口,能驱动8个LS TTL负载。当访问外部存储器时,分时传送低字节和数据。
●P1口:带有内部上拉电阻的8位准双向I/O口,能驱动4个LS TTL负载。
●P2口:带有内部上拉电阻的8位准双向I/O口,能驱动4个LS TTL负载。当访问外部存储器时,输出高8位地址。
●P3口:带有内部上拉电阻的8位准双向I/O口,能驱动4个LS TTL负载。此外还具有第二功能,见表2.5。
【2】C51的程序结构
C51的程序也是由各个函数组成的。其中最重要的是main()函数,它也是必须存在的一个函数。作为程序的入口,程序每次执行均从main()函数开始,每次调用完其他函数后都将返回到main()函数,而当执行完main()函数中的所有代码后,结束整个程序。整个过程并不关心函数的排列顺序。
一个函数一般由两部分组成:函数说明部分和函数体部分。
函数说明部分包括函数名、函数类型、函数属性、函数参数。函数名后紧跟一个圆括号(),函数参数列于其中。一个函数也可以没有参数。
在函数说明部分后边紧跟的就是函数体部分。函数体的全部内容在一个大括号 {} 中,其中还包括变量说明和执行代码,函数运行时依次执行其中的代码。
一个标准的C51函数的格式如下所示。
函数类型 函数名(函数参数表)
{
变量说明部分;
执行代码部分;
}
下面是一个C51函数的实际例子,该函数的功能为完成一次加法运算。
int fun plus(int A,int B)
{
int result;
result=A+B;
return(result);
}
对于用户来说,C51函数可以使用标准库函数,或者自定义函数。
标准库函数在C51库文件中已经定义好,并在相关的头文件中也已加以说明,用户只需要直接调用即可。
自定义函数是用户根据自己的需要自己定义并调用的一类函数。
下边是一个完整的C51程序结构例子。
# include <reg52.h> //包含头文件
void main(void) //主函数部分
{
sbit P1.0=P1^0; //P1端口位定义
sbit P1.1=P1^1;
P1.0=1; //给位定义的变量赋初值
P1.1=1;
delay(); //调用延时子程序
while(1) //P1.0、P1.1交替赋值,实现LED交替闪烁的效果
{
P1.0=0;
P1.1=1;
delay();
P1.0=1;
P1.1=0;
delay();
}
}
void delay(void) //延时子程序部分
{
uint i;
for(i=0;i <256;i++);
}
对于用户来说,只需要将两个LED的正极接高电平,串联一个电阻后分别连接到MCS-51单片机的P1^0和P1^1引脚,利用上述代码即可实现LED交替闪烁的效果。
这是个很小的成功的C51程序,可以看到,它清楚地包括头文件和程序主题。头文件中包含了硬件信息,并给外部模块提供可使用的函数和变量说明。程序代码中sbit P1.0=P1^0的P1^0便是在头文件reg52.h定义的。该程序函数包括main()函数和自定义子函数delay()。在main()函数运行过程中曾多次调用子函数实现延时功能,这样,LED的闪烁不至于快到人肉眼无法分辨的程度。
该程序对应的单片机电路如图4.1所示。
利用Keil来进行MCS-51单片机C51程序的开发,通常使用项目来进行管理。
项目一般分为两大块:C文件块和头部文件块。将不同功能写在不同的C文件中,依靠项目的管理,最后将所有文件连接,从而得到可以刻录的HEX文件或BIN文件。在所有这些C文件中,有且只有一个main()函数,头文件将各个C文件互相连接。
图4.1 LED交替闪烁单片机电路图