微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 嵌入式设计 > 51单片机程序开发入门知识

51单片机程序开发入门知识

时间:11-20 来源:互联网 点击:

我们的前期步骤就作完了

现在我们开始说说程序部分,在下位机的开发当中,我们使用的是C语言(不是C++,没有类的概念),我们可用的资源也很少,除了基本的C语言语句以外,还可以使用的东西并不多,全部可用的东西全在Keil安装目录的 /C51/INC 里。

我这里面多了一个 STC12C5A60S2.H 文件,这时STC官网上提供的管脚和寄存器地址定义文件,通常我们只需要引用 REG52.H 就可以了。在C语言开发中,用 #Include 就是引用这些头文件,第一步,我们先引用MCU管脚定义文件REG52.H,然后再写上基本的程序入口函数Main,因为单片机只跑这么一个程序,所以主程序中不能让他执行完,必须进入死循环,否则,如果执行完了程序他就不会再工作了。

好了这样就完成了一个基本的单片机程序。但是如何控制单片机的IO口呢?我们先来看一下芯片说明里的管脚定义图:

这是STC DIP40 封装的管脚定义图,我们可以看到一些比较奇怪的说明,什么P0.0-P0.7呀、P1.0-P1.7呀的,这些就是IO端口

通常有4组IO口,P0、P1、P2、P3口,每组IO口有8个管脚,分别代表8个二进制位,而每组IO口除了作基本的输入输出外都有可能有他特殊的用法,这就根据不同型号的单片机而定了。就比如STC的这款单片机,P0口除了可以做基本的输入输出,还可以做A/D转换用,所以他的P0口后面还标有 AD0-AD7 的字样,但这些是后面的应用了,我们先谈谈如何控制或读取这些IO口。

在单片机种,这些IO口的管脚都是由厂家指定的系统功能寄存器控制的,只要知道地址,读取到指定寄存器地址的值就可以得到相对的IO口状态,同理,设置相应的寄存器值,也会改变IO口的状态。因为我们是用C语言,没必要直接用地址,我们可以将如0x80 这种地址以方便记忆的变量来表示,所以,我们看一下 REG52.H 就会发现

sfr P0 = 0x80;
sfr P1 = 0x90;
sfr P2 = 0xA0;
sfr P3 = 0xB0;

P0口的地址是 0x80 这个位置,P1口的地址是0x90。我们只需要在程序里用P0 = 255,或 P0=0 就可以改变 P0 口的8个管脚的状态是有电或是没电出去。

但是,如果想单独控制一个针脚的状态怎么做呢?有些朋友可能会想到用二进制位运算就可以了,比如非呀、与亚、或呀、异或呀什么的。

对,这是个方法,但不是很灵活,在这里,还可以进行寻址定义管脚。比如我们只想控制 P0.5 口的状态,那么用二进制计算的方法就有点麻烦了,我们可以这样做

sbitLED1= P0^5; //在这里 ^ 并不是异或运算符,只是特定的寻址符号

这时,程序里如果这样操作

LED1 = 1;

那么P0.5口将处于供电出去的状态

当然,这样操作将会取得P0.5口的当前状态

bit LEDState;

LEDState = LED1;

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top