程序代码编写:
在单片机中有几条很特殊的程序语法以及keil软件的基本操作步骤:
sfr P0= 0X80;
其中,sfr是关键字,是51单片机独有的,他的作用是定义一个单片机特殊功能寄存器。51单片机内部中有许多寄存器,如果想使用的话,必须先进行sfr声明。
不过在keil软件中,已经把所有这些声明都预先写好了并保存在一个专门的文件中,要使用时只需在文件开头添加一条
#include <reg52.h>;
与#include <reg51.h>大体相同,只是在使用时对位的定义不一样,reg51.h文件中对P1.1的操作是写成P1_1;reg52.h文件中的操作则写成P1^1。表示方法不一样而已。
另外前者是特指ATMEL公司的52系列单片机,后者指所有52系列的单片机。
第二条语句是:
sbit LED =P0^0;
sbit就是对sfr中的8个开关其中一个进行定义。经过上边的语句后,以后只要在程序中,写LED,就代表了P0^0口。也就是说给了P0^0一个更形象的名字叫做LED;
下面我们来了解一下单片机的特殊功能寄存器:
在使用单片机中某一个寄存器之前,必须对这个寄存器的地址进行说明。每个型号的单片机都会配有生产厂家所编写的数据手册。下面我们以一个截取的手册表格为例:
看P0,P1,P2,P3,这四个,每个P口本身又有8个控制端口,其中P0口所在地址,是0X80,一共有从7到0这8个IO口控制位,后面有个Reset Value(复位值)。其8个复位值都是1,这也就是说,每次单片机上电复位的时候,所有的引脚是值都默认是1。即高电平。在设计电路时也需考虑到。
LED闪烁程序:
预想对LED灯进行开关开关;实现代码:
#include <REG52.H>
#include <INTRINS.H>
void main()
{
unsigned int i =0;
while (1)
{
P0=0xFE;
P0=0XFF;
}
}
下载程序后发现,LED并没有呈现闪烁效果,这是因为单片机运行频率很快,所以这样高频率的变化,我们肉眼并不能发现。
于是我们对程序进行一个延时处理。
#include <REG52.H>
#include <INTRINS.H>
void main()
{
unsigned int i =0;
while (1)
{
P0=0xFE;
for(i=0;i<30000;i++);
P0=0XFF;
for(i=0;i<30000;i++);
}
}
利用for语句实现一个延时的效果,以此到达我们预期效果;