您现在的位置是:首页 >学无止境 >51单片机入门网站首页学无止境
51单片机入门
文章目录
一、安装keil5及proteus
keil5安装 相关博客
Keil C是德国KEIL公司开发的单片机C语言编译器。μVision 4是一个窗口环境下的、集成化的C51开发环境。集成了项目管理、文件编辑、编译连接、软件仿真调试等多种功能。
proteus7安装 相关博客
proteus 8.12安装 相关博客
Proteus软件是英国ab Center Electronics公司出版的EDA工具软件。它不仅具有其它EDA工具软件的仿真功能,还能仿真单片机及外围器件。它是目前比较好的仿真单片机及外围器件的工具。
二、MCS-51单片机结构与原理
(一).8051单片机基本组成
(二).8051单片机引脚
单独的单片机芯片是工作无法独立工作的,由此引出单片机最小系统。
单片机最小系统,能使单片机正常工作的最基本元件组成的系统,包括外接电源正负极(VCC40引脚、VSS20引脚),复位电路使单片机初始化,晶振电路为单片机提供时钟脉冲信号。
各种引脚等看完数电模电再来填坑,I/O等学完单片机再来填坑
。
1.电源引脚
2.时钟电路引脚
3.控制信号引脚
4.输入/输出端口
(三) 并行输入/输出端口结构
三、单片机cx51编程基础
Cx51语言所用到的数据、变量、运算符、流程控制语句等与C语言基本相同。
(一).变量定义
C51定义一个变量的格式如下 数据类型 [存储类型] 变量名表
,其中数据类型与存储类型可以调换,存储类型可以缺省。
unsigned int i;//定义无符号整数
unsigned char bdata value;//定义无符号字符 value,定义在片内RAM位寻址区
为了提高执行效率和资源利用率,在程序运行期间根据数据的不同采用不同的方法进行处理,需要将数据定义为不同的类型。
(二).数据类型
Cx51支持的数据类型
前8种在c语言中具体介绍,后四种为keil c51新增类型,不支持数组和指针操作。这四种简单了解下,在后面应用时再做详细学习。
bit
用来定义位变量,位于8051单片机内部RAM位寻址区(20H~2FH)。如果指定bit
存储类型只能使用data
或者idata
。sfr
用于定义特殊功能寄存器变量,例如对P0
口。该变量存储在片内的特殊功能寄存器存储区中,用来对特殊功能寄存器进行读写操作。sbit
用于定义特殊功能寄存器位变量,用来对特殊功能寄存器的可位寻址位进行读写操作。sfr16
也用于定义特殊功能寄存器,所不同的是它用于操作占两个字节的特殊功能寄存器。
unsigned char bdata value;//定义无符号字符 value,定义在片内RAM位寻址区
bit value_0 = value^0;
sfr P0 = 0x90;定义P0端口在片内寄存器,通过改变P0值对该端口寄存器(地址0x90)进行操作
sfr16 DPTR = 0x82;// DPTR低8位地址为 0x82 高地址为0x83
sbit P0_0 = P0^0;// 对P0第0位操作可以用P0_0代替
(三).存储类型
在Keil中,片内存储目标代码对变量访问速度快,存储空间有限,片外存储虽然访问速度慢但容量大。
51单片机有片内数据存储区和程序存储区,在片内存储区空间不足时需要扩展片外存储区。
data
区访问速度最快,不过DATA
区存储空间有限,除了包含程序变量外,还包含堆栈和寄存器组,因此不可定义过多,以避免影响中断等正常功能。bdata
允许位与字节混合访问。idata
使用指针来进行寻址和访问。pdata
存储在片外存储器的第一页,寻址时只需装入8位地址,相对于xdata
要快。xdata
寻址需要完整的16位地址。code
将变量存储在程序存储器中,不占用RAM空间。缺点变量只读不能写,因此适合存储常量或者查表类数组数据。
(四).Cx51语言程序结构
Cx51语言程序由编写者组织和定义的一个或者多个函数构成,通过函数的有序调用完成预期功能。
函数分为主函数,标准函数库,自定义函数。
四、简单实现案例
在8051单片机上的P1.0端口接上LED,实现LED周期闪烁。
一些器件名称 CAP 电容;CAP-ELEC电解电容;CRYSTAL 晶振;RES电阻;
原理图
代码实现
#include<reg51.h> //包含单片机定义寄存器的头文件
sbit led = P1^0; //将led定义为P1.0位
void delay(void) //延时函数
{
unsigned int i; //定义无符号整数,最大取值范围65535
for(i=0;i<20000;i++);//做20000次空循环,以进行延时。
}
int main(void ) //主函数
{
while(1) //无限循环,以使LED持续闪烁。
{
led =0; // P1.0输出低电平,灯亮
delay(); //延时一段时间
led =1; // P1.0输出高电平,灯灭
delay(); //延时一段时间
}
}
其他
protues如何选择器件?
普通器件
电源接地等。。。