首页 理论教育 单片机程序设计简介:从汇编到C语言

单片机程序设计简介:从汇编到C语言

时间:2023-06-28 理论教育 版权反馈
【摘要】:表7-8P3口的第二功能7.7.3单片机程序设计简介单片机控制程序可以用汇编语言编写,也可用高级语言编写,高级语言中应用较广泛的是C语言。

单片机程序设计简介:从汇编到C语言

7.7.1 概述

微课 C51单片机的硬件系统认知

单片机是采用超大规模集成电路技术把具有数据处理能力的中央处理器CPU、随机存储器RAM、只读存储器ROM、多种I/O接口和中断系统、定时器/计数器等集成到一块半导体芯片上的微型计算机系统,是典型的嵌入式微控制器,在工业控制领域、智能电子产品及物联网终端设备等领域广泛应用。

单片机种类很多,较典型的有Intel公司的MCS-51系列、Atmel公司的AT89系列和AVR系列、Philips公司80C51系列、ARM公司的ARM系列等。其中51系列单片机是最基本、最通用且目前仍在广泛应用的单片机。

7.7.2 51系列单片机硬件系统简介

1.内部结构

AT89C51是一款应用较广泛的典型8位微处理器的51系列单片机。其内部结构如图7-29所示。

图7-29 AT89C51单片机内部结构示意图

由图可见,AT89C51芯片内部主要包括:

·1个8位的CPU;

·1个4KB的程序存储器ROM[2]

·1个128B的数据存储器RAM[3]

·4个并行的8位I/O端口P0~P3;

·1个全双工的串行端口;

·2个16位的定时/计数器;

·5个中断源:2个外中断,2个定时/计数器溢出中断,1个串口中断。

2.引脚结构

AT89C51芯片封装形式为DIP40,有双列直插40个引脚。其引脚结构如图7-30所示。

3.引脚功能

(1)VCC:接电源,+5 V/3.3 V/2.7 V。

(2)VSS:接地。

(3)XTAL1、XTAL2:晶振电路反相输入端和输出端。

图7-30 AT89C51单片机引脚图

(4)地址锁存允许/片内EPROM编程脉冲。ALE:用于锁存PO端口送出的低8位地址。片内PROG芯片的编程脉冲输入端。

(5)外ROM读选通信号,寻址外部ROM时,选通外部EPROM的读控制端(OE),低电平有效。

(6)RST/VPD:复位/备用电源。

RST(Reset)是复位信号输入端,AT89C51的复位,需要持续2个机器周期以上的高电平,一般取10 ms以上;

VPD用于在VCC掉电情况下,接入备用电源。

(7)内外ROM选择/片内EPROM编程电源。

用于选择内外ROM。时,先访问内ROM,当PC(程序计数器)值超过4 KB(0FFFH)时,自动转向执行片外ROM中的程序。时,只访问片外ROM;VPP为片内EPROM芯片编程电源输入端。

(8)I/O线:AT89C51有4个8位的并行I/O端口P0、P1、P2、P3,共32个引脚。其中:

P0口为集电极开路输出模式,作为输出端口时,需通过一个上拉电阻与电源连接;

P3口为复用端口,具有第二功能,用于特殊信号和控制信号输入输出,属于控制总线。其第二功能如表7-8所示。

表7-8 P3口的第二功能

7.7.3 单片机程序设计简介

单片机控制程序可以用汇编语言编写,也可用高级语言编写,高级语言中应用较广泛的是C语言。单片机的C语言程序结构一般包括预处理、主函数和子函数3个部分。

1.预处理

单片机C语言源程序中,预处理是程序的开始部分。主要由头文件、变量定义、位名称定义等语句构成,功能是进行相关定义及声明。

例如:

微课 单片机C语言控制程序简介

第一条语句为头文件,功能是用文件包含命令“#include”包含51单片机中的寄存器,以便在程序中可以调用这些寄存器。

第二条语句是数组定义语句,定义了一个有10个元素的字符型数组SEGTAB。

第三条、第四条语句是变量定义语句,定义了4个整型变量i、j、k、temp和一个字符型变量value;

第五条是位定义语句,用sbit命令定义一个位变量ST表示单片机的P3.0位。

2.主函数

作为一种结构化程序,C语言源程序是由函数构成的。函数是由函数定义和函数体两部分组成。一般格式为:

式中:“void”表示函数无返回值;“delay”为函数名;“unsigned int i”为函数参数。

