资源描述
本章目标本章目标职业素养目标职业素养目标n 学会识别AT89S52的标识 知识目标知识目标n了解单片机的相关常识n掌握AT89S52的构造与原理 单片机基础知识本单元内容概述n一 初步了解单片机:1.计算机的相关基础知识;2.单片机的概念 3.单片机的发展历史;4.单片机的基本类型;5.单片机的应用范围。n二、学习单片机AT89S52的硬件资源:1.单片机AT89S52的中央处理器;2.单片机AT89S52的存储器;3.单片机AT89S52的端口与引脚;4.单片机AT89S52的时序与复位;5.单片机AT89S52的标示。一.计算机的常用术语n1、位(bit)位是计算机所能表示的最基本、最小的数据单元。计算机采用二进制,因此位就是1个二进制位,若干二进制位的组合就可以表示各种数据、字符等。n2、字(word)和字长 字是计算机内部进行数据处理的基本单位。通常它与计算机内部寄存器、算术逻辑单元、数据总线的长度一致。一个字所包含的二进制位数称为字长。计算机的相关基础知识n3、字节(byte)把相邻的8位二进制数成为字节,可以用字节作为微型计算机字长的单位。8位微型计算机的字长等于1个字节,16位微型计算机的字长等于2个字节,32位微型计算机的字长等于4个字节。习惯上把一个字节定为8位,把一个字定为16位,把一个双字定为32位。n4、指令 指令是规定计算机进行某种操作的命令,由一串二进制数码组成,是计算机自动控制的依据。n5、程序 程序是指令的有序组合,是为实现特定目标或解决待定问题而用计算机语言编写的命令序列。n6、机器语言 用二进制(或十六进制)数表示的指令和数据总和为机器语言,是计算机能直接识别和执行的程序。n7、汇编语言 用助记符号表达的指令称为汇编语言,是机器语言的符号表示。n8、高级语言 采用接近人类自然语言的习惯表达的程序设计语言,例如BASIC、C语言。现在一般使用C51语言设计51单片机程序。n1、数制介绍(1)十进制(Decimal)数码:0,1,2,3,4,5,6,7,8,9 十进制有09十个不同的数码。十进制数逢十进一,即当低位满十则向邻高位进一。(2)二进制(Binary)数码:0,1 二进制有0,1两个不同的数码。二进制数逢二进一。计算机的相关基础知识二.计算机的数制(3)十六进制(Hexadecimal)数码:0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F 十六进制有0F十六个不同的数码。十六进制数逢十六进一。表1-1 部分十进制、二进制、十六进制数的对照表十进制二进制十六进制十进制二进制十六进制 000000810008100011910019200102101010A300113111011B401004121100C501015131101D601106141110E701117151111Fn2、数制的书写(1)可以在数后面用英文字母标记。十进制数以字母D结尾,例如:32D,1000D。二进制数以字母B结尾,例如:1001B,0100B。十六进制数以字母H结尾,例如:123H,A1EFH。(2)可以给数加括号,并在括号右下角标注数制代号,例如:十进制数,(32)10,(1000)10 二进制数,(1001)2,(0100)2 十六进制数,(123)16,(A1EF)16n3、不同数制之间的转换(1)二进制与十进制相互转换 二进制数转换成十进制数,将二进制数按权展开后相加,例如:11010B=124+123+022+121+020=26D 十进制数转换成二进制数,采用“除2取余法”。即用2连续去除十进制数,直到商为0为止,然后把各次余数按最后得到的为最高位、最早得到的为最低位(从下至上),依次排列起来所得到的数便是所求的二进制数。例如:试求出十进制数125的二进制数。把125连续除以2,直到商为0,相应竖式为:125262余12312余015余1272321余1余120余1 按照逆序将各余数记下,得到转换后的二进制为:111101B。(2)十六进制与十进制相互转换 十六进制数转换成十进制数,将十六进制数按权展开后相加,例如:64H=6161+4160=100D 十进制数转换成十六进制数,采用“除16取余法”。即用16连续去除要转换的十进制数,直到商为0为止,然后把各次余数按逆得到顺序依次排列起来,所得的数便是所求的十六进制数。(3)二进制与十六进制相互转换 二进制数转换成十六进制数,采用“四位合一位”的方法。即从二进制数最低位开始,每四位一组,不足四位以0补足,然后分别把每组用十六进制数表示,并按序相连。例如:把二进制数1101111100110B转换成十六进制数,则有:0001 1011 1110 0110 1 B E 6 所以,1101111100110B=1BE6H 十六进制数转换成二进制数,采用“一位分四位”的方法。即把十六进制数的每一位分别用4位二进制数表示,然后将其按序连成一体。例如:把十六进制数2AE5H转换成二进制数,则有:2 A E 5 0010 1010 1110 0101 所以,2AE5H=0010101011100101Bn单片机,全称单片微型计算机,就是在一块芯片上集成了微处理器(CPU)、程序存储器(ROM)、数据存储器(RAM)、定时/计数器以及多种I/O接口电路的具有一定规模的微型计算机,因最早被应用在工业控制领域,所以又被称为微控制器。单片机的概念MCUSOCSCM单片机的发展史单片微型计算机 微 控 制 器 专用化片上系统 单片机的发展历史单片机的分类用途专用型单片机通用型单片机厂家Intel(MCS51系列、MCS96系列)Atmel(AT89系列、MCS51内核)Motorola(68HCXX系列)Microchip(PIC系列)位数 4位机 8位机 16位机 32位机等等计算机计算机网络网络与通信与通信家用电器家用电器智能仪器智能仪器仪表仪表工业控制工业控制医疗设备医疗设备汽车设备汽车设备单片机的应用智能仪器仪表智能仪器仪表智能电压表温湿度时钟超声波流量计示波器工业控制工业控制水厂控制自动打包智能电梯医疗设备医疗设备呼吸机心电监护仪汽车设备汽车设备电动助力转向系统ABS防抱死计算机及网络和通信计算机及网络和通信 平板电脑智能手机家用电器家用电器 智能电饭煲智能电视机AT89S52单片机的基本组成AT89S52 单片机内部结构框图如图1-2所示:AT89S52 单片机内部包括:n一个8位89S52微处理器(CPU),是单片机的运算和指挥中心。n片内8K字节程序存储器(ROM),用于存放程序、原始数据及表格。n片内256字节数据存储器(RAM),用于存放临时数据,如运算的中间结果及欲显示数据。n4组8位并行输入/输出端口(I/O端口)P0P3,每个端口均有8条I/O线,用于与外部交换信息。n3个16位的定时器/计数器。n1个 6 向量2级中断结构,有6个中断源和2个中断优先级。n1个全双工UART(通用异步接收发送器)的串行I/O口。n片内晶振及时钟电路。n具有节电工作方式,即空闲方式与掉电方式。n看门狗定时器WDT是一种需要软件控制的复位方式。n双数据指针寄存器DPTR0、DPTR1。n中央处理器(CPU)也称微处理器,是单片机的核心部件,是单片机的控制和指挥中心。主要包含运算器和控制器。AT89S52单片机的中央处理器(CPU)程序状态字程序状态字寄存器寄存器PSW 算术逻辑算术逻辑运算单元运算单元ALU 累加器累加器A 通用通用寄存器寄存器B 暂存器暂存器 运算器运算器对数据进行算术运算、逻辑运算和位操作运算 定时电路定时电路 程序程序计数器计数器PC 指令指令寄存器寄存器IR 指令指令译码器译码器ID 振荡器振荡器 控制器控制器控制单片机的工作 nAT89S52单片机内部的存储器分为两种:程序存储器ROM和数据存储器RAM。程序存储器ROM用于存放程序、原始数据或表格,可在线编写程序,掉电后数据保持不变。数据存储器RAM用于存放运算的中间结果、最终结果或欲显示的数据等,其数据可随时改写,掉电后数据消失。AT89S52单片机的存储器 0000H FFH FFFFH 64KB RAM(I/O)数据存储器 RAM 00H 7FH 80H 片外 片内 0000H 片内 EA=1 0000H 1FFFH 片外 EA=0 1FFFH FFFFH 64KB ROM 8KB Flash ROM 程序存储器 ROM 内部 RAM 专用 寄存器 图1-3 AT89S52单片机存储器空间配置n1、程序存储器 AT89S52单片机片内程序存储器 ROM有8K字节,其地址为0000H1FFFH;片外可接扩展程序存储器ROM,最大达64 k字节,地址为0000HFFFFH,片内外统一编址。CPU访问片内、片外程序存储器ROM时用MOVC指令。n2、数据存储器 AT89S52单片机片内数据存储器RAM有256字节,其地址为00HFFH;片外可接扩展数据存储器RAM,最大达64 k字节,地址为0000HFFFFH。访问片内RAM时用MOV指令,访问片外RAM时用MOVX指令。0FFH80H高128B通用RAM区7FH30H通用RAM区2FH20H位寻址区地址工作寄存器1FH18HR7R0寄存器3组02H07HR706HR617H10HR7R0寄存器2组05HR5R40FH08HR7R0寄存器1组03HR3R207H00HR7R0寄存器0组(默认)01HR100HR0图1-4 AT89S52单片机数据存储器结构(1)工作寄存器区 AT89S52单片机在片内RAM中划分出低地址的32个字节单元(00H1FH)作为工作寄存器区,供用户使用。工作寄存器区分为4个工作寄存器组,每个组有8个寄存器,分别称为R7R0,占8个字节。在单片机工作时,只有一组寄存器作为当前工作寄存器组R7R0使用。当单片机复位后,系统默认工作寄存器0组为当前工作寄存器组。(2)位寻址区 在工作寄存器区后的20H2FH共16个字节为位寻址区,共有128位(8*16=128)。每一位都有相应的位地址00H7FH。利用位寻址可以对某一位进行单独的操作,而无须将一个字节的8位全部重新操作一遍。(3)通用RAM区 AT98S52单片机片内通用RAM区地址为30HFFH,这里通常设为堆栈区,栈顶的位置由堆栈寄存器SP指定。系统复位时,SP的初始值为07H。n3、特殊功能寄存器SFR 累加器ACC(E0H)累加器ACC是89S52最常用、最忙碌的8位特殊功能寄存器,许多指令的操作数取自于ACC,许多运算中间结果也存放与ACC。在指令系统中,用A作为累加器ACC的助记符。寄存器B(F0H)在乘、除指令中,用到了8位寄存器B。乘法指令的两个操作数分别取自A和B,乘积存于B和A两个8位寄存器中。除法指令中,A中存放被除数,B中存放除数,商存放于A,余数存放于B。在其他指令中,B可作为一般通用寄存器使用。程序状态寄存器PSW(D0H)程序状态寄存器PSW是一个8位特殊功能寄存器,它的各位包含了程序执行后的各种状态信息,供程序查询或判别之用。地址D0H寄存器名称程序状态寄存器PSW位地址D7D6D5D4D3D2D1D0位名称CYACF0RS1RS0OVF1P位意义进/借辅进用户标志寄存器组选择溢出用户标志奇/偶表1-2 程序状态寄存器PSW功能表 CY(PSW.7):进/借位标志位。在执行加法(或减法)运算指令时,如果运算结果的最高位(D7位)向前有进位(或借位),则CY位由硬件自动置为1(CY=1);如果运算结果的最高位无进位(或借位),则CY位被清0(CY=0)。AC(PSW.6):辅助进/借位标志位。当执行加法(或减法)操作时,如果运算结果(和或差)的低4位(D3位)向高4位(D4位)有半进位(或借位),则AC位将被硬件自动置为1(AC=1);否则AC位被清0(AC=0)。F0(PSW.5):用户标志位0。用户可以根据自己的需要对F0位赋予一定的含义,由用户置位或复位,以作为软件标志。RS1、RS0(PSW.4、PSW.3):工作寄存器组选择位。在单片机数据存储器中有四组工作寄存器组(寄存器3组、寄存器2组、寄存器1组、寄存器0组),每个寄存器组中有8个寄存器R7R0。程序运行时只能有一组寄存器组工作,可以通过设置RS1、RS0的值来进行选取。RS1RS0工作寄存器组片内RAM地址00寄存器0组00H07H01寄存器1组08H0FH10寄存器2组10H17H11寄存器3组18H1F7H表1-3 工作寄存器组选择表 OV(PSW.2):溢出标志位。当进行算术运算时,如果运算结果超出了-128+127的范围,则有溢出,OV位由硬件自动置为1(OV=1);否则无溢出,OV位清0(OV=0)。F1(PSW.1):用户标志位1(仅AT89S52所有)。作用与用户标志位0相同。P(PSW.0):奇偶标志位。每条指令执行完后,该位始终跟踪指示累加器ACC中1的个数。如果A中的1为奇数,则P=1,A中的1为偶数,则P=0。此位常用于校验串行通信中的数据传送是否出错。堆栈指针SP(81H)堆栈指针SP是一个8位特殊功能寄存器,SP的内容可指向89S52片内00H7FH RAM的任何单元。系统复位后,SP初始化为07H,即指向地址为07H的RAM单元。数据指针DPTR(83H,82H)数据指针DPTR是一个16位特殊功能寄存器,其高位字节寄存器用DPH表示(地址83H),低位字节寄存器用DPL表示(地址82H)。数据指针DPTR用于存放16位地址,以便对64KB片外RAM作间接寻址。AT89S52单片机有4组8位并行准双向I/O端口,分别为P0、P1、P2和P3,共占32个引脚。每个端口均包含一个端口锁存器(特殊功能寄存器P0P3)、一个输出驱动器和输入缓冲器。每个端口可以8条线一起用作I/O口线传输字节信息,也可以每一根I/O口线单独使用。对端口锁存器的读/写就可以实现端口的输入/输出。AT89S52单片机的并行端口 1、P0口的使用 P0口可作为通用的8位输入/输出端口使用。在单片机外接扩展存储器时,它还可以作为分时复用的低8位地址/数据总线使用,此时高8位地址总线由P2端口担任。P0口的每一位可驱动8个TTL个负载。(1)P0口作为通用输出口,需外接上拉电阻才能输出电平。(2)P0口作为通用输入口,分为读锁存器和读引脚两种情况。在读端口引脚数据前,应先向端口锁存器写入1。n2、P1口的使用 P1口常作为通用的输入/输出端口,内部有上拉电阻,不需外接电阻。当从端口引脚读入数据时,应先向端口写1,再读引脚数据。P1口每一位可驱动4个TTL个负载。在 AT89S52单片机中,P1端口还用于一些复用功能。引脚号第二功能P1.0T2(定时器/计数器 T2 的外部计数输入),时钟输出P1.1T2EX(定时器/计数器 T2 的捕捉/重载触发信号和方向控制)P1.5MOSI(在系统编程用)P1.6MISO(在系统编程用)P1.7SCK(在系统编程用)表1-4 AT89S52 P1端口各引脚复用功能表n3、P2口的使用 P2口可作为通用的8位输入/输出端口使用。在单片机外接扩展存储器时,它还可以作为高8位地址总线,与P0口的低8位地址总线一起形成16位I/O口地址。P2口的每一位可驱动4个TTL负载。P2口作为通用I/O口使用时,并且不须外接电阻,读引脚状态前,应先向端口写1。n4、P3口的使用 P3口是单片机中使用最灵活、功能最多的一个并行端口,它具有通用的输入/输出功能,还具有多种用途的第二功能(见表1-5)。同样,P3口的每一位也可驱动4个TTL负载。P3口作为输入使用时,同P0P2口一样,应先由软件向端口写1,再读引脚数据。P3口也无需外接电阻。引脚号第二功能P3.0RXD(串行输入)P3.1TXD(串行输出)P3.2INT0(-)(外部中断 0)P3.3INT1(-)(外部中断 1)P3.4T0(定时器 0 外部输入)P3.5T1(定时器 1 外部输入)P3.6WR(-)(外部数据存储器写选通)P3.7RD(-)(外部数据存储器写选通)表1-5 AT89S52 P3端口各引脚复用功能表n1、AT89S52单片机的封装形式 AT89S52单片机有PDIP(双列直插式封装)、PLCC(带引线的塑料芯片载体封装)和TQFP(方形扁平封装)三种封装方式(P指塑料)AT89S52单片机的封装与引脚介绍 图1-7 TQFP封装 图1-8 PLCC封装 图1-9 PDIP封装n2、AT89S52单片机的引脚介绍 电源引脚VCC和GND VCC(40脚):电源端,接+5V。GND(20脚):接地端。外接晶体振荡器引脚XTAL1和XTAL2 XTAL1(19脚):接外部晶振和微调电容的一端。在片内接振荡电路反相放大器的输入端。当采用外部时钟时,此引脚作为外部时钟信号的输入端。XTAL2(18脚):接外部晶振和微调电容的另一端。在片内接振荡电路反相放大器的输出端。当采用外部时钟时,此引脚悬空。控制信号引脚RST、PSEN()、ALE/PROG()、EA()/VPP RST(9脚):复位信号输入端,高电平有效。PSEN()(29脚):外部程序存储器选通信号。ALE/PROG()(30脚):地址锁存允许信号输出/编程脉冲输入端。EA()/VPP(31脚):内部与外部程序存储器选择端/片内 Flash ROM 编程电压输入端。输入/输出端口P0、P1、P2和P3。单片机时序就是CPU在执行指令时所需控制信号的时间顺序。在执行指令时,CPU首先到程序存储器中取出需要执行指令的指令码存入指令寄存器,通过指令译码器对其译码,并由时序部件产生一系列时钟信号去完成指令的执行。这些指令时钟控制信号在时间上的相互关系就是CPU时序。单片机通过时钟电路产生时序。AT89S52单片机的时钟与时序 n1、单片机系统的时钟电路 内部振荡方式内部振荡方式外部时钟方式外部时钟方式单片机的单片机的 时钟信号时钟信号 (1)内部振荡方式 AT89S52芯片内部有一个振荡器,在引脚XTAL1、XTAL2外接晶体振荡器(简称晶振),就构成了内部振荡方式。(2)外部时钟方式 外部时钟信号由XTAL1引脚接入单片机(XTAL2悬空),此时单片机将按照外部时钟信号工作。图1-10 AT89S52单片机的内部振荡方式电路 n2、单片机的时钟信号 1 1个指令周期由个指令周期由1 1至至4 4个机器周期组成个机器周期组成 AT89S52AT89S52的机器周期常定义为的机器周期常定义为1212个振荡周期个振荡周期 振荡周期振荡周期T T又称为时钟周期又称为时钟周期 ,是时序中最小的时间单位,是时序中最小的时间单位 单片机的复位操作完成单片机片内电路的初始化,使单片机从一种确定的状态开始运行。当复位信号(高电平)加到单片机RST引脚并维持2个机器周期时,CPU就可以响应并将系统复位。如果RST持续为高电平,单片机就处于循环复位状态,而无法执行程序。因此要求单片机复位后能脱离复位状态。AT89S52单片机的复位 上电复位上电复位开关复位开关复位单片机的单片机的 复位复位 图1-11 单片机复位电路 单片机的复位操作使单片机进入初始化状态。初始化后各内部计算器的状态如下:00H0000H各有效各有效位为位为0特例特例累加器累加器ACCACC寄存器寄存器B B程序状态字程序状态字PSWPSW寄存器寄存器TCONTCON寄存器寄存器TMODTMOD寄存器寄存器T0T0、T1T1、T2T2寄存器寄存器SCONSCON堆栈指针堆栈指针SP:07H端口锁存器端口锁存器P0P3:0FFH串行数据缓冲器串行数据缓冲器SBUF:不定:不定寄存器寄存器PCONPCON寄存器寄存器IEIE寄存器寄存器IPIP数据指针数据指针DPTR程序计数器程序计数器PCAT89S52单片机的标识“ATMEL”:单片机生产公司的名称。“AT89S52”:单片机的型号。“24PC”:数字部分,表示支持的最高系统时钟。数字后缀第一个字母,表示封装。“P”:DIP封装;“A”:TQFP封装;“J”:PLCC封装。数字后缀最后一个字母,表示应用级别。“C”:商业级;“I”:工业级(有铅);“U”工业级(无铅)。第4行的标示“0525”:表示2005年的第25周生产。第二单元第二单元 单片机系统显示界面单片机系统显示界面教学目标及职业要求教学目标及职业要求n教学目标掌握单片机编程常用软件的使用 掌握显示模块的程序设计方法n职业素质要求熟练操作相关软件学会处理烧写芯片时遇到的问题 本单元项目列表本单元项目列表n项目2.1:流水灯n项目2.2:电子秒表n项目2.3:电子钟n项目2.4:两级菜单的界面显示项目项目2.1 流水灯流水灯2.1.1 项目描述(一)点亮一个放光二极管(二)实现二极管闪烁(三)实现流水灯2.1.2 项目分析(一)硬件电路设计以单片机为控制中心,通过其I/O口与MCU04显示模块中的发光二极管连接,构成单片机控制LED电路。(二)程序设计C51语言编写单片机控制LED程序。2.1.3任务2-1-1 点亮一个发光二极管一、发光二极管(LED)的工作原理二、任务2-1-1的实施1.硬件设计2.点亮LED0的程序设计 P0.0的电平 LED0的状态 C语言语句1(高电平)灭 P00=1;0(低电平)亮 P00=0;2.1.4任务2-1-2 实现二极管闪烁一、任务要求本任务要求单片机控制LED0间隔1S闪烁,就是让LED0灯亮1S,然后熄灭1S,反复循环不止。二、任务2-1-2的实施 1、硬件电路的设计2、程序的设计(1)下面函数为mS级延时函数void delayms(uint x)/当晶振为12MHz,延时x mS,/用Medwin3.0的“查看/工具栏/时 /间”功能测试结果:uchar i;/x小于500(mS)时,最大误差/为17us;while(x-)/x为1000、2000、3000(mS)/时,误差分别为19、23、27us。for(i=0;i123;i+);/当晶振为11.0592MHz,延时 /12x/11 mS。(2)单片机控制LED0闪烁的程序流程图 任务2-1-2的程序清单/*-武汉市仪表电子学校-*/#include#define uint unsigned int /定义 uint=unsigned int(无符号整型)#define uchar unsigned char/定义 uchar=unsigned char(无符号字符型)sbit LED0=P00;/定义符号LED0为单片机的P0.0引脚void delayms(uint x)/函数省略,请参考上文。void main()while(1)LED0=0;/LED0亮1Sdelayms(922);/实际晶振11.0592MHz,1000*11.0592/12=922 LED0=1;/LED0灭1Sdelayms(922);2.1.5任务2-1-3 实现流水灯一、任务要求单片机控制8个发光二极管从LED0到LED7间隔1S依次点亮,当LED7亮1S后,又从LED0开始点亮,如此循环不止,视觉效果上像一个亮的灯从右到左流动。二、任务2-1-3的实施 1、硬件电路的设计2、程序的设计(1)流水灯形成原理引脚步骤P0.7(LED7)P0.6(LED6)P0.5(LED5)P0.4(LED4)P0.3(LED3)P0.2(LED2)P0.1(LED1)P0.0(LED0)说明111111110LED 0亮211111101LED 1亮311111011LED 2亮411110111LED 3亮511101111LED 4亮611011111LED 5亮710111111LED 6亮801111111LED 7亮(2)流水灯控制方法二程序流程图 项目项目2.2 电子秒表电子秒表2.2.1 项目描述(一)任务2-2-1:用数码管显示07数字。(二)任务2-2-2:实现电子秒表。2.2.2 项目分析(一)硬件电路设计以单片机为控制中心,通过其I/O口与8位数码管连接,构成I/O口模拟操作时序的接口电路。(二)程序设计用C51语言编写数码管动态扫描显示函数以及利用软件延时实现电子秒表。2.2.3任务2-2-1 用数码管显示07数字一、数码显示器的工作原理 数码管各段与数据位对应关系表 D7D6D5D4D3D2D1D0dpgfedcba常用段选码表 显示字符共阴极段选码共阳极段选码显示字符共阴极段选码共阳极段选码03FHC0H977H90H106HF9HA77H88H25BHA4HB7CH83H34FHB0HC39HC6H466H99HD5EHA1H56DH92HE79H86H607H82HF71H8EH77FHF8H无显示00HFFH86FH80H二、数码管动态显示电路的原理 显示方式静态显示:显示某个字符时,相应段的发光二极管处于恒定的导通和截止状态.动态扫描显示:分时轮流控制各个显示器的公共端,使各个显示器轮流点亮。点亮时间极为短暂.三、74LS377芯片介绍 74LS377是八D锁存器,其引脚如下图所示。在74LS377片选CE为低电平时,选中该芯片,在CP为上升沿时能把输入信号锁入芯片中。74LS377的真值表 二、任务2-2-1的实施 1、硬件电路的设计2.2.4任务2-2-2 实现电子秒表一、任务要求使用YL-236型单片机实训考核装置中显示模块中的数码管显示器,模拟一个电子秒表。具体要求:右边三位数码管能实现0999秒的循环计数。当秒数值计满999,秒数值清零,然后反复循环。二、任务2-2-2的实施 1、硬件电路的设计2、程序的设计(1)设计原理软件延时计时,主要通过循环语句来实现,确定循环的次数非常关键。设置循环次数为58次,由于每位数码管延时212/11.0592mS,58次调用显示函数所花时间为588212/11.0592=1006.9mS,接近1秒。(2)任务2-2-2的程序流程图 项目项目2.3 电子钟电子钟2.3.1 项目描述(一)任务2-3-1:用字符型液晶显示模块RTC1602,显示“Welcome!”。(二)任务2-3-2:利用C51单片机的定时器中断功能,结合RTC1602编写程序,制作一个简易电子钟。2.3.2 项目分析(一)硬件电路设计单片机的I/O口与RTC1602连接,构成模拟操作时序的接口电路。(二)程序设计编写字符型液晶显示模块RTC1602的接口驱动程序和显示数字、英文等字符的程序,以及中断初始化和服务函数程序。2.3.3任务2-3-1 RTC1602显示“Welcome!”一、字符型液晶显示模块RTC1602概述 二、字符型液晶显示模块RTC1602主要硬件构成说明LCDLCDLCD控制器显示器驱动器背 光VDDVSSV0R/WRSDB0DB7LEDALEDK字符型液晶显示模块RTC1602的接口定义n表2-5 RTC1602模块的接口定义管脚号管脚名称方向管脚功能描述1VSS-电源地(0V)2VDD-模块电源正极(5V)3V0-对比度调节端4RSI数据/指令寄存器选择端RS=0:选择指令RS=1:选择数据5R/WI读写选择端R/W=0:写操作;R/W=1:读操作。6EI使能端7DB0I/O数据线8DB1I/O数据线9DB2I/O数据线10DB3I/O数据线11DB4I/O数据线12DB5I/O数据线13DB6I/O数据线14DB7I/O数据线15LEDA-LED背光源正极(5V)16LEDK-LED背光源负极(0V)三、RTC1602的控制寄存器n1、指令寄存器(IR)n2、数据寄存器(DR)n3、忙标志:BFn4、地址计数器(AC)n5、显示数据寄存器(DDRAM)n6、字符产生器(CGROM)n7、字符产生器(CGRAM)图2-34 CGROM字符编码与字符关系对照图四、RTC1602的指令系统n单片机是通过控制HD44780来控制RTC1602进行显示。控制指令有9种,各种指令的格式及功能说明如表2-6。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0功能清屏0000000001清除屏幕显示内容。归位000000001将光标及光标所在位的字符回原点。设置输入模式00000001I/DS设置光标、显示画面移动方向。显示开关控制0000111DBC设置显示、光标、光标闪烁的开关。设置显示模式0000111000设置显示为162,57的点阵,8位数据总线。设置数据指针0080H+地址码(第一行:027H;第二行:4067H)设置数据指针。读忙标志BF01BFAC6AC5AC4AC3AC2AC1AC0指示液晶屏的工作状态。写数据10数据往DDRAM中写数据。读数据11数据从DDRAM中读数据。表2-6 RTC1602指令表 指令说明:(1)清屏功能描述:清除显示屏所有的内容,光标回到原点。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0清屏0000000001 指令说明:(2)归位命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0归位000000001*功能描述:清地址计数器 AC=0;将光标及光标所在位的字符回原点;但 DDRAM 中的内容并不改变。指令说明:(3)设置输入模式 n功能描述:设置光标、显示画面移动方向。nI/D:地址指针AC变化方向标志。nI/D=1时,读写一个字符后,地址计数器AC自动加1;nI/D=0时,读写一个字符后,地址计数器AC自动减1。nS:显示移位标志。nS=1时,写入一个字符后全部显示往左(I/D=1)移动或者往右(I/D=0)移动;nS=0时,写一个字符显示不发生位移。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0设置输入模式 00000001I/DS指令说明:(4)显示开关控制功能描述:设置光标、显示画面移动方向。nD:显示开/关控制标志。D=1,开显示;D=0,关显示。关显示后,显示数据仍保持在 DDRAM 中,立即开显示可以再现。nC:光标显示控制标志。:C=1,光标显示;C=0,光标不显示。n不显示光标并不影响模块其它显示功能。B:闪烁显示控制标志。B=1,光标闪烁,B=0,不显示光标。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0显示开关控制 0000001DCB指令说明:(5)设置显示模式n功能描述:设置模块的显示方式。我们在以后的项目中固定显示模式为162、57的点阵,8位数据总线。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0设置显示模式 0000111000指令说明:(6)设置数据指针n功能描述:设置 DDRAM 地址指针。它将 DDRAM 存储显示字符的字符码的首地址送入 地址计数器AC 中,于是显示字符的字符码就可以写入 DDRAM 中或者从 DDRAM 中读出。nRTC1602有两行,每行有40个地址,我们只取前16个就行了。要想在正确的位置显示字符,必须在地址前加上80H。例如我们要在DDRAM的01H地址处显示字符“A”,那么地址数据为80H+01H,即81H。往81H中写入数据0 x41H(A的代码),这样就能在DDRAM的01H处显示字符“A”。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0设置数据指针 80H+地址码(第一行:027H;第二行:4067H)指令说明:(7)读忙标志BFn功能描述:当 RS=0和 R/W=1 时,在E 信号高电平的作用下,BF和 AC6AC0 被读到数据总线 DB7DB0 的相应位,通过BF的值来判断模块的工作状态。nBF:内部操作忙标志,BF=1,表示模块正在进行内部操作,此时模块不接收任何外部指令和数据,直到BF=0 为止。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0读忙标志BF01BFAC6AC5AC4AC3AC2AC1AC0指令说明:(9)读数据 功能描述:从DDRAM中读取数据。命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0设置数据指针11数据指令说明:(8)写数据命令RSR/WDB7DB6DB5DB4DB3DB2DB1DB0设置数据指针10数据功能描述:写数据到DDRAM中。五、RTC1602的读写操作时序n写操作时序图从图2-35中可看出,对RTC1602写操作过程为:R/W端为0;RS端根据写指令或写数据,分别设置为0、1;单片机准备好数据DB0DB7后,在E端产生下降沿,RTC1602锁定数据。n读操作时序图从图2-36中可看出,对RTC1602读操作过程为:R/W端为1;RS端根据读状态或读数据,分别设置为0、1;E端变为1,RTC1602输出数据,单片机可读取数据DB0DB7;E端变为0,此后数据输出无效。图2-35 RTC1602的写时序图 图2-36 RTC1602的读时序图六、任务2-3-1的实施1、硬件电路的设计本任务需要使用YL-236装置中的三个模块:MCU01主机模块、MCU02电源模块、MCU04显示模块,模块接线图如图2-37所示。MCU04显示模块 RS WR E DB7DB0GND+5VGND+5VP1.0 P1.1 P1.2 P0口GND+5VMCU01主机模块MCU02电源模块2、RTC1602的基本C51函数及显示界面程序设计n(1)void busy()n(2)void writeData(unsigned char x)n(3)void writeOrder(unsigned char x)n(4)void init16024()n(5)void writeByte(unsigned char x,y,dod)n(6)void writeString(unsigned char x,y,unsigned char code*p)任务2-3-1的程序流程图如图2-38所示。开始初始化RTC1602调用显示字符串和字符函数结束任务任务2-3-2 简易电子钟的实现简易电子钟的实现一、任务要求n利用单片机的定时器中断,实现电子钟的准确计时,并在RTC1602屏幕上进行显示。二、AT89S52单片机中断系统1、中断的概念n所谓的中断就是,当CPU正在处理某项事务的时候,如果外界或者内部发生了紧急事件,要求CPU暂停正在处理工作而去处理这个紧急事件,待处理完后,再回到原来中断的地方,继续执行原来被中断的程序,这个过程称作中断。2、中断的优点n(1)分时操作。CPU与低速的外部设备交换信息时,可以分时命令多个外设同时工作,外设工作的同时,CPU可以执行主程序,当外设完成工作时向CPU申请中断,CPU才转去执行中断服务程序,这样大大提高了CPU工作效率。n(2)实时处理。可以通过中断响应实时处理环境变化。n(3)故障处理。CPU可以通过中断自行处理运行过程中无法预料的故障问题。3、中断源 起并发出中断请求的源头(如某设备或事件)称为中断源。51系列单片机有6个中断两个 中断(INT0、INT1)、三个定时器/计数器中断(T0、T1、T2)和一个串行口中断。中断源的别方式有两种:(1)查询中断:通过软件逐个查询各中断源的中断请求标志。(2)向量中断:中断请求通过优先级排队电路,一旦响应转向对应的向量地址执行。4、中断优先级n中断优先级越高,则响应优先权就越高。当CPU正在执行中断服务程序时,又有中断优先级更高的中断申请产生,这时CPU就会暂停当前的中断服务转而处理高级中断申请,待高级中断处理程序完毕再返回原中断程序断点处继续执行,这一过程称为中断嵌套。5、中断源、入口地址、C语言程序格式表表2-7 中断源、入口地址、C语言程序格式表序号中 断 源中断向量中断服务程序格式1外部中断0(INT0)0003Hinterrupt 02定时器/计数器T0中断000BHinterrupt 13外部中断1(INT1)0013Hinterrupt 24定时器/计数器T1中断001BHinterrupt 35串行口中断0023Hinterrupt 46定时器/计数器T2中断002BHinterrupt 56、C语言中断服务函数格式说明为了便于用C语言编写单片机中断服务程序,C51译器也持1单片机的中断服务程序,而且用C言编写中断服务程比汇编语言方便的多。C语言写中断服务函数的格式如下:函数类型 函数名(形式参数列表)interrupt n using m其中,interrupt后面的n是中断编号,取值范围是05;using后面的m表示使用的工作寄存器组号,取值范围是03,若不声明using项,默认用第0组工作寄存器。例如,定时器T0的中断服务函数:void time_0(void)interrupt 1 using 0三、AT89S52单片机定时器/计数器 AT89S52单片机有三个16位内部定时器/计数器(T0、T1、T2),这里主要介绍T0、T1,它们分别由2个8位计数器组成。T0由TH0(高8位)、TL0(低8位)构成;T1由TH1(高8位)、TL1(低8位)构成。如果是计数内部晶振驱动时钟,则它是定时器;如果是计数单片机输入引脚的脉冲信号,则它是计数器。1、模式介绍n(1)定时器模式:设置为定时器模式时,加1计数器是对 内部机器周期计数(1个机器周期等于12个振荡周期,即计 数频率为晶振频率的1/12)。计数值N乘以机器周期Tcy就是定时时间t。当晶振为12MHz时,计数频率为1MHz,每1s计数值加1。n(2)设置为计数器模式时,外部事件计数脉冲由T0P3.4)或T1(P3.5)引脚输入到计数器。当T0或T1引脚上负跳变时计数器加1。识别引脚上的负跳变需要2个机器周期,即24个振荡周期。所以T0或T1引脚输入的可计数外部脉冲的最高频率为fosc/24。当晶振为12MHz时,最高计数频率为500KHz,高于此频率将计数出错。2、定时器/计数器的相关寄存器T1控制T0控制D7D6D5D4D3D2D1D0GATEC/TM1M0GATEC/TM1M0(1)定时器/计数器的方式寄存器(TMOD)GATE:门控位。用来确定对应的外部中断请求引脚是否参与T0或T1的操作控制。当GATE=0时,只要定时器/计数器控制寄存器(TCON)中的TR0或TR1为1,T0或T1被允许开始计数。当GATE=1时,不仅要TCON中的TR0或TR1为1,还要P3口的/INT0或/INT1引脚为1才允许开始计数。C/T:计数器或定时器选择位。C/T=1时,T0或T1为计数器模式。C/T=0时,T0或T1为定时器模式。M1和M0:工作方式选择位。51单片机的定时器/计数器四种工作方式,由M1、M0状态确定,见表2-8。M1M0工作方式功能000为13位定时器/计数器,TL存低5位,TH存高8位011为16位定时器/计数器102常数自动装入的8位定时器/计数器113仅适用与T0,两个8位定时器/计数器 表2-8 定时器/计数器工作方式(2)定时器/计数器控制寄存器(TCON)nTF1/TF0:溢出标志位。当T0或T1溢出时,硬件置位TF1/TF0=1),并向CPU申请中断。当CPU响应中断时,由硬件清除(TF1/TF0=0)。nTR1/TR0:运行控制位。当TR1/TR0=1时,启动T0或T1。当TR1/TR0=0时,关闭T0或T1。nIE1/IE0:外部中断请求标志。当外部信号产生中断时,由硬件置位(IE1/IE0=1),当CPU响应中断时,由硬件清除(IE1/IE0=0)。nIT1/IT0:外部中断0、1的触发方式选择位,由软件设置。当IT1/IT0=1时,下降沿触发方式。/INT0或/INT1引脚上高到低的负跳变可引起中断。当IT1/IT0=0时,电平触发方式。/INT0或/INT1引脚上低电平可引起中断。定时器/计数器控制中断控制D7D6D5D4D3D2D1D0TF1TR1TF0TR0IE1IT1IE0IT03、中断系统相关寄存器(1)中断允许寄存器(IE)nEA:中断总开关控制位。EA=1时,CPU开中断;EA=0时,CPU关中断。nET2、ES、ET1、EX1、ET0、EX0分别为T2、串口、T1、外部中断1、T0、外部中断0的中断开关控制位,置1时允许该项中断,清0时禁止该项中断产生。n要使单片机某项中断有效,必须使EA为1,同时该项中断开关控制也为1。D7D6D5D4D3D2D1D0EAET2ESET1EX1ET0EX0(2)中断优先级寄存器(IP)n51单片机的6个中断源可以被设为两个不同的级别,CPU先响应中断级别高的中断源。中断优先级通过中断优先级寄存器IP中相应位的状态来设定。nPT2、PS、PT1、PX1、PT0、PX0分别为T2、串口、T1、外部中断1、T0、外部中断0的中断优先级控制位,各项置1时为高级中断,清0时为低级中断。D7D6D5D4D3D2D1D0PSPT1PX1PT0PX04、定时器/计数器的初始化在使用定时器/计数器前,应对它进行初始化,主要是对TMOD和TCON编程,还需计算和装载计数初值。一般完成下列几个步骤:n确定定时器/计数器的工作方式:设定TMOD。n计算计数初始值,并装载到TH和TL中。n定时器/计数器在中断方式工作时,必须使EA为1,同时定时器中断开关控制也为1。n启动定时器/计数器编程TCON中的TR1或TR0位。5、定时器计数初始值的计算当fosc=12MHz时,计算定时器计数初始值当工作在定时器模式下,定时器/计数器是对机器周期脉冲计数的,一个机器周期为12/fosc=1S,则定时器不同方式下的最大定时时间如下:方式0 13位定时器最大定时间隔=2131s=8.192mS方式1 16位定时器最大定时间隔=2161s=65.536mS方式2 8位定时器最大定时间隔=281s=256S若T0工作在方式1,要求定时1mS,计算计数初值。如设计数初值为x,则:216x 1s=1000s,即x=2161000。可计数得到655361000=64536=0 xfc18。因此TH0=0 xfc,TL0=0 x18。当fosc=11.0592MHz时,计算定时器计数初始值n当fosc=11.0592MHz时,一个机器周期为12/fosc=12/11.0592S,如工作在方式1,要定时t(uS),设计数初始值为x,则:216x12/11.0592S=t,即x=21611.0592t/12。n例如:T0工作在方式1,要求定时10mS,则x=216110592/12,数据(216110592/12)在单片机中存储时,占用2个字节,等效于(110592/12),先将(110592/12)强制转换为uint类型数据,再将其拆分为高、低8位,编译时可产生最精简汇编语句,提高定时精度。n因此,装载定时器计数初始值的C51语句为:TL0=(uint)(-110592/12)%256;/去掉去掉(uint),将导致计算结果误!,将导致计算结果误!TH0=(uint)(-110592/12)/256;四、任务2-3-2的实施1、硬件电路设计LCDLCDLCD控制器显示器驱动器背 光VDDVSSV0R/WRSDB0DB7LEDALEDK2、程序设计通过单片机的定时中断进行准确计时,同时利用TC1602进行显示,达到电子钟得功能。程序流程图如2-39。项目项目2.4 两级菜单的显示界面两级菜单的显示界面2.4.1项目描述项目描述本项目要求采用点阵型液晶显示器模块本项目要求采用点阵型液晶显示器模块TG12864,完成下述任务。完成下述任务。n任务任务2-4-1:用液晶显示器:用液晶显示器TG12864,实现以下功能:,实现以下功能:数字、英文字符的显示;数字、英文字符的显示;汉字的显示。汉字的显示。n任务任务2-4-2:编写两级菜单显示界面程序,模拟电子产品:编写两级菜单显示界面程序,模拟电子产品的操作界面。的操作界面。2.4.2项目分析项目分析通过项目描述,实现本项目需完成以下2个方面工作:n硬件电路的设计:以单片机为控制中心,通过其I/O口与TG12864连接,构成I/O口模拟操作时序的接口电路。n程序的设计:用C51语言编写单片机控制液晶显示模块TG12864的接口驱动程序及显示简单信息的界面程序。2.4.3任务任务2-4-1 TG12864显示各种字符显示各种字符一、液晶显示模块TG12864概述TG12864是一种图形点阵液晶显示器,它主要由行驱动器/列驱动器及128 64全点阵液晶显示器组成。可显示图形,也可显示84个(1616点阵)汉字。MCU04显示模块中TG12864模块的照片如图2-40示,其电路原理图参考附录。图2-40 MCU04显示模块中的TG12864模块二、液晶显示模块TG12864主要硬件构成说明图2-41为TG12864的结构框图。由框图可知G12864是S6B01086B0107、12864点液晶显示板、背光构成。6B0108是TG12864的控制驱动器,S6B0107是G12864的行、列驱动控制器。控制好S6B0108、B0107就能使TG12864进行显示。液晶显示模TG12864的接口定义如表2-9。管脚号管脚名称电平管脚功能描述1VSS0V电源地。2VDD+5V模块电源正极。3V0-液晶显示对比度调节。4D/IH/L寄存器与显示内存操作选择。5R/WH/LCPU读写控制信号。6EH/L读写使能信号。7DB0H/L数据线8DB1H/L数据线9DB2H/L数据线10DB3H/L数据线11DB4H/L数据线12DB5H/L数据线13DB6H/L数据线14DB7H/L数据线15CS1H/L左半屏片选信号,高电平有效。16CS2H/L右半屏片选信号,高电平有效。17/RSTH/L复位信号,低电平有效。18VEE-由模块内部提供液晶驱动电压。19LED+5VLED背光源正极输入。20LED-0VLED背光源负极输入。V0为显示对比度调节端。如图2-42,调节V0的电压可以得到最佳显示效果。模块在出厂时已经调节好显示对比度。图2-42 对比度调节电路图三、TG12864的控制寄存器n1、指令寄存器(IR)IR是用来寄存指令码,与数据寄存器寄存数据相对应。当RS=1时,在E信号的下降沿的作用下,指令码写入IR中。n2、数据寄存器(DR)DR是用来寄存数据的,与指令寄存器寄存指令相对应。当RS=0时,在E信号的下降沿的作用下,图形显示数据写入DR,或在E信号高电平的作用下由DR读到DB7DB0数据总线上。DR和DDRAM之间的数据传输是模块内部自动执行的。n3、忙标志:BFBF标志提供内部工作情况。BF=1表示模块在进行内部操作,此时模块不接受外部指令和数据。BF=0表示模块为准备状态,随时可接受外部指令和数据。利用读取状态指令,可以将BF读到DB7,从而检验模块的工作状态。n4、显示控制触发器DFF此触发器是用于模块屏幕显示开和关的控制。DFF=1为开显示,DDRAM的内容就显示在屏幕上,DFF=0为关显示。n5、XY地址计数器XY地址计数器是一个9位计数器。高3位是X地址计数器,低6位为Y地址计数器,XY地址计数器实际上是作为DDRAM的地址指针,X地址计数器是DDRAM的页指针,Y地址计数器是DDRAM的列指针。X地址计数器是没有计数功能的,只能用指令设置。Y地址计数器具有循环计数的功能,各显示数据写入后,Y地址自动加1,Y地址指针从0到63。n6、显示数据RAM(DDRAM)DDRAM是储存图形显示数据的。数据为1表示显示选择,数据为0表示显示非选择。DDRAM与地址和显示位置关系见表2-10。CS1=1CS2=1Y=016263016263行号X=0X=7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB707DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7855DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB7DB0DB756637、Z地址计数器nZ地址计数器是一个6位计数器,此计数器有循环计数的功能,它是用于显示行扫描同步。当一行扫描完成,此地址计
展开阅读全文