单片机攻略3——C51入门

一:背景介绍

 

随着时代的发展,人们希望把CPU、RAM等器件集成到一个平台上来工作,单片机就这么诞生了。到现在为止市面上的单片机款式种类多如牛毛,继承的功能也要根据实际需求演化出了不同的方向。以51系列为例,比较常见的是Intel开发的MCS-51系列,和国内的STC51系列。

之后也以51系列(STC89C52RC型号)学习。

STC89C52RC资源:8kbROM程序储存器,256B数据存储器RAM,3个定时器计数器,6个中断源,16位重装

二:51的结构

51是40针脚直插式排布。下图是51芯片的实际引脚图。(细枝末节的硬件结构以后再补)

2.1 各引脚的功能作用

C51总体来讲可以分为六个类型的引脚。如下图所示:

先解释一下IO口是什么:就是单片机用来传送信息的端口,这个信息包括数据和地址等,可以理解成,单片机就像自家的房子,外部环境就是超市,通过房子里的主人(CPU)下达指令需要买什么东西回来,于是货物(数据)和指令(地址)通过房子的大门(IO口)进行传递。

P0:P0.0~0.7(下同),无外扩芯片时作I/O口用,读入或写出数据。有外扩时既要连接锁存器,从锁存器出去在连接外扩芯片的8位地址线;同时P0还要直接连接外扩的数据总线

P1:作普通的I/O口用

P2:无外扩作IO口。有外扩时,直接连接外扩的外扩芯片的剩余高位地址。

P3:P3的每一对端口都是是功能口。3.1,3.0是串口通信的TXD,RXD;3.2,3.3是外部中断输入的INT0和INT1; 3.4和3.5控制T1和T0的定时/计数器功能; 3.6,3.7控制读写数据

涉及到扩容时其他接线的作用:

ALE连接锁存器;RD,WR连接外部数据存储器的读和写;PSEN是外部程序存储器的读。(理解区别大概就在RD,WR连接外扩的存储器,PSEN连CPU或者存储器这类)

下面是一个基本的扩容连接原理图,也可以认为是扩容能正常运行的最小工作模板。锁存器实现数据和低位地址线的分离,高位地址可以直接扯出去。

2.2 复位电路

万一工作环境非常恶劣,单片机有可能罢工,然后好不容易运行起来的数据就会丢失。所以需要复位电路来进行保护。

复位操作三种,上电自动复位,按键手动复位,看门狗自动复位。

这方面在实际工程上很重要,但是初步学习不予考虑。

2.3内存安排

51单片机只有低128位寻址空间(就是只有128位的RAM)。此外,还有4K的ROM,不够用时可以外扩ROM;内ROM+外ROM≤ 64K。

52单片机有256位寻址空间,低128位空间称为通用RAM,结构如下。

高128B的RAM单元中有21个单元可用,称为SFR。这21个SFR分散在高128B的地址空间内,分别是A,B,PSW,SP,DPH,DPL,P0,P1,P2,P3,IP,IE,TCON,TMOD,TH0,TL0,TH1,TL1,SCON,SBUF,PCON。 有些可以按位寻址。 特殊功能寄存器名称、 标识符、 地址见下表。

2.4 特殊寄存器表

这些特殊的寄存器保存在SFR区里,也就是实现各种硬件功能的开关,比如定时器,指针这类。

 

使用方法:

要用到哪个功能先sfr(C51的头文件直接包含了这些语法所以就不用再写一遍,直接用接口),或者对要操作的位进行单独的操作。举个例子:

sfr P0 = 0x80; // 把单片机内部的0x80这个地址区的东西命名为P0,见上图的表

这些定义都是放在头文件里,例如:#include<reg52.h>,编程只需要头文件写上就行了。

注意:但是对于位变量,例如P1.2,P1.3,P1.4,P1.5......这种可以使用整体字节赋值(就是直接P1=0xff这种),也可以用sbit单独设置为新的变量(sbit P1.0 = 0; sbit P1.1=1;)。

三:C51编程

单片机采用的编程方式类似C语言但是又不同,C语言面向的电脑内部寄存器,但是这几十年已经非常简单便于快速上手了。但是单片机的编译语言才从汇编语言进化没几十年,所以现在来看会稍微有点烧脑,但是到了后面其实发现也就是那么回事。

C51编程的核心,我自己总结是:面向设备的端口来操作电平。对于一个设备(包括单片机在内)要工作的原理就是控制输入输出的端口信号,让内部的数字和模拟电路经过一系列复杂的转化实现我们想要的要求。

比如舵机,三根线连上单片机之后,火线接电源(就是高电平),零线接GND(低电平),脉冲线通过不断变换的电平(1-0-1-1-1-1-0-1-1......)来控制电机旋转。所以就需要编程来控制。

3.1程序构成

和c语言基本差不多,自定义函数只是有个特殊的叫做“中断函数”,后面再补充。

 3.2 运算符

运算符和C语言的一样,几个特殊常用的有:按位与&,按位或|,分别用作对某个十六进制数的某一位清零或置位。

3.3 程序分析

        

  • 9
    点赞
  • 40
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值