每个C语言源程序必须有且仅有一个主函数main( ),主函数是无参函数,程序的执行总是从主函数开始。

例如:

3.子函数

C语言源程序除主函数外的其他函数均为子函数。一个C语言源程序中可以有若干个子函数。主函数可以调用子函数,子函数也可以调用其他子函数,还可以自我调用,实现递归

举例如下:

(1)定时/计数器T1的初始化子函数。

(2)延时子函数。

7.7.4 AT89C51单片机的定时/计数器及应用

1.定时/计数器功能

如前所述,AT89C51单片机内有两个16位的定时/计数器T0和T1,应用时可用作两个8位的计数器,分别为TH0、TL0和TH1、TL1。定时/计数器的功能是定时和计数。其中,定时是对单片机内部特定周期的时钟脉冲按设定好的计数值进行计数,从而实现定时功能;计数是对从P3.4、P3.5输入的外部时钟信号进行计数。

2.定时/计数器工作机制

AT89C51单片机的定时/计数器采用“溢出中断”的工作机制,当计数值超出设定的最大值时,将使其溢出标志位置1。

3.定时/计数器的工作过程(www.xing528.com)

AT89C51单片机的定时/计数器应用时,需遵循4个工作过程,即设置工作方式、设置计数初值、启动定时/计数器、等待溢出中断。

(1)设置工作方式。

AT89C51单片机的定时/计数器有4种工作方式,即方式0、方式1、方式2和方式3。

方式0为13位定时/计数器方式,计数寄存器为高8位和低5位,计数器的模为213=8192。

方式1为16位定时/计数器方式,计数寄存器为高8位和低8位,计数器的模为216=65536。

微课 C51单片机的定时/计数器及应用

方式2为自动重装计数初值的8位定时/计数器方式,计数器的模为28=256。TLi用作8位计数器,THi保存初值,当TLi计数中断时,THi会自动将保存的初值装入TLi

方式3为T0独用的8位计数器方式,此时T0被拆分成两个8位的计数器TH0和TL0,且TH0占用T1的控制位,故此方式下T1不工作。

定时/计数器的工作方式需由工作方式寄存器TMOD设置。TMOD为8位的专用寄存器,字节地址为0x89。其各位的功能如图7-31所示。

图7-31 TMOD控制位及含义

因定时/计数器T1和T0的工作方式设置内容相同,图7-31中仅给出定时/计数器T1的工作方式控制位的含义。

定时/计数器工作方式及功能如表7-9所示。

表7-9 定时/计数器工作方式及功能

(2)设置计数初值。

AT89C51单片机的T0和T1都是16位加法计数器。在计数器允许的计数范围内,计数器可以从任何数值开始加1计数,当计数值超出最大值时产生溢出。例如,对于16位计数器,当计数值到65535时,再加1,计数值则变为0,产生溢出。

由于实际应用中定时、计数的需求不同,要求定时/计数器计数的个数也不同。但因单片机中定时/计数是以“溢出”机制工作的,因此,对不同的定时、计数需求是以装入不同的计数初值实现的。如工作在定时功能的计数器,因其累计的是单片机内机器时钟脉冲的个数,而单片机内的机器时钟脉冲为晶振脉冲的12分频,在单片机外接晶振频率为12 MHz时,其机器周期为1μs。所以,当需定时50 ms时,需定时/计数器计数50000次。若选用方式1,则在程序控制中,装入计数初值的C语言源程序语句为:

(3)启动定时/计数器。

定时/计数器的启动是由定时/计数器控制寄存器TCON中的TRi位控制的。TCON也是51系列单片机的专用寄存器,字节地址为0x88,可以进行位寻址[4],即可以对其中的任意二进制位编程。TCON的控制位及含义如图7-32所示。

图7-32 TCON控制位及含义

(4)溢出处理。

单片机对定时/计数器的溢出处理有程序查询和中断两种方式。

①程序查询。程序查询方式是通过查询溢出标志位TFi是否为1,是则向下执行,并清除溢出标志位,不是则继续等待。

例如,查询定时/计数器T1溢出的C语言源程序语句为:

②中断方式。中断方式是根据溢出标志位TFi的情况,是1则执行中断函数,溢出标志位由硬件清0;不是1则继续执行主函数。

中断是单片机等智能处理芯片中,CPU与接口及外部设备之间信息传输的重要方式之一。中断是指CPU检测到中断源的中断请求时,停止正在执行的主程序,转去执行中断服务程序的工作方式。

