读《新概念51单片C语言教程》之一

新概念51单片C语言教程

新概念51单片C语言教程

从大学到现在,我对计算机的认识一直很浮浅,特别是使用 Java 这些年,虚拟机确实带来了移植的便利,但是却屏蔽了底层,割断了我与底层硬件的联系。当我决定展开计算机组成之旅的时候,我打定主意要从简单入手,但很快意识到自己面临一个问题,如何寻找一个最简单的计算机?64位普及的年代,即便在垃圾堆里,也难寻得386的踪迹。

认识 MCS-51 单片机是无心插柳柳成荫,2011年我从爱果联盟了解到了 WiFi-Robot 项目,于是花了一笔不菲的钱来组装这个大玩具。但是,很快我觉得无趣了,凡具备了中学生的阅读理解能力,都能组装、掌控它。作为一个常常自命不凡的程序员,我更加对自己编写代码控制小车产生了兴趣。碰巧它的控制板采用的正是51单片机。

我曾在2012年初,向论坛版主 sammy 请求原理图,以便了解硬件结构,当时未获得回应。于是接下来大半年,WiFi-Robot 一直被我冷落在箱子里。直到半个月前,实在不忍心那么一笔钱就这样白白浪费,决定继续骚扰版主和另一位重量级大咖。同时,我找来了本书《新概念51单片C语言教程》,以及配套的TX-1C开发板,看书、做实验,便有了这个系列的读书笔记。

Chapter 1

C语言

应用于51单片机的 C 语言与 ANSI C 一脉相承,但似乎没有类似于 C89/C99/C11 一类的标准。支持的数据类型有:(unsigned) char, (unsigned) int, (unsigned) long, float, double,它们的位长度分别是8、16、32、32和64。

此外还有四种特殊的数据类型:sfr,特殊功能寄存器,声明一个8位的寄存器;sfr16,16位特殊功能寄存器;bit,位变量声明;sbit,特殊功能位声明,也就是声明某个特殊功能寄存器的某一位。

需要注意的是,不能声明 sbit 数组变量,也不能将 sbit 类型声明函数局部变量。

引脚

引脚按照功能分为三类:电源和时钟引脚、编程控制引脚、I/O口引脚。

I/O 口引脚共四组,从 P0 到 P3。P0 口是双向的,内部没有上拉电阻,一般需要接上10k欧姆的上拉电阻才能使用。P1 到 P3 则是准双向的。

51单片机在一上电时,它所有的未控制的I/O口都将默认为高电平。

学习目标

单片机编程就是为了控制其引脚输出高电平或者低电平,由高低电平控制外围电路。

  • 掌握单片机最小系统运行的必要条件:电源、晶振和复位电路
  • 掌握对单片机I/O口的操作:输出控制电平高低,输入监测电平高低
  • 定时器:方式二
  • 中断:外部中断、定时器中断、串口中断
  • 串口通信:单片机之间、单片机与计算机之间

Chapter 2

时钟/状态/机器/指令周期

时钟周期也称为振荡周期,定义为时钟脉冲的倒数,是计算机中的最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。时钟脉冲是计算机的基本工作脉冲,控制着计算机的工作节奏。

51单片机把一个时钟周期定义为一个节拍(用P表示),二个节拍定义为一个状态周期(用S表示)。

一条指令的执行过程划分为若干个阶段,每一个阶段完成一项工作。每一项工作称为一个基本操作,完成一个基本操作所需要的时间称为机器周期。8051系列单片机的一个机器周期由6个状态周期,12个机器周期组成。

执行一条指令所需要的时间,一般由若干个机器周期组成,称之为指令周期。指令不同,所需的机器周期也不同。

锁存器

74HC573 的OE 引脚为输出使能端,低电平有效,在 TX-1C 已经接地。其高电平时,锁存器呈现高阻态,既不是高电平,也不是低电平,它的电平状态由与它相连接的其他电气状态决定。

LE 是锁存控制端,其为高电平时,输出随输入变化而变化,其为低电平时,输出保持上一次的状态不变。

二极管

二极管具有单向导电性,当发光二极管,测量它两端的电压约为1.7v,这个电压又叫做发光二极管的“导通压降”。直插式发光二极管,长脚为正极,短脚为负极。

TX-1C 上共有八个发光二极管,依次接在 P1.0 至 P1.7口,

Leave a comment

Your comment