中断源是能够引起中断的事件。AT89C51单片机有5个中断源,按照中断优先级从高到低的顺序,分别是外部中断0、定时/计数器0中断、外部中断1、定时/计数器1中断和串口中断。每个中断源有一个中断类型号,对应中断服务程序的入口地址,即中断服务程序的首地址。5个中断源的中断类型号如表7-10所示。

表7-10 单片机中断源的中断类型号

在单片机的应用程序中,中断功能是由中断函数实现的,中断函数的定义格式为:

例如,用定时/计数器T1实现的60 s定时程序中的中断函数为:

上述程序案例中的变量“count”和“miao”已在预处理部分进行了相应的定义。

7.7.5 单片机数码管显示控制

1.数码管简介

七段数码管是电子电路中常用的数码显示器件,其结构主要由a、b、c、d、e、f、g七段发光二极管小数点dp组成,能显示0~9、A~F、H、L、P、R、U、Y、负号(-)和小数点(.),如图7-33(a)所示。

按工作方式,数码管分共阳极数码管和共阴极数码管,如图7-33(b)和图7-33(c)所示。其中,共阳极数码管7个发光二极管的阳极共同接于电源正极,阴极接收到低电平信号的字段发光;共阴极数码管7个发光二极管的阴极共同接地,阳极接收到高电平信号的字段发光。

共阳极、共阴极两种数码管的字型码如表7-11所示。

图7-33 七段数码管结构及接法

(a)七段数码管结构;(b)共阳极接法;(c)共阴极接法

表7-11 七段数码管字型码

续表

2.数码管的显示控制方式

单片机控制数码管显示有静态显示控制与动态显示控制两种方式。

(1)数码管的静态显示控制。

将各数码管的COM端(公共端)接电源(共阳极)或接地(共阴极),段控端接单片机的I/O口的对应位,接收单片机相应I/O口的字型编码以显示相应字符的控制方式为数码管的静态显示方式,如图7-34所示。

图7-34 数码管的静态显示接线方式

由图7-34可见,两个共阳极数码管的公共(COM)端分别通过上拉电阻接电源,而段控端则各自接于单片机的P0.0~P0.7和P2.0~P2.7上。

静态显示方式控制比较简单,但因每个数码管都需通过一个8位的I/O口接收字型码,会导致多位数码管时I/O口不够用的问题,因此仅适用于数码管少的情况。

(2)数码管的动态显示控制。

数码管的动态显示是利用人眼的视觉“滞留效应”原理工作的一种显示控制方式。视觉滞留效应是指当人眼所看到的影像消失后,影像仍在大脑中停留0.1~0.4 s的时间。

采用动态显示方式,各数码管的段控端同接单片机一个I/O口,COM端分接其他I/O口的对应位或通过译码器接于单片机的其他I/O口。单片机每次向各数码管的段控端发送同一字型码,但高速轮流向各数码管的COM端发送有效信号,即位选码。因此,虽然各数码管都收到同一个字型码,但每次只有一个数码管公共端有效,显示其对应的内容。

数码管动态显示方式的连接方法如图7-37所示。

由图7-37可见,单片机的P0口,通过双向缓冲驱动器74LS245和限流电阻接于4位共阴极数码管的段控端,作为4位数码管的段选码的输出端。如前所述,51单片机的P0口为极电极开路输出模式,因此作为输出端口时,接了上拉电阻。而4位数码管的公共端则接在集成译码器74LS138的输出端,由单片机的P2.2、P2.3、P2.4输出的位选码控制,因译码器的低电平有效的输出端输出信号具有互斥性,当P2.4、P2.3、P2.2高速轮流输出000~011时,依次轮流为低电平,使每次只有一位数码管显示,其他数码管内容则是利用人眼的视觉滞留效应呈现的。

3.三线总线转换器74LS245简介

74LS245是8路同相三态双向总线收发器。常用于电平转换或驱动LED、数码管等显示设备,以提高数码管的亮度以及P0口带负载能力。其封装为DIP20形式,芯片外形及引脚排列如图7-35和图7-36所示。

图7-35 74LS245芯片封装

图7-36 74LS245引脚排列

74LS245的为低电平有效的片选端,DIR为数据传输_方向控制端。当时,DIR=0,信号由B向A传输;DIR=1,信号由A向B传输。当时,A、B均为高阻态。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