有什么型号的STC单片机串口发送字符串带有硬件串口,且引脚为8个,其它外设不要求

STC单片机的特殊功能_百度文库
您的浏览器Javascript被禁用,需开启后体验完整功能,
赠送免券下载特权
10W篇文档免费专享
部分付费文档8折起
每天抽奖多种福利
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
STC单片机的特殊功能
阅读已结束,下载本文需要
想免费下载更多文档?
定制HR最喜欢的简历
下载文档到电脑,同时保存到云知识,更方便管理
加入VIP
还剩11页未读,
定制HR最喜欢的简历
你可能喜欢 上传我的文档
 下载
 收藏
粉丝量:137
该文档贡献者很忙,什么也没留下。
 下载此文档
基于STC89C51单片机最小系统分析(终稿)
下载积分:2500
内容提示:基于STC89C51单片机最小系统分析(终稿)
文档格式:DOC|
浏览次数:1665|
上传日期: 05:19:40|
文档星级:
全文阅读已结束,如果下载本文需要使用
 2500 积分
下载此文档
该用户还上传了这些文档
基于STC89C51单片机最小系统分析(终稿)
关注微信公众号STC12C5A60S2
STC12C5A60S2引脚详解
  STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统8051,但速度快8-12倍。内部集成MAX810专用复位电路,2路PWM,8路高速10位A/D转换(250K/S),针对电机控制,强干扰场合。
  STC12C5A60S2是8051系列单片机,与普通51单片机相比有以下特点:
  1、同样晶振的情况下,速度是普通51的8~12倍
  2、有8路10位AD
  3、多了两个定时器,带PWM功能
  4、有SPI接口
  5、有EEPROM
  6、有1K内部扩展RAM
  7、有WATCH_DOG
  8、多一个串口
  9、IO口可以定义,有四种状态
  10、中断优先级有四种状态可定义
  STC12C5A60S2引脚功能说明:
  VCC:供电电压;
  GND:接地;
  P0口:P0口为一个8位漏级开路双向I/O口,每个管脚可吸收8TTL门电流。当P1口的管脚写&1&时,被定义为高阻输入。P0能够用于外部程序数据存储器,它可以被定义为数据/地址的第八位。在FLASH编程时,P0口作为原码输入口,当FLASH进行校验时,P0输出原码,此时P0外部电位必须被拉高;
  P1口:P1口是一个内部提供上拉电阻的8位双向I/O口,P1口缓冲器能接收输出4TTL门电流。P1口管脚写入&1&后,电位被内部上拉为高,可用作输入,P1口被外部下拉为低电平时,将输出电流,这是由于内部上拉的缘故。在FLASH编程和校验时,P1口作为第八位地址接收;
  P2口:P2口为一个内部上拉电阻的8位双向I/O口,P2口缓冲器可接收,输出4个TTL门电流,当P2口被写&1&时,其管脚电位被内部上拉电阻拉高,且作为输入。作为输入时,P2口的管脚电位被外部拉低,将输出电流,这是由于内部上拉的缘故。P2口当用于外部程序存储器或16位地址外部数据存储器进行存取时,P2口输出地址的高八位。在给出地址&1&时,它利用内部上拉的优势,当对外部八位地址数据存储器进行读写时,P2口输出其特殊功能寄存器的内容。P2口在FLASH编程和校验时接收高八位地址信号和控制信号;
  P3口:P3口管脚是8个带内部上拉电阻的双向I/O口,可接收输出4个TTL门电流。当P3口写入&1&后,它们被内部上拉为高电平,并用作输入。作为输入时,由于外部下拉为低电平,P3口将输出电流(ILL),也是由于上拉的缘故。P3口也可作为AT89C51的一些特殊功能口:
  P3.0 RXD(串行输入口)
  P3.1 TXD(串行输出口)
  P3.2 INT0(外部中断0)
  P3.3 INT1(外部中断1)
  P3.4 T0(记时器0外部输入)
  P3.5 T1(记时器1外部输入)
  P3.6 WR (外部数据存储器写选通)
  P3.7 RD (外部数据存储器读选通)
  同时P3口同时为闪烁编程和编程校验接收一些控制信号;
  RST:复位输入。当振荡器复位器件时,要保持RST脚两个机器周期的高平时间;
  ALE / PROG :当访问外部存储器时,地址锁存允许的输出电平用于锁存地址的低位字节。在FLASH编程期间,此引脚用于输入编程脉冲。在平时,ALE端以不变的频率周期输出正脉冲信号,此频率为振荡器频率的1/6。因此它可用作对外部输出的脉冲或用于定时目的。然而要注意的是:每当用作外部数据存储器时,将跳过一个ALE脉冲。如想禁止ALE的输出可在SFR8EH地址上置0。此时, ALE只有在执行MOVX,MOVC指令时ALE才起作用。另外,该引脚被略微拉高。如果微处理器在外部执行状态ALE禁止,置位无效;
  PSEN:外部程序存储器的选通信号。在由外部程序存储器取址期间,每个机器周期PSEN两次有效。但在访问内部部数据存储器时,这两次有效的PSEN信号将不出现;
  EA/VPP:当EA保持低电平时,访问外部ROM;注意加密方式1时,EA将内部锁定为RESET;当EA端保持高电平时,访问内部ROM。在FLASH编程期间,此引脚也用于施加12V编程电源(VPP);
  XTAL1:反向振荡放大器的输入及内部时钟工作电路的输入;
  XTAL2:来自反向振荡器的输出
关注电子发烧友微信
有趣有料的资讯及技术干货
下载发烧友APP
打造属于您的人脉电子圈
关注发烧友课堂
锁定最新课程活动及技术直播
本文研发了一种智能、精确、节能的补光系统,该系统充分考虑不同植物在不同阶段不同环境对补光需光量的影响...
本文主要介绍了C51读写AT24C04源代码及AT24C04测试程序。
本文主要分析了基于STC12C5A60S2的智能插座实现,实现了过热保护、防雷击浪涌保护、按键设置、...
#include"reg51.h" #defineFOSCL #defineBAUD...
本文为大家带来STC12C5A60S2可编程时钟模块及系统省电模块代码介绍。
STC12C5A60S2在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因...
stc12c5a60s2是高速/低功耗/超强抗干扰的新一代8051单片机,指令代码完全兼容传统805...
STC系列单片机支持串口程序烧写。显而易见,这种单片机对开发设备的要求很低,开发时间也大大缩短。写入...
STC12C5A60S2精简开发板有具有电源指示;所有I/O口已引出;可以实现与电脑串口通信;可以实...
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机,是...
本文主要介绍了单片机STC12C5A60S2简介_引脚图及功能_内部结构_应用电路及命名规则。STC...
STC12C5A60S2
该文基于STC12C5A60S2为主控制器,开发了一套沼气安全生产过程监控系统,该系统提高了沼气生产...
本文研究了一种函数信号发生器。该信号发生器由单片机STC12C5A60S2、DDS芯片AD9851、...
 摘要:本文主要介绍一种基于STC12C5A60S2单片机控制智能型防爆电抗器控制器的设计,可对电流...
 双向 DC - DC 变换器( Bidirectional DC - DC Converter—B...
蓝牙是一种短距离低功耗的无线技术,在电子设备之间可以通过蓝牙连接实现控制. 在防盗门中,传统纯机械防...
蓝牙是一种短距离低功耗的无线技术,在电子设备之间可以通过蓝牙连接实现控制. 在防盗门中,传统纯机械防...
以 STC12C5A60S2高性能单片机作为控制核心,设计一种单自由度电流型 PWM 功率放大器,具...
 以深圳宏晶公司STC12C5A60S2为主控芯片,结合数码显示器、键盘、报警系统等外围电路和机器部...
目前学生运用最多的单片机是89C51\52、STC90系列、利用这些芯片可以构成最小系统,做成学习开...
在我们日常的工业和生活用电负载中,主要的负荷就是阻感负载,这样就会使电网产生感性无功电流 , 无功电...
智能路灯又叫智能化路灯,或者智慧路灯、智慧照明,是采用物联网和云计算技术,对城市公共照明管理系统进行...
抢答器在知识竞赛、文体娱乐活动(抢答赛活动)中,能准确、公正、直观地判断出抢答者的座位号。更好的促进...
  摘要:主要介绍基于STC12C5A60S2单片机的汽车空调控制系统硬件部分和软件部分的设计,对模...
在电子技术领域,频率是最基本的电参数之一,也是电子测量中最基本的测量之一。随着科学技术的迅速发展,对...
基于当前家庭室内供暖 、农业温室大棚供暖等方面温控能实现自我调节的现状,采用单片机STC12C5A6...
功能通信开发板(可以扩展),用于专业综合实践、毕业实践、创新实践等课程;考虑到本专业学生先前学过51...
由于单片机输入、输出电平是TTL电平,而PC配置的是RS-232标准串行接口,二者的电气规范不一致,...
目前,我国绝大多数的温度监测系统都是传统方式,主要有就地进行数据采集的方式和有线通信的实时温度监测系...
在对变频恒压供水系统进行深入研究的基础上,介绍了一种基于 STC12C5A60S2 单片机的变频恒压...
基于提高电源效率的目的,设计了采用PID算法的数控电源。系统采用STC12C5A6052自带的PWM...
基于STC12C5A60S2单片机中的AD采样实时采样用于检测电路是否正常,利用NRF24L01与主...
在测控领域中,经常遇到监测对象输出信号较小,难以直接采集,一般都需要将其放大后再做处理。介绍了一种小...
但受当前技术水平限制,对远光灯的合理使用在实际操作中存在一定难度。除此以外,大部分事故原因都存在前车...
STC12C5A60S2 系列单片机其所有I/O口均可由软件配置成4种工作类型之一。4种类型分别为:...
舵机也叫伺服电机,最早用于船舶上实现其转向功能,由于可以通过程序连续控制其转角,因而被广泛应用智能小...
在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因他不但和8051指令、管...
STC12C5A60S2是STC生产的单时钟/机器周期(1T)的单片机,是高速、低功耗、超强抗干扰的...
STC12C5A60S2/AD/PWM 系列单片机是宏晶科技生产的单时钟/机器周期(1T) 的单片机...
TC12C5A60S2/AD/PWM系列单片机是单时钟/机器周期(1T)的单片机,是高速/低功耗/超...
于stc自带EEPROM来说,用起来唯一不太方便的地方就是每次修改任何一个字节需要将整个扇区都擦除才...
用过stc12C5A60S2单片机的朋友都知道,该单片机有两个串口可用,看到官网的程序注释的也是比较...
STC12C5A60S2单片机内部ADC只有一个,虽然外部可以用P1口的8个脚,作8个通道的输入,但...
STC12C5A60S2/AD/PWM系列单片机是宏晶科技生产的单时钟/机器周期(1T)的单片机软件...
单片机是STC12C5A60S2,用的是单片机的硬件SPI驱动的nRF24L01+,这个是从机(接收...
stc12c5a60s2必须要用要用stc12c5a.h。因为寄存器地址和51有些区别。LZ贴上错误...
stc12c5a60s2在众多的51系列单片机中,要算国内STC 公司的1T增强系列更具有竞争力,因...
本文给出了关于stc12c5a60s2中文详细资料,stc12c5a60s2引脚图及引脚定义详细说明...
 设计了一种智能循迹小车,介绍了系统总体,STC12C5A60S2 单片机为智能小车控制核心、电源模...
STC12C5A60S2单片机集成了共4个16位定时器,两个与传统8051兼容的定时器/计数器,16...
STC12C5A60S2只有两个PWM输出,分别是1.3和1.4,也可以通过AUXR设置到P4口,2...
设计了一种基于单片机、无线芯片nRF24L01和TFT液晶显示屏的便携式脑电无线采集系统,系统控制器...
指纹锁的出现很好的解决了这种困扰。它以人体指纹作为开锁标志,通过对指纹的对比,结合计算机信息技术、电...
摘要设计了一个基于STC12C5A60S2 的U 盘音频播放器,介绍了播放器的设计思路和原理框图,分...
用STC12C5A60S2单片机配合红外光电阵列检测模块对直流电机执行参数自整定模糊PID控制器,解...
马弗炉是高性能机电一体化的新一代智能产品,适用于煤炭、电力、化工、冶金等行业和部门进行工业分析。马弗...
供应链服务
版权所有 (C) 深圳华强聚丰电子科技有限公司
电信与信息服务业务经营许可证:粤B2-当前位置: >>
51单片机轻松入门―基于STC15W4K系列
联系方式:QQ 群(STC51-STM32) :,个人 QQ: ,验证信息:单片机 邮箱: 淘宝店地址: http://shop.taobao.com/search.htm?spm=a1z10.1-c.wWybca&or derType=hotsell_desc 百度网盘辅助参考视频与资料下载地址: http://pan.baidu.com/share/home?uk=&view=share#category/type=0-1- 内 容 简 介 本书以最新流行的不需要外部晶振与复位电路的可仿真的高速 STC15 系列单片机为核心,详细介绍了 单片机内部功能模块,比如定时器、中断、串口、SPI 接口、片内比较器、ADC 转换器、可编程计数器阵列 (CCP/PCA/PWM)等。每个重要知识点都有简短精炼的实例作验证,然后就是单片机常用外围接口的介绍与 STC15 系列单片机的实际产品运用实例分析。 另外对单片机开发必须掌握的 C 语言基础知识与 Keil 开发环 境也作了较为详细的介绍,对于没有学习过 C 语言的读者通过本书也能轻松进入以 C 语言开发单片机的学 习状态。 为了快速验证本书的理论知识,作者设计了与本书配套的双核(两个仿真型单片机)实验板,功能强 大,操作简单,直观,除用于本书实验测试外,也可用于产品前期开发。 本书可作为普通高校计算机类、 电子类、 自动控制类、 仪器仪表类、 机电一体化类等相关专业教学用书, 对已有一定设计经验的单片机工程师也有重要参考价值。-2- 前言STC 单片机是在传统 8051 单片机内核的基础上进行大幅度改进升级优化而来的新一代 8051 单片机, 具 有高速、高可靠、低功耗、外围模块多、ISP 升级程序方便、价格低廉等显著优点,加上 STC/宏晶科技单 片机的厂商“南通国芯微电子”属于中国大陆本土企业,当我们在产品设计过程中遇到问题时方便与厂家 沟通获得技术支持,所以 STC 单片机已经被众多的产品设计工程师作为首选方案运用到自己的产品中去。 STC 单片机的指令系统与标准的 8051 内核完全兼容, 过去的 51 单片机书籍仍然可以拿来作为辅助参考 学习, 对于已经熟悉传统 8051 内核单片机的读者, 可以轻松过渡到 STC 可仿真的超级强大的 STC15 系列单 片机或 STC 早期的 STC89 系列单片机 , 本书的编写建立在笔者十多年的产品设计经验基础之上, 具体编写 从前到后又花费了近 5 年的时间,笔者本着十年磨一剑的精神把每一个章节的内容写出水平,因此本书内 容真实,言语简练,通俗易懂,对多年来传统单片机教材含糊不清的概念与重要知识都作了明确分析,全 书程序代码编写规范,注重程序的通用性与移植性,让读者既能轻松看懂理论知识又能方便将程序代码移 植到产品中去。 本教材主讲的单片机型号是 STC 公司的 IAP15W4K58S4(既能仿真又能 USB 直接下载程序) ,是目前 STC 最先进的芯片之一,内部资源十分丰富,具有 58K 字节程序存储器,4096 字节数据存储器,5 个定时器,4 个独立串口,8 通道 10 位高速 ADC 转换器, 1 个 SPI 接口支持主机与从机模式、2 路 CCP/PCA/PWM、6 路 带死区控制的专用 PWM、1 个比较器等,支持 USB 直接下载程序和串口下载程序,内部集成有高精度 R/C 时钟与高可靠复位电路,支持 2.5~5.5V 宽工作电压范围,只需提供电源就是单片机最小系统,只需加上 一个 RS232 电平转换芯片或 USB 转串口芯片后连上电脑就成为一个功能完美的仿真系统,程序仿真调试非 常方便,用此芯片可以完成本书很多高级实验,比如 TLC5615 数模转换芯片播放歌曲、SD 卡读写等,另外, 此单片机在软件与硬件上都完全兼容资源略少的上一代单片机 STC15F2K60S2 系列, 因此本书也完全适用于 STC15F2K60S2 系列的学习,为降低实际产品成本,本书还辅助性的介绍了 STC15W404S 系列,STC15W404S 系列资源更少一些,但管脚仍然很多,同样支持宽电压供电,带比较器功能,支持 SPI 主机与从机模式等, 在功能要求比较简单的产品上,为进一步降低成本,读者也可使用 STC15W401AS 系列或 STC15W100 系列芯 片。编 者 2015 年 1 月-3- 目第1章 单片机高效入门 1.1 单片机简介 1.1.1 认识单片机 1.1.2 单片机的用途 1.1.3 学习的典型芯片与 C 语言介绍 1.1.4 本书配套实验板及相关学习工具介绍 1.2 点亮 1 个发光二极管 1.2.1 单片机型号命名规则 1.2.2 单片机引脚功能说明 1.2.3 制作一个最简单的单片机实验电路 1.2.4 使用 Keil uVsion3 环境编写最简单的程序录1.2.5 ISP 下载程序到单片机(将电脑上的目标代码“灌入”单片机中运行) 1.2.6 程序解释 1.3 Keil 仿真 1.3.1 软件仿真(标准 8051 方式仿真,不能仿真单片机新增功能) 1.3.2 硬件仿真(利用 STC 专用仿真芯片仿真,可仿真所有功能) 1.4 经典流水灯实例 1.5 单片机 C 语言延时程序详解 1.5.1 学会使用计算软件 1.5.2 计算软件内部运算过程详解 1.5.3 利用库函数实现短暂精确延时 1.5.4 使用定时器/计数器实现精确延时 1.6 main()、void main()和 int main()的区别 1.7 第2章 printf 格式化输出函数 单片机开发必须掌握的 C 语言基础2.1 简单数据类型与运算符 2.1.1 原码、反码、补码、BCD 码、格 雷 码 2.1.2 常量 2.1.3 变量的数据类型(bit、char、int、long、float) 2.1.4 变量存储空间(code、data 、bdata 、idata、xdata) 2.1.5 变量存储类型(auto、static、extern) 2.1.6 变量作用域 2.1.7 运算符 2.1.8 运算符的优先级与结合性 2.2 C51 构造数据类型 2.2.1 数组:将相同类型数据组合在一起就构成数组(如数码管显示缓冲区) 2.2.2 结构体:将不同类型数据组合在一起就构成结构体(如年月日 ) 2.2.3 共用体:不同变量占用相同内存地址就是共用体 2.2.4 指针:用于直接读取或修改内存值 2.2.5 #define 与 typedef 的差别-4- 2.3 流程与控制 2.3.1 分支结构 2.3.2 循环结构 2.3.3 跳转结构 2.4 函数 2.4.1 函数定义 2.4.2 调用格式 2.4.3 传值调用与传地址调用 2 种方式对比 2.4.4 数组作为函数参数 2.4.5 使用指针变量作函数形式参数 2.4.6 使用结构体变量指针作为函数参数 2.4.7 函数作用域 2.4.8 库函数 2.5 模块化编程 2.5.1 头文件的编写 2.5.2 条件编译 2.5.3 多文件程序(模块化编程) 第3章 定时器/计数器、中断系统 3.1 定时器/计数器 3.1.1 单片机定时器/计数器工作原理概述 3.1.2 定时器/计数器的相关寄存器 3.1.3 定时器/计数器的工作方式 3.1.4 初值计算 3.1.5 编程举例 3.2 可编程时钟输出 3.3 中断系统 3.3.1 中断系统结构图 3.3.2 操作电路图中的开关(相关寄存器介绍) 3.3.3 编写中断函数 3.3.4 中断程序举例 3.3.5 外中断代码调试(按键的防抖技术) 第4章 串口通信 4.1 最基本的串口通信 4.1.1 串口数据发送格式 4.1.2 串口相关寄存器 4.1.3 波特率计算步骤详解 4.1.4 单片机与计算机通信的简单例子 4.2 彻底理解串口通信协议 4.3 串口隔离电路 4.4 计算机扩展串口(USB 转串口芯片 CH340G) 4.5 RS485 串行通信-5- 4.6SSI 通信4.6.1 SSI 数据通信格式 4.6.2 SSI 硬件电路 4.6.3 SSI 软件实现 4.7 数据通信中的错误校验 4.7.1 校验和(CheckSum)与重要的串口通信实例 4.7.2 CRC 校验(全称:循环冗余码校验) 4.8 单片机串口向计算机串口发送 2 进制、16 进制、数值与字符串 第5章 SPI 通信 5.1 SPI 总线数据传输格式 5.1.1 接口定义 5.1.2 传输格式 5.2 SPI 接口相关寄存器 5.2.1 SPI 相关的特殊功能寄存器 5.2.2 SPI 接口引脚切换 5.3 SPI 接口运用举例 第6章 6.1 I2C 通信 I2C 总线数据传输格式6.1.1 各个位的传输要求 6.1.2 多字节传输格式 6.2 程序模块功能测试 6.2.1 硬件仿真观察 24C02 读写结果(R/C 时钟:22.1184MHz) 6.2.2 硬件仿真观察 24C32/64 读写结果(R/C 时钟:22.1184MHz) 6.3 第7章 7.1 24C02 运用实例(断电瞬间存储整数或浮点数) 单片机内部比较器与 DataFlash 存储器 STC15W 系列单片机内部比较器7.1.1 比较器结构图 7.1.2 寄存器说明 7.1.3 电路讲解与程序实例 7.2 DataFlash 存储器 7.2.1 DataFlash 操作有关的寄存器介绍 7.2.2 DataFlash 操作实例(断电瞬间存储数据) 第8章 8.1 8.2 8.3 第9章 可编程计数阵列 CCP/PCA/PWM 模块(可用作 DAC) PCA 模块总体结构图 PCA 模块的特殊功能寄存器 PCA 模块的工作模式与应用举例 模数转换器 ADC9.1 模数转换器 ADC 主要技术指标 9.2 使用单片机内部的 10 位 ADC 转换器 9.2.1、ADC 相关的特殊功能寄存器 9.2.2、实例代码-6- 9.3 9.4 9.5 第 10 章12 位 ADC 转换芯片 MCP3202-B 16 位 ADC 转换芯片 ADS 位 ADC 转换芯片 MCP3421A0T-E/CH 数模转换器 DAC10.1 TLC5615 数模转换电路与基本测试程序 10.2 TLC5615 产生锯齿波、正弦波、三角波 10.3 TLC5615 的高级运用(播放歌曲) 第 11 章 单片机实用小知识 11.1 复位 11.1.1 外部 RST 引脚复位 11.1.2 软件复位 11.1.3 内部低压检测复位 11.1.4 看门狗定时器复位 11.2 单片机的低功耗设计 11.2.1 相关寄存器说明 11.2.2 应用举例 11.3 单片机扩展 32K 外部数据存储器 .1 电路讲解 11.3.2 软件测试实例 第 12 章 常用单片机接口程序 12.1 数码管静态显示 12.2 数码管动态显示 12.3 独立键盘 12.4 矩阵键盘 第 13 章 1602 液晶 13.1 1602 液晶外形与电路图 13.2 1602 液晶运用举例 13.3 1602 液晶显示汉字与特殊符号 第 14 章 精密电压表\电流表\通用显示器\计数器制作 14.1 功能说明与电路原理分析 14.2 程序实例 14.2.1 通用显示器功能检测程序(外部程序) 14.2.2 计数器功能检测程序(外部程序) 14.2.3 模块程序 第 15 章 步进电机测试 15.1 步进电机特点 15.2 步进电机的 3 种励磁方式 15.3 步进电机驱动电路 15.4 步进电机驱动实例 15.5 步进电机专用驱动器介绍 第 16 章 频率检测-7- 16.1 频率检测的用途与频率定义 16.2 频率检测实例 第 17 章 DS1302 时钟芯片 17.1 DS1302 的 SPI 数据通信格式 17.2 程序实例 第 18 章 红外通信 18.1 红外通信电路与基本原理 18.2 红外接收软件实例 第 19 章 单总线 DS18B20 通信(长距离无线通信) 19.1 DS18B20 运用基础 19.1.1 单只 DS18B20 温度检测电路 19.1.2 DS18B20 通信时序 19.1.3 DS18B20 内部功能部件 ROM、RAM、E RAM、指令集 19.1.4 读取温度步骤 19.2 单只 DS18B20 的温度检测实例 19.3 多只 DS18B20 的温度检测 19.3.1 读取传感器代码实例 19.3.2 读取传感器温度实例 第 20 章 SD 卡与 znFAT 文件系统 20.1 认识 SD 卡与 SD 卡驱动程序 20.1.1 认识 SD 卡 20.1.2 电路讲解 20.1.3 通信时序与完整驱动程序说明 20.2 znFAT 文件系统 20.2.1 znFAT 的移植方法 20.2.2 znFAT 移植实例 第 21 章 MP3 播放器实验(znFAT 文件系统运用实例) 21.1 MP3 介绍与电路讲解 21.2 正弦测试 21.3 通过 SD 卡播放 MP3 文件 第 22 章 数字存储示波器技巧与逻辑分析仪的操作 22.1 测量直流电源开关机瞬间输出毛剌浪涌 22.2 测量稍纵即逝的红外发射信号 22.3 精确测量直流电源纹波 22.4 示波器带宽选用依据 22.5 逻辑分析仪快速入门 附录 1 参 考 ASCII 码表 文 献2-8- 第1章1.1 1.1.1 单片机简介 认识单片机单片机高效入门单片机全称是单片微型计算机,说计算机大家都知道它内部主要包含微处理器 CPU、硬盘、内存条等 部件,一个单片机内部也包含了微处理器内核、程序存储器、数据存储器等,单片机的内核相当于计算机 主板上的 CPU,单片机的程序存储器相当于计算机的硬盘,单片机的数据存储器相当于计算机的内存条, 另外,编写过计算机运用程序的人都知道,计算机是按程序命令一条条执行语句完成所需的功能,单片机 也是按程序命令一条条执行语句完成所需的功能,从这里可以看出,单片机与计算机实在是太相似了,这 就是可以把它称为计算机的原因,另外,单片机拥有的这么多的结构部件都是集成在单一的一块集成电路 芯片上的,加上体积微小,所以全称就是单片微型计算机,简称单片机。外观如图 1-1 所示。图 1-1 单片机常见外形图 单片机与普通集成电路的区别是:普通集成电路功能是固定死的,使用者无法更改,单片机的功能是可以 通过编写程序进行更改的。 事实上,由于单片机只是用在电子产品线路板上的一个集成电路芯片,完成一 些常用的电气检测与控制功能,把它称为微型计算机太过夸大其词,于是又有人把它改名称为微控制器, 英文名称:Micro Control Unit,缩写为 MCU,不管称为单片微型计算机还是微控制器或者 MCU,它本质上 始终是用在电子产品线路板上的一个集成电路芯片,没什么神奇之处。 1.1.2 单片机的用途单片机用途十分广泛,比如常见的家用电器洗衣机、空调、电磁炉等内部有单片机,现在的智能化仪 器仪表内都有单片机,工业生产上的数控机床有位移检测用的光栅尺,光栅尺连接的控制仪表内就有单片 机,作者设计过的用在全国各地的国家粮食储备库与中央粮食储备库的计算机测温系统除计算机外的核心 就是单片机,作者设计过的用在生产流水线检验家用热水器部件的检验设备和检验汽车部件的检验设备都 是都是以计算机和单片机为核心构成的检验设备。 现在这个时代的电子产品,普遍都在使用单片机,所以学好单片机是非常重要的。 1.1.3 学习的典型芯片与 C 语言介绍单片机种类较多,比较流行的有 51 单片机、AVR 单片机、PIC 单片机、MSP430 单片机、STM32 等,过 去比较流行的 51 单片机典型型号是 AT89C51 与 AT89S51, 现在已被功能更强大, 使用更方便的 STC 单片机 取代,STC 单片机对原有 51 内核进行了重大改进并增加了很多片内外设,第一代的 STC89 系列单片机性能 就显著超越了 AT89 系列,又经历了几代发展,现在 STC 已发展到了 15 系列,具有低功耗、低价位、高性-9- 能、使用方便等显著特点。STM32 是意法半导体公司使用 Cortex-M3 内核生产的 32 位单片机,运行速度更 快,功能更强大,性价比高,现在运用也比较广泛,至于 AVR 单片机、PIC 单片机、MSP430 单片机等由价 格高、供货渠道不稳定等多种因素,它们在市场的占有份额已经越来越小,所以学单片机重点要把 STC 和 STM32 学好,我这本书主讲 STC,把 STC 学精通后再学习 STM32 就很简单了,STC 单片机的例子几乎都可以 用到 STM32 上。 STC15 系列单片机又分为多个子系列,STC15W100 /STC15F100W 系列→STC15W201S 系列 →STC15W401AS 系列→STC15W404S 系列→STC15W1K16S 系列→STC15F2K60S2 系列→STC15W4K32S4 系列等, 它们的功能从简 单到高级依次增强,由于芯片具体型号众多,不可能每一个都去学,本书主讲功能最强的 STC15W4K32S4 系列中的 IAP15W4K58S4,它的功能最全,15 系列中的其它型号功能都比它少,价格也更便宜,表 1-1 列出 了 STC15 系列单片机典型型号与资源对比,IAP15W4K58S4 单片机兼容 STC15 系列其它型号单片机,在 IAP15W4K58S4 单片机上运行正常的程序不用任何修改就可以直接下载到同系列其它型号单片机上运行, 在 硬件上,IAP15W4K58S4 引脚排列也完全兼容相同封装的 15 系列其它型号,正因为如此,与本书配套的实 验板除了可以做 IAP15W4K58S4 相关的实验外,也可以完成 15 系列其它型号单片机的实验,综上所述,我 们只要学会了 IAP15W4K58S4,STC15 系列中其它型号芯片就都可以使用了。 表 1-1 STC15 系列单片机典型型号对比 型号 工作 电压 (V) Flas h 程 序存 储器 字节 数 据 存 储 器 SRAM 字节 定 时 器 PCA / PWM / CCP 6 通 道 带 死 区 控 制 PWM IAP15W4K58S4 (本身就是仿 真器) STC15W4K56S4 IAP15F2K61S2 (本身就是仿 真器) STC15F2K60S2 STC15W408S 4.55.5 2.55.5 表格说明: 1. 型号为 IAP 开头的单片机可以在程序运行过程中由程序修改或者擦除整个 FLASH 程序存储区, 让传统的 只读程序存储器变成了可读写程序存储器,程序运行过程中写入 FLASH 的数据与程序一样,具有掉电不丢 失的功能,表中 EEPROM 为 IAP 的表示 EEPROM 使用 FLASH 存储区剩余空间,型号不是 IAP 开头的单片机无 论程序如何操作都是无法更改 FLASH 程序存储区的, 使用 IAP 提高了程序的灵活性, 不使用 IAP 有利于 FLASH 存储空间程序的安全性。- 10 -串 口 数 量8通 道 10 位 ADC 转 换 器SP I 接 口比 较 器E E P R O M支 持 USB 直 接 下 载支 持 外 部 晶 振 M参 考 价 元2.55.5 2.55.5 4.55.558K4096T0T42 通 道 2 通 道 3 通 道 3 通 道 ―有4有主 从有I A P支 持 支 持 ―535 535 5355.956K 61KT0T4 T0T2有 ―4 2有 有主 从 主有 ―2 K I A P5.9 4.960K 8KT0T2 T0T2― ―2 1有 ―主 主 从― 有1 K 5 K― ―535 ―4.9 3.0 2. STC 单片机内部带有高精度 R/C 时钟,±1%温漂(-40℃~85℃),通常的运用如串口通信、红外通信、 18B20 通信类程序都是不需要外部晶振的,作为特殊运用,比如精密频率计需要外部晶振时(外部晶振频率 稳定度通常都高于 0.01%,初始误差可通过调整与晶振连接的电容容量进行微调),需要注意 15 系列的个 别型号(比如 IAP15W4K61S4)目前只能外接 24MHz 的晶振,否则芯片可能无法正常工作,IAP15W4K58S4、 IAP15F2K61S2、STC15F2K60S2 等都是可以使用外部 5-35MHz 晶振的。 学单片机除了要了解芯片内部功能模块外, 还要学习编程语言, 编程语言有汇编和 C 语言 2 种可供选择, 汇编语言学习其实比 C 语言要简单,只要熟悉一下单片机的汇编指令,找几个简单的例子练一练就大致学 会了,学习汇编语言还有个好处就是可以对单片机内部程序存储器与数据存储器部分的原理理解得比较清 楚,C 语言本身也简单,只是学习的内容比汇编语言要多,也就是说,学 C 语言难度要略大于汇编语言, 但是,汇编语言编写好的程序,别人是很难读懂的,就连自己编写的程序,隔上三五个月再看也是很难看 懂的,C 语言就不同了,C 语言编写的程序比汇编语言程序容易理解,并且具有较强的移植性,一种单片机 的代码可方便移植到另一种单片机上,更重要的一个问题,汇编语言编程水平不管高到哪里去,如果不精 通 C 语言的话,还是不行的,因此本书主讲 C 语言。 1.1.4 本书配套实验板及相关学习工具介绍本书配套了 2 个实验板,一个作为主实验板,外形如图 1-2 所示,可以完成流水灯、定时器/计数器、 串口通信、I2C 通信、SPI 通信、按键、数码管、LCD1602 液晶、A/D 转换、D/A 转换、红外接收、DS18B20 温度传感器、TFT 工业彩色串口触摸屏等实验,另一个作为辅助实验板可直接插接到主实验板上,用于完 成 SD 卡、MP3 播放器实验。使用配套实验板最大的好处是可以节省自己搭接实验电路的时间。图 1-2 主实验板外形图 SD 卡与 MP3 辅助实验板外形如图 1-3 所示。- 11 - 图 1-3 辅助实验板外形图 电路原理详细说明如下,熟悉电路图是编程与实验的重要基础,由于电路模块单元较多,可以在学习到 相应章节时再回来仔细分析电路。 1、 电源电路与 EEPROM 断电检测电路如图 1-4 所示, 图 1-4 有 2 路断电检测电路, 一路是通过二极管 1N4007 全波整流采样交流电,适用于各个型号的单片机,可靠性很高,可用于大量数据的断电瞬间存储,另 一路是电源 VCC 与 GND 间的电阻串联分压值送入比较器输入口 P5.5,这种方式硬件更加简单,但只能 用于内部带比较器的 STC15W 系列单片机。1N4007外置变压器1N40071300mA 电源开关 25V 470uF 1N40071N7GNDVinVout3+5V1K220V9V50V 0.1uF2LMV 470uF 0.1uFGND1NKT2 27 INLED2号单 片机51K(1%)10mS 10mS10mS10mS 10mS 10mSS8050 VCC 18 S8050 (P3.6) 51K P5.5 S8050 19 GND E C BE GND 20 B 21.5K(1%) GND IAP15W4K58S4C图 1-4 电源电路与 EEPROM 断电检测电路 2、双 CPU 电路如图 1-5 所示 本实验板采用双 CPU 电路,目的是要完成单片机与单片机之间高达 8MHz 的 SPI 数据通信实验,另外可 以将一个 CPU 的输出脉冲作为计数源送入另一 CPU 完成计数器实验, 采用多 CPU 方式还能够解决单片机 IO 口不足问题或两个高级中断谁也不能让谁的竞争问题。- 12 - 1号 单片 机计算 机2号 单片 机IAP15W4K58S 4( 直插 )计算 机IAP15W4K58S4(贴片 ) 34 S S-2 MOSI-2 MISO-2240Ω 240Ω 240Ω 240Ω+5VSS MOSI MISO SCLK11 12 13 14 18 21 22 RXD TXD USB_TTL转换 电路USB_TTL转换 电路 RXD TXD GND33 32 18 191K31 SCLK-2 14+5V240Ω+5VGND12 13 16 GND P1.7 P5.4GND 20 25 26 P3.4 P3.5LED跳线帽(P54-P34)跳线帽(P17-P35)240Ω图 1-5 双 CPU 电路 3、2 号单片机晶振与复位电路图 1-6 所示 STC15 系列单片机内部 R/C 时钟精度高达±1%(-40°~ +85°) ,内部具有高可靠复位电路,因此一般 情况下是不需要晶振与复位电路的,本实验板的 1 号单片机外部就完全没有这部分电路,为了做精确频率 检测实验,2 号单片机使用了外部 22.1184MHz 晶振,外部晶振频率稳定度通常都高于 0.01%,初始误差可 通过调整与晶振连接的电容容量进行微调,当然不是用示波器或频率计测量单片机晶振引脚频率后调整, 示波器或频率计的接入相当于在晶振引脚并接电容到地,所以测量得到的频率误差会增大,可通过软件设 置单片机在 P5.4 引脚输出主时钟,频率计测量这个位置得到的频率才是最真实的频率值。+5V30P 1K 22.1184MHz RESET GND测试点2号 单片 机IAP15W4K58S 4(直插 ) XTAL2 151 2 3A0 A1 A2 A3VCC WP SCL SDA 24C028 7 6 55.1K5.1K+5V30P 240ΩXTAL11641728 P3.7 VCC 18 29 P4.1 GND 20 2号 单片 机I2C 接口电路RSTIAP15W4K58S4图 1-6晶振与复位电路图 1-74、2 号单片机与 I2C 器件 24C02 连接电路如图 1-7 所示。 5、2 号单片机串口下载与与双串口实验电路如图 1-8 所示。- 13 - 2号 单片 机P3.1 (T x d)IA P15W 4K 58S422 10 21 9V CC_5V GNDP3.0 (Rx d) P1.1 (T x d2)P1.0 (Rx d2)US BGND 1 GND TXD 2T X DV cc R232 RT S16 15 14 13 12 11 10 9接口4 3 2 1B5819WRXD 34GND D+ DVCC100mAV CC_5V240ΩRX DC H 3 40 G0.01uFV 3 UD+ UDX I X ODT R DCD RI DSR CT S5 6 71K LEDC1 10uF 22P12MHz822P图 1-82 号单片机串口下载与与双串口实验电路6、2 号单片机数码管显示接口电路如图 1-9 所示 由于独立的 6 位一体数码管市场上很难购买,电路中采用的是 2 个完全相同的 3 位一体共阳型数码管。Q2'1 a f 2 3 ba f b g e d a f b gQ1' Q0'Q5'1 a f 2 3 bS8550a f b g e d a f b gQ6' Q7'+5V SK Q1' SK Q2' SK Q5' SK Q6' SK Q7' +5V 18 5.1K*3VCCa f b g e d c ha f b g e d c hc h e c d hc h e c d h5.1K Q0'e d h c gb+5V空e d h c gh d e+5V 620Ω*8空fag c15 1 2 3 4 5 6 7 16 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 10 SRCLR 74HC595 SER Q7 14 9 SRCLK RCLK OE Gnd 11 12 13 815 1 2 3 4 5 6 7 16 Q0 Q1 Q2 Q3 Q4 Q5 Q6 Q7 10 SRCLR 74HC595 SER Q7 14 9 SRCLK RCLK OE Gnd 11 12 13 8IAP15W4K58S4P4.5 P4.4 P4.2 GND 40 31 30 20CLK DATCNT(控制)图 1-9 数码管显示接口电路 7、2 号单片机独立按键与外部显示器接口电路、矩阵按键电路等如图 1-10 所示。 与按键连接的单片机 I/O 口都串联了 240Ω的电阻,用于防止软件设置错误(比如误设为强推挽)时单 片机 I/O 口输出电流保护, 外部显示器接口是通过 2 根信号线连接 “电压表/电流表/计数器/显示器” 模块, “电压表/电流表/计数器/显示器”模块的电路图将在第 14 章单独介绍,P3.4 与 P3.5 还用作计数器与频 率计信号输入口,输入脉冲信号由 1 号单片机的 P5.4 与 P1.7 提供。- 14 - +5V 5.1K*4 2号单 片机 26 P3.5 25 IAP15W4K58S4 24P3.4 P3.3 240Ω 240Ω 240Ω 240Ω5.1K*4K4 K3 K2 K1+5V2号单 片机P2.7240Ω 240Ω 240Ω 240Ω 240Ω 240Ω 240Ω 240Ω 1 列 0 4 8 C 2 列 1 5 9 D 3 列 2 6 A E 4 列 3 7 B F 1 行 2 行 3 行 4 行输出P2.6 P2.5 P2.4 P2.3 P2.223 P3.2 +5V1K LEDIAP15W4K58S4+5VCLK DAT GND外部 显示 器接 口1号单 片机IAP15W4K58S4 P5.4跳 线帽 (P54-P34)240Ω240Ω13 12P1.7输入 P2.1P2.0跳 线帽 (P17-P35)图 1-10独立按键与外部显示器接口电路(图左) 、矩阵按键电路(图右)1号单片机VCC_5V GND8、2 号单片机 LED 指示灯电路图 1-11 所示。+5V LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7 1K 1K 1K 1K 1K 1K 1K 1K1 2 3 4 5 6 7 82号单片机IAP15W4K58S419 20 18 21P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7USB接口4 3 2 1P3.1 (Txd)P3.2P3.0 P3.3(Rxd) R340 T340 240ΩGND 1 GND TXD 2TXD RXDVcc R232 RTS16 15 14 13 12 11 10 9B5819W RXD 3 4图 1-11 LED 指示灯电路9、2 号单片机 10 位 ADC 转换电路如图 1-13 所示,当电位器调到两端极限+5V 或 0V 时,如果程序中将 P1.1(ADC1)设为输出,将导致 I/O 口短路,串联 240Ω电阻将把短路电流限制到单片机 IO 口允许的 20mA 范围内,从而保护 IO 口不损坏。IAP15W4K58S4GND D+ DVCC100mAVCC_5VCH340G0.01uFV3 UD+ UDXI XODTR DCD RI DSR CTS5 6 71KC1 10uF 22P12MHz822P图 1-121 号单片机串口下载与模拟串口实验电路+5V10K SW 0.1uF18 10 240ΩVCC P1.1(ADC1) GND2号单片机IAP15W4K58S4(直插 )0V20图 1-132 号单片机 10 位 ADC 转换电路10、1 号单片机串口下载与模拟串口实验电路如图 1-12 所示。 11、1 号单片机与 LCD1602 液晶显示器连接电路如图 1-14 所示,LCD1602 模块使用插针的方式直接插接到- 15 - 主实验板对应的插座上。+5V 1号 单 片 机VCC P0.0 14 40 3 8 7 6可用电位器代替10K*87 14 4 5 6 3 D B0 D B7 RS R/W E V L BLK BLA VCC VSS BLK 2 1 16GND12、1 号单片机与时钟芯片 DS1302 连接电路如图 1-15 所示。+5V0.1uF13、1 号单片机与 D/A 输出芯片 TLC5615 连接电路如图 1-16 所示1号 单 片 机14、1 号单片机温度检测与 LED 指示灯电路如图 1-17 所示+5V18B201 2 3IAP15W4K5 8S4P0.7 P1.3 P1.2 P4.716021610Ω/1WGND680Ω15背光耗电大,一般不接图 1-141 号单片机与 LCD1602 液晶显示器连接电路1N41481K100uF(电容代替备用电池)10K*318 VCC1 2 332.768KH ZVCC2 X1 X2 GNDVCC1 SCLK I/O RST8 7 6 537IA P15W4K 58S4D S130 2P2.7438 P4.5 39 P4.6图 1-151 号单片机与时钟芯片 DS1302 连接电路P3.4 22 P4.0 17 15 P5.51 2 3 4DIN SCLK CS DOUTVCC SCLK REFIN AGND8 7 6 52.498V 实 测 输 出 :模 拟 输 出1 2 3 4VCC OUT GND空空空 空 空8 7 6 5IAP15W4K58S4MC14030.1uF 10K 680ΩTLC5615GND20100Ω100uF 10K耳机单 声 道 输 出图 1-16 1 号单片机与 D/A 芯片 TLC5615 连接电路1号 单 片 机141K LED指 示 灯 16 GND- 16 -5.1K 10VCC IAP 15W4K 58S4 P 3.5 P 1.5 图 1-17 温度检测与 LED 指示灯电路 15、1 号单片机红外接收电路如图 1-18 所示图 1-18 红外接收电路与红外接收头引脚定义 16、 由 1 号单片机驱动的 SD 卡电路原理如图 1-19 所示, 它与 MP3 部分的电路共同构成一个独立的电路板, 使用插针方式直接插接到主实验板上的 LCD1602 液晶插座位置即可, 由于单片机使用的是 5V 电压供电, IO 口输出电压也接近 5V,单片机驱动 3.3V 的 SD 卡,在程序中应将对应的单片机 IO 口设置为开漏输出方式。1K20K 5.1K 5.1K 5.1KAMS +5VGNDLED11 10 8 7WP(写 ) 保 护 NCD (插 ) 入 检 测 NC(不 ) 用 DO 12NCD NC9 8 7 6 5 4 3.3VGND GND4 3.3V0V 3.3V +5V卡座 Micro SDDO VS S CLK V CC1236 5 3.3V 4 3 2 1 9 240Ω 240ΩCLK VCC VS S DI CS NC(不 ) 用SD 卡座VS SPAD 1PAD 21310uF GND100uFDI CS NC3 2 1 240Ω 240Ω(P0.6) CLK (P0.7) DO (P0.5) DI (P0.4) CS图 1-19 1 号单片机驱动的 SD 卡电路 17、由 1 号单片机驱动的 MP3 音频播放器模块电路原理如图 1-20 和图 1-21 所示。2.5V5.1K*3外 部 接 口 240Ω*7P03 P02 P01 P00 P47 P12 P13 V CC_5.0 GND 1 2 3 4 5 6 7 8 9 X REST DREQ X DCS X CS SCLK SI SO内部 电路3.3V电源电路2.5V图 1-20 主实验板与 VS1003 模块接口- 17 - 10nFAVCC_3.3100uF/10V 100uF/10VAVCC_3.3LineIN 1K1uF470R 1uF48 LINEINOUTAGND10uFVCC_3.31K10uF 1uF147464544434241403938AVDD2AVDD1AGND2AGND1RIGHTAVDD0LINEIN AGND3 LEFTAGND0RCAPGBUF37MIC 10K 1K 1K 1K 100K100PDGNDMICP MICN36 35 34 33 32 31 30 29 28 27 26 25 VCC_3.31uF2XRESET 3 4 5 VCC_3.3 VCC_2.5 6 7 8100K 100KVCC_2.5 SO SI SCLKXRESET DGND0 CVDD0 IO VDD0 CVDD1 DREQ GPIO2 / DCLK GPIO3 / SDATA1 IOVDD1 IOVDD2 XDCS / BSYNC DGND1 DGND2 DGND3 DGND4 XTALOGPIO1 GPIO0 / SPIBO OT TESTVS1003BCVDD3 SO SI SCLK TX XCS CVDD2LEDDREQAGND100K 100K9 10 11 121314151617181920212223XDCSVCC_3.30V100uFAVC C_3.30V1LED10uF0.1uF图 1-21除开发板外还有其它几个常用工具:数字万用表、逻辑分析仪、数字存储示波器与计算机,数字万用 如果没有现成的,建议购买“胜利 VC86E”或“胜利 VC97”,VC86E 直流电压精度比 VC97 更高,在做 A/D 转换实验时需要使用,VC97 的频率检测功能比 VC86E 更稳定,方便测量单片机输出信号频率,逻辑分析仪 特别重要,初学时购买 24MHZ 采样率的就可以了,价格 100 元左右,外观与使用说明在本书最后章节有详 细介绍,要想彻底明白书上的串口通信、SPI 通信、I2C 通信,没这个东西几乎是不可能的,不过也要提示 一下,24MHZ 采样率的逻辑分析仪适合测量的信号频率在 1MHz 以内,信号频率过高的话,测出的波形将与 实际不符,数字存储示波器建议选用 100M 带宽、4 通道并具有单次捕获功能的泰克示波器,示波器价格较 高,有最好,没有也不影响本书实验,最后就是计算机,计算机配置要求并不高,但最好选用主板带 9 针 RS232 串口的,这样会省去很多麻烦。 1.2 1.2.1 点亮 1 个发光二极管 单片机型号命名规则STC15 系列典型单片机型号命名规则如图 1-22 所示。OUT22 133P 1M 12.288M 33P10uF0.1uFAGND模拟地 数字地MP3 音频播放器模块内部电路VCC_2.5VCC_2.5XCSININ1K3VCC_3.3324VCC_5.01N4007AMSAMSXTALIRXVCO100KOUT- 18 - 图 1-22 STC15 系列典型单片机型号命名规则 1.2.2 单片机引脚功能说明 1、 封装图 IAP15W4K58S4 单片机有多种封装形式,最常用的封装如图 1-23、图 1-24、图 1-25。图 1-23IAP15W4K58S4 单片机 LQFP-44 封装的引脚图- 19 - 图 1-24IAP15W4K58S4 单片机 LQFP64L/LQFP64S 封装的引脚图- 20 - 图 1-25 2、引脚功能说明IAP15W4K58S4 单片机 PDIP-40 封装的引脚图先说 PDIP40 封装引脚,除 18 与 20 脚用作电源引脚外,默认情况下,其余所有引脚都是数字输入输出 I/O 口,P4 口~P7 口的使用如同使用常规的 P0、P1、P2、P3 一样,并且都可以按位操作,I/O 口作为输入 使用时,2.2V 以上时单片机认定为高电平,0.8V 以下时单片机认定为低电平,PDIP40 封装各引脚功能详 细说明如下。 1~8 脚 P0 口,包括 P0.0~P0.7。 P0.0 还复用为 RxD3(串口 3 数据接收端) 。P0.1 还复用为 TxD3(串口 3 数据发送端) 。 P0.2 还复用为 RxD4(串口 4 数据接收端) 。P0.3 还复用为 TxD4(串口 4 数据发送端) 。 P0.4 还复用为 T3CLKO(定时器/计数器 3 的时钟输出) 。 P0.5 还复用为 T3(定时器/计数器 3 的外部输入)与 PWMFLT_2(PWM 异常停机控制管脚) 。 P0.6 还复用为 T4CLKO(定时器/计数器 4 的时钟输出)与 PWM7_2(脉宽调制输出通道 7) 。 P0.7 还复用为 T4(定时器/计数器 4 的外部输入)与 PWM6_2(脉宽调制输出通道 6) 。 在特殊情况下需要扩展外部数据存储器时,P0 口还可分时用作数据总线(D0~D7)与 16 位地址总线的 低 8 位地址,P0 口到底是用作 I/O 口还是低 8 位数据/地址是不需要单独设置的,程序中如果是 I/O 操 作命令,它就是 I/O 口,程序中如果是在执行访问外部数据存储器的命令,它就是 8 位数据/地址。 9~16 脚 P1 口,包括 P1.0~P1.7。同时复用为 8 通道模数转换器 ADC 输入口,STC15 系列 IO 口用作模数 转换 ADC 时不需要对 IO 口输出状态作额外配置。 P1.0 还复用为 CCP1(捕获/脉冲输出/脉宽调制通道 1)与 RxD2(串口 2 数据接收端) 。 P1.1 还复用为 CCP0(捕获/脉冲输出/脉宽调制通道 0)与 TxD2(串口 2 数据发送端) 。 P1.2 还复用为 ECI(可编程计数阵列定时器的外部时钟输入)与 SS(单片机用作 SPI 从机时的从机片 选输入控制端) ,P1.2 还复用为 CMPO(比较器的比较结果输出端) 。 P1.3 还复用为 MOSI(SPI 主机输出从机输入) 。 P1.4 还复用为 MISO(SPI 主机输入从机输出) 。 P1.5 还复用为 SCLK(SPI 主机时钟输出或从机时钟输入) 。 P1.6 与 P1.7 复用为外部晶振输入端口,若程序下载时勾选“选择使用内部 R/C 时钟”则 P1.6 与 P1.7 设置为普通 IO 口,不勾选“选择使用内部 R/C 时钟”则 P1.6 与 P1.7 设置为外部晶振输入端口,程序 下载完毕后给单片机断电,重新上电后设置生效,P1.6 还复用为 RxD_3(串口 1 接收端备用切换引脚) , P1.6 还复用为 MCLKO_2(主时钟输出备用切换引脚) ,P1.6 还复用为 PWM6(脉宽调制输出通道 6) ,P1.7 还复用为 TxD_3(串口 1 发送端备用切换引脚) ,P1.7 还复用为 PWM7(脉宽调制输出通道 7) 。 17 脚 P5.4 口,若要用作外部复位引脚 RST,需在程序下载软件中设置,外部复位与内部的 MAX810 专用 复位电路是逻辑或的关系,P5.4 还复用为 MCLKO,即可编程主时钟输出:无输出、输出主时钟、输出 0.5 倍主时钟、 、输出 0.25 倍主时钟,由于单片机所有 I/O 口对外允许最高输出频率为 13.5MHz,所以 这里最高输出也不能超过 13.5MHz,主时钟指外部晶体振器频率或内部 R/C 时钟频率,P5.4 还复用为 SS_3(SPI 从机时的从机片选输入端备用切换引脚)与 CMP-(比较器负极输入端)。 18 脚 电源正,STC15W 系列使用 2.5~5.5V,STC15F 系列使用+4.5~5.5V,STC15L 系列使用 2.4~3.6V。 19 脚 P5.5,复用为 CMP+(比较器正极输入端)。 20 脚 GND。 21~28 脚 P3 口,包括 P3.0~P3.7。 P3.0 复用为 RxD(串口 1 数据接收端) 、INT4(外中断 4,只能下降沿中断) 、T2CLKO(T2 时钟输出) 。 P3.1 复用为 TxD(串口 1 数据发送端) 、T2(定时器/计数器 T2 外部计数脉冲输入) 。- 21 - P3.2 复用为 INT0(外部中断 0 输入,既可上升沿中断也可下降沿中断) 。 P3.3 复用为 INT1(外部中断 1 输入,既可上升沿中断也可下降沿中断) 。 P3.4 复用为 T0(定时器/计数器 T0 外部计数脉冲输入) 、T1CLKO(T1 时钟输出) 、ECI_2(可编程计数 阵列定时器的外部时钟输入备用切换引脚) 。 P3.5 复用为 T1(定时器/计数器 T1 外部计数脉冲输入) 、T0CLKO(T0 时钟输出) 、CCP0_2(捕获/脉冲 输出/脉宽调制通道 0 备用切换引脚) 。 P3.6 复用为 INT2(外部中断 2 输入,只能下降沿中断) 、RxD_2(串口 1 数据接收端备用切换引脚) 、 CCP1_2(捕获/脉冲输出/脉宽调制通道 1 备用切换引脚) 。 P3.7 复用为 INT3(外部中断 3 输入,只能下降沿中断) 、TxD_2(串口 1 数据发送端备用切换引脚) 、 PWM2(脉宽调制输出通道 2) 。 29 脚 P4.1,复用为 MISO_3(SPI 主机输入从机输出备用切换引脚) 。 30 脚 P4.2,复用为/WR(扩展片外数据存储器时的写控制端)与 PWM5_2(脉宽调制输出通道 5) 。 31 脚 P4.4,复用为/RD(扩展片外数据存储器时的读控制端)与 PWM4_2(脉宽调制输出通道 4) 。 32~39 脚 P2 口,包括 P2.0~P2.7,在扩展外部数据存储器时作地址总线的高 8 位输出。 P2.0 复用为 RSTOUT_LOW 功能,可通过程序下载软件设置上电复位后输出高电平还是低电平。 P2.1 复用为 SCLK_2(SPI 时钟备用切换引脚)与 PWM3(脉宽调制输出通道 3)。 P2.2 复用为 MISO_2(SPI 主机输入从机输出备用切换引脚)与 PWM4(脉宽调制输出通道 4)。 P2.3 复用为 MOSI_2(SPI 主机输出从机输入备用切换引脚)与 PWM5(脉宽调制输出通道 5)。 P2.4 复用为 ECI_3(可编程计数阵列定时器的外部时钟输入备用切换引脚) 、SS_2(SPI 从机时的从机 片选输入端备用切换引脚) 、PWMFLT(PWM 异常停机控制管脚) 。 P2.5 复用为 CCP0_3(捕获/脉冲输出/脉宽调制通道 0 备用切换引脚) 。 P2.6 复用为 CCP1_3(捕获/脉冲输出/脉宽调制通道 1 备用切换引脚) 。 P2.7 复用为 PWM2_2(脉宽调制输出通道 2) 。 40 脚 P4.5,复用为 ALE,在扩展外部数据存储器时利用此引脚锁存低 8 位地址,使 P0 口分时作地址总线 低 8 位和 8 位数据总线,P2 口作地址总线高 8 位。P4.5 还复用为 PWM3_2(脉宽调制输出通道 3) 。 LQFP44 贴片封装比 PDIP40 插件封装多 P4.0、P4.3、P4.6、P4.7 引脚,单独说明如下。 17 脚,P4.0 复用为 MOSI_3(SPI 主机输出从机输入备用切换引脚) 。 28 脚,P4.3 复用为 SCLK_3(SPI 时钟备用切换引脚) 。 39 脚,P4.6 复用为 RxD2_2(串口 2 数据接收端备用切换引脚) 。 6 脚,P4.7 复用为 TxD2_2(串口 2 数据发送端备用切换引脚) 。 LQFP64L/LQFP64S 封装比 LQFP44 封装增加的并且有复用功能的引脚说明如下。 32 脚,P5.0 复用为 RxD3_2(串口 3 数据接收端备用切换引脚) 。 33 脚,P5.1 复用为 TxD3_2(串口 3 数据发送端备用切换引脚) 。 64 脚,P5.2 复用为 RxD4_2(串口 4 数据接收端备用切换引脚) 。 1 脚,P5.3 复用为 TxD4_2(串口 4 数据发送端备用切换引脚) 。 3、I/O 口工作模式 IAP15W4K58S4 单片机所有 I/O 口都可由软件配置成 4 种工作模式之一:准双向口(标准 8051 单片机输 出模式) 、推挽输出、仅为输入(高阻)与开漏输出。每个口的工作模式由 2 个控制寄存器(PnM1、PnM0) 中的相应位控制,其中 n = 0、1、2、3、4、5、6、7,例如 P0M1 和 P0M0 用于设定 P0 口,其中 P0M1.0 和 P0M0.0 用于设置 P0.0,P0M1.7 和 P0M0.7 用于设置 P0.7,依次类推,设置关系如表 1-2 所示。STC15 系列 中的 STC15W4K32S4 系列芯片,上电后所有与死区控制专用 PWM 相关的 IO 口均为高阻态,需将这些口设置为- 22 - 准双向口或强推挽模式方可正常使用,相关 IO: P0.6/P0.7,P1.6/P1.7,P2.1/P2.2/P2.3/P2.7, P3.7, P4.2/P4.4/P4.5,其余 IO 口上电复位后都是 200uA 的弱上拉输出状态,可直接作输出口使用。 表 1-2 PnM1[7~0] 0 0 1 1 PnM0[7~0] 0 1 0 1 I/O 口工作模式 I/O 口工作模式 准双向口(标准 8051 单片机输出模式),灌电流可达 20mA,拉电流典型 值为 200uA,由于制造误差,实际为 150~270 uA。 推挽输出,强上拉输出,可达 20 mA,外加限流电阻,尽量少用。 仅为输入(高阻) 开漏,内部上拉电阻断开,要外接上拉电阻才可以输出高电平。例如,若设置 P1.7 为开漏,P1.6 为强推挽输出,P1.5 为高阻输入,P1.4、P1.3、P1.2、P1.1 和 P1.0 为 弱上拉,则可使用下面的代码进行设置。 P1M1 = 0xa0; P1M0 = 0xc0; void port_mode() { P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00; P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00; } 在使用单片机 I/O 口作灌电流输入或拉电流输出时,由于内部无电流限制功能,外部电路设计上一定要限 制进出 I/O 口的电流不要超过 20 mA, 另外, 虽然 IAP15W4K58S4 单片机所有 I/O 口驱动能力都能达到 20 mA, 但整个芯片的最大工作电流不要超过 120 mA,电流较大时可使用 74HC245、ULN2003 或三极管进行驱动。 1.2.3 制作一个最简单的单片机实验电路 // B // B // 端口模式为了所有 IO 口都方便直接使用,可将所有 IO 口都配置为准双向口,函数代码如下。这个实验电路很简单,但特别重要,即使你已经有了实验板,也建议你手工制作这个硬件电路,这样 你才能体会到成功的喜悦,电路原理如图 1-26 所示。LED1 R1 1K共 8路 单 片机 串口 ( 母 )1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20P0.0 P0.1 P0.2 P0.3 P0.4 P0.5 P0.6 P0.7 P1.0(ADC0) P1.1(ADC1) P1.2(ADC2) P1.3(ADC3) P1.4(ADC4) P1.5(ADC5) P1.6(ADC6) P1.7(ADC7) P5.4 VCC P5.5 GND P4.5 P2.7 P2.6 P2.5 P2.4 P2.3 P2.2 P2.1 P2.0 P4.4 P4.2 P4.1 P3.7 P3.6 (T1)P3.5 (T0)P3.4 (INT1)P3.3 (INT0)P3.2 (TXD)P3.1 (RXD)P3.0R8 LED8 1K0.1uF 0.1uF 1 2 3 4 5 6 7 80.1uFGND0.1uFC1+ Vcc V+ Gnd C1T1OUT C2+ R1IN C2R1OUT VT1IN T2OUT T2IN R2IN R2OUT (或 MA X232)S P3232GND0.1uFGND图 1-26最简单的单片机实验电路电路图左边需要输入 5V 直流电源, 电源电压允许范围 3.0V-5.5V (单片机电压范围 2.5V―5.5V, SP3232EEN 电压范围 3V―5.5V) ,单片机 1 至 8 脚接 8 路发光二极管用于观察单片机程序运行结果,如果没有 5V 直流- 23 -5GND32+5V40 39 38 37 36 35 34 33 32 31 30 29 28 27 26 25 24 23 22 21IAP15W4K58S40.1uF+5V16 15 14 13 12 11 10 9 电源,也可按图 1-27 制作,或者用 3 只 1.5V 的干电池串联成近似的 5V 电源。1N7 S1 T1220VU1 LM78051 3 2 LM 7805+5VD1 9VD2470uF/50V470uF/50V常闭开关C1C21 2 3出 输 入 GND 输D3 1N4007D4 1N4007GND图 1-275V 直流稳压电源检查电路制作无误后,将单片机串口母头插接到计算机 9 针串口公头上,RS232 串口公头与母头实物如图 图 1-28 所示,实物上的每一个引脚都是有编号的。图 1-28 1.2.4计算机串口公接头与单片机串口母接头使用 Keil μVsion3 环境编写最简单的程序1、 安装 Keil 软件 建议安装 Keil C51 V8.18,此版本功能齐全,使用稳定,如图 1-29 所示。图 1-29Keil C51 V8.18 安装图标先在 C 盘新建一个文件夹并命名为“KEIL_818”,把安装程序路径修改为这个路径,安装过程非常简单, 不需要输入系列号,在如图 1-30 所示界面的 “First Name:”和 “E-mail:”后面输入任意数字或字符 即可,然后 Next 按钮就会变为可用状态,后面过程就不用再介绍了。图 1-30用户名与邮箱对话框如果单片机需要处理中文数据,比如单片机串口需要向计算机串口发送汉字或单片机系统使用汉字显 示屏或彩色显示屏,Keil 会过滤 0xfd 字符,使得部分汉字显示错误或出现乱码,这是 Keil 本身的一个错- 24 - 误,最简单的解决办法是使用汉字补丁软件,将汉字补丁软件 cckeilv802.exe 放到你的 keil818\c51\bin 目录里,运行一下这个程序就可以了,如图 1-31 所示,支持 keil_8.02,keil_8.18,其它版本没做过测试。图 1-31 2、输入代码并编译当前工程安装汉字补丁程序在电脑某个位置新建一个文件夹并命名为“点亮一个发光二极管” ,你也可随意取个名字,然后打开本 书配套资源的任意一个例程,找到 STC15W4K.H 文件并复制到“点亮一个发光二极管”文件夹中,然后如图 1-32 所示,双击桌面“Keil μVision3”图标进入 Keil 软件。图 1-32 双击进入 Keil 软件 刚进入 Keil 软件会打开一个 Keil 自带的文件,我们是不需要的,接着执行菜单 Project → Close Project 关闭原有工程,然后执行菜单 Project →New Project,如图 1-33 所示。图 1-33 新建工程 弹出工程文件存放路径对话框,如图 1-34 所示,选择我们新建的文件夹“点亮一个发光二极管” ,然 后输入工程名,比如“led_light”, 工程名最好是使用英文或汉语拼音,然后点“保存”按钮,不用管扩 展名,自动进入下一步。图 1-34 输入工程名 如图 1-35 所示, 在窗口左边选择 Atmel 公司 AT89C52 后点 “OK” 确定, 弹出图 1-36 对话框, 选择 “否” 。- 25 - 1-35 选择芯片型号图 1-36加载启动文件如图 1-37 所示,单击新建文件图标新建一个空白文件,然后点保存图标存盘。图 1-37新建文件如图 1-38 所示, 输入文件名 “led_light.C” , 注意后缀名为.C, 若是使用汇编语言编程, 后缀名为.ASM, 后缀名不用区分大小写,然后点“保存”按钮。图 1-38 'Source Group1’。输入文件名如图 1-39 所示,单击选中工程窗口 Target 1 下一层的 Source Group 1,右键选择 Add File to Group- 26 - 图 1-39添加文件到工程如图 1-40 所示,选择前面建立的” led_light.C”, 然后点“Add”按钮,再点”Close”按钮,若多 点了“Add”没关系,英文提示直接确定后再”Close”就行了,出现如图 1-41 所示的代码编辑窗口。图 1-40 选择 C 文件图 1-41 击设置工程的图标。代码编辑窗口如图 1-42 所示,在空白的文本编辑窗口输入代码(// 后面的注释可以不输入) ,然后保存,保存后点图 1-42 输入代码后的文本编辑窗口 进入设置工程窗口如图 1-43 所示,勾选 Create HEXFile,目的是得到最终下载到单片机中去的的 HEX 目- 27 - 标文件。图 1-43 创建 HEX 文件 如图 1-44 所示,编译当前工程,编译提示“工程名”―0 Error,0―Warning 就表示编译成功,data=9 表示程序占用内部数据存储器的大小为 9 个字节, IAP15W4K58S4 允许最大值为 256,xdata 表示程序占用外 部数据存储器的大小,IAP15W4K58S4 允许最大值为 3840,特殊情况下通过硬件扩展允许最大值为 65536, code 是代码占用的程序存储器 Flash 空间, IAP15W4K58S4 允许最大值为 58×。 若 data 超出 256, 编译结果会有错误提示, 若 xdata 超出 3840,不会出现错误提示,但会导致程序下载到单片机后出现运行 功能错误,code 超出 59392 在程序下载时下载软件会有提示。 图 1-44 画红圈前面一个按键 build target 用于编译当前 C 文件, 画红圈的 rebuild all target files 用于编译工程中所有 C 文件,对于单文件程序,这两个都可编译文件,也没什么区别,当你编写大型多文 件程序时,如果只修改了当前一个文件而其它文件并没有被修改,此时是不需要重新编译所有文件的,这 样你用前一个按钮时,就只对当前修改过的文件进行编译,这样可以节省编译时间,如果修改过多个文件, 就只能用第 2 个按钮,对所有文件全部重新编译一次。图 1-44编译文件1.2.5 ISP 下载程序到单片机(将电脑上的目标代码“灌入”单片机中运行)- 28 - 双击 STC 系列单片机程序下载软件图标进入程序下载界面,如图 1-45 所示。首先需要选择单片机型号与计算机串口号, “打开程序文件”用于查找工程编译时生成的 HEX 文件,IRC 时钟频率最常 用的就是 11.0592MHz, “当目标文件变化时自动装载并发送下载命令”一般都需要选中方便调试程序, 然后单击“下载/编程” 。图 1-45 程序下载 出现图 1-46 所示界面后,给实验板上电,或是断一下电再上电,上电瞬间程序就开始向芯片下载了,下载 完成后的界面如图 1-47 所示,需要注意的是:一定是先点“下载/编程” ” ,后给单片机电路板上电,本实 验下载成功后应该能看到电路板上单片机 1 脚连接的发光二极管被点亮了。图 1-46 下载软件等待单片机上电图 1-47 1.2.6 程序解释下载成功- 29 - 例 1.1 让接在 IAP15W4K58S4 的 P0.0 引脚发光二极管发光。完整代码如下: #include &STC15W4K.H& sbit P0_0 = P0^0; void main () { P0_0=0; } // 点亮 LED // 实验证明:程序执行到这后面又执行 P0_0=0。 include 后面的双引号&&表示让编译软件先到当前 C 文件所在目录中查找被包含的文件,若没找到则 到 Keil\C51\INC 目录查找被包含文件,若使用尖括号 &&(电脑键盘上的小于大于符)则表示先到 Kei\C51\INC 目录查找被包含文件,若没找到再到当前 C 文件所在目录中查找被包含的文件,若使用 KEIL 自带的库函数对应的头文件(*.H 文件) ,则应该使用尖括号 &&,自己编写的头文件文件一般是放到当前 C 文件所在目录,这就应该使用双引号&&,这样可减少程序编译时搜索文件的时间,#include &STC15W4K.H& 语句称为文件包含,相当于把被引用的文件中的所有内容复制一份到当前引用的位置,从表面上看,包含 就是一行代码代替一大堆代码, 在工程窗口展开 STC15W4K.H 可以看到一个内容较多的文件, 我们先看下面 8 行代码。 sfr P0 sfr P1 sfr P2 sfr P3 sfr P4 sfr P5 sfr P6 sfr P7 = 0x80; = 0x90; = 0xA0; = 0xB0; = 0xC0; = 0xC8; = 0xE8; = 0xF8; // 声明单片机 P0 口所在地址为 0x80, // 声明单片机 P1 口所在地址为 0x90 // 声明单片机 P2 口所在地址为 0xA0 // 声明单片机 P3 口所在地址为 0xB0 // 声明单片机 P4 口所在地址为 0xC0 // 声明单片机 P5 口所在地址为 0xC8 // 声明单片机 P6 口所在地址为 0xE8 // 声明单片机 P7 口所在地址为 0xF8 // include 称为文件包含命令,后面双引号中内容称为头文件 // sbit 是位定义,& STC15W4K.H &中有 sfr P0 = 0X80 字节定义语句1、解释 #include &STC15W4K.H&P0、P1、P2、P3、P4、P5、P6、P7 是单片机的 8 组 I/O 口,如图 1-24 所示,但是在 C 语言中,P0、P1、 P2、P3 、P4、P5、P6、P7 只能被看成符号,要想让这个符号与单片机硬件产生联系,就得使用上面格式 的代码了,上面 8 条语句就是将单片机端口符号 P0、P1、P2、P3、P4、P5、P6、P7 与单片机内部硬件地址 联系起来,程序运行时遇到这 8 个符号就就去操作符号对应的硬件地址。注意 sfr 不是标准 C 语言的关键 字,而是 KEIL C 编译器为了能够直接访问单片机内部的特殊功能寄存器提供的一个关键字,并且此关键字 只能用于芯片内部特殊功能寄存器声明,语法格式: sfr 符号 = 地址值; 符号一般使用特殊功能寄存器的名字,地址值是特殊功能寄存器的硬件地址。 如果单片机的某些功能模块在这个文件中找不到定义, 就可以根据芯片手册找到功能模块对应的硬件地址, 然后使用这个方法自己添加,添加完成后在代码中就可随心所欲操作增加的模块了,自己添加的模块与原 有头文件中已有的模块在使用上效果上是完全一样的。 2、解释 sbit P0_0 = P0^0; 同样的道理,此语句将符号 P0_0 与 P0 口的第 0 位 P0.0 建立连接关系,如果我们同时操作一组 I/O 的所有硬件引脚,我们使用 sfr 定义的符号 P0、P1、P2 等就可以了,但如果只想控制 8 个硬件引脚其中的 任意一个,我们就得使用这个命令了,此命令称为特殊功能位声明,最常用的格式: sbit 位变量名 = SFR 名称^变量位地址值; sbit 用于定义单字节(一个字节含 8 个位)可位寻址对象的某位, “单字节可位寻址对象”包括可位寻址 特殊功能寄存器(比如 P0、P1、P2 等)和 RAM 中可位寻址区的 16 个字节。P0_0 是我们自己确定的符号,- 30 - 你也可以写成 P00 或其它符号,只要方便看出是指 P0 口的第 0 位就可以了,P0^0 的 P0 是 sfr 已定义好的 符号,表示 P0 口,^是电脑键盘数字 6 那个键对应的符号,是异或运算符,最后的 0 表示 P0 口的第 0 位。 3、解释 void main () 每一个 C 语言程序有且只有这么一个主函数,函数后面一定有一对大括号“{}” ,在大括号里书写其它 程序。 4、解释 P0_0=0; 让 PO 口的 0 位输出低电平, 因为硬件上是发光二极管正端接的+5V, 负端通过 1KΩ电阻连接单片机 P0_0 口,所以这句命令就可点亮二极管,点亮之后程序又如何执行呢?实际上,这个程序是有问题的,但 C 编 译器及时发现了这个错误,为了不让单片机死机,让单片机执行了一条复位命令,复位后再次执行语句 P0_0=0; 如此往复循环,所以我们看到 P0_0 连接的二极管一直是亮着的,严格的程序应该是这样的: void main () { P0_0=0; while(1); } 1.3 1.3.1 Keil 仿真 软件仿真(标准 8051 方式仿真,不能仿真单片机新增功能) // 点亮 LED // 程序停在这里不再向下运行,也可用 for (;;);代替,功能相同。1、输入代码,先在 keil 文本编辑窗口输入例 1.2 所示的代码。 例 1.2 让接在 IAP15W4K58S4 的 P0.0 引脚发光二极管闪烁发光, R/C 时钟:11.0592MHz。 #include &STC15W4K.H & sbit P0_0 = P0^0; void delay500ms(void) { unsigned char i,j,k; for(i=41;i&0;i--) for(j=133;j&0;j--) for(k=252;k&0;k--); } void main () { for (;;) { P0_0 =!P0_0; delay500ms(); } } 2、 进入调试环境 如图 1-42 所示,点击设置工程的图标进入设置工程窗口,弹出窗口选择 C51 选项卡,Code Optimization 代码优化等级默认值为 8,一般不要修改,若调试复杂程序出现不正常情况可将它设为 0, 程序调试完成后再改成 8 提高程序执行效率并保证延时函数延时时间的准确性。Debug 选项卡左边一半用- 31 -// include 称为文件包含命令,后面引号中内容称为头文件 // sbit 是位定义,& STC15W4K.H &中有 sfr P0 = 0X80 字节定义语句// 注意后面没分号 // 注意后面没分号 // 注意后面有分号// for (;;) 让 for 下面 1 对大括号内程序无限循环 // 取反 P0_0 引脚 // 延时 500ms,高电平 500ms,低电平 500ms,周期 1S 于软件模拟调试,右边一半用于硬件仿真调试,软件调试当然要勾选 Use Simulator。 然后编译工程,编译正常后执行菜单“Debug”→ Start/Stop Debug Session 开始调试,等一两秒后 光标会运行到 main 主程序中, 然后可选择过程单步或单步执行程序。 进入仿真窗口后若出现的不是前面的 源代码窗口,而是夹有反汇编代码的窗口,直接单击工具栏放大镜图标关闭该窗口,如果程序编译结果没 有错误, 下次进入也就直接进入源代码窗口了, 进入调试窗口后工具栏很多按扭都变得可操作了, 如图 1-48 所示。图 1-48调试窗口工具栏从左到右依次是复位、全速运行、暂停、单步(进入函数内部) 、过程单步(一步执行完整个函数) 、若在 子程序或函数内部执行完当前函数、运行到当前光标所在行、下一状态、打开跟踪、观察跟踪、反汇编窗 口、观察窗口、代码作用范围分析、1#串行窗口、内存窗口、性能分析、模拟逻辑分析仪、工具按钮等命 令。 3、 单步与过程单步 学习程序调试,必须明确两个重要的概念,即单步执行与全速运行,全速执行是指一行程序执行完以后 紧接着执行下一行程序,中间不停止,这样程序执行的速度很快,并可以看到该段程序执行的总体效果, 即最终结果正确还是错误,但如果程序有错,则难以确认错误出现在哪些程序行。单步执行是每次执行一 行程序,执行完该行程序后立即停止,等待命令执行下一行程序,此时可以观察该行程序执行完以后得到 的结果,是否与我们写该行程序所想要得到的结果相同,借此可以找到程序中问题所在位置。程序调试中, 这两种运行方式都要用到。 使用菜单 Debug→ Step 或相应命令按钮的快捷键 F11 可以单步执行程序, 使用菜单 Step Over 或快 捷键 F10 可以过程单步形式执行命令, 所谓过程单步, 是指将汇编语言中的子程序或高级语言中的函数作 为一个语句来全速执行,图 1-49 是实际的调试窗口。图 1-49调试窗口按下 F11 键,可以看到源程序窗口的左边出现了一个黄色调试箭头,指向程序中将要运行的一行,每 按一次 F11,即执行该箭头所指程序行,然后箭头指向下一行,当箭头指向 delay500ms();行时,再次按 下 F11,会发现,箭头指向了延时函数 delay500ms()中的一行,不断按 F11 键,即可逐步执行延时函数, 但有个问题,本例中的延时程序可能要按 F11 键上万次才能执行完延时函数,显然这种单步运行方式不合- 32 - 适,为此,可以采取以下一些方法,第一,用鼠标在延时函数的最后一行“ } ”点一下,把光标定位于该 行,然后用菜单 Debug-&Run to Cursor line(执行到光标所在行) ,即可全速执行完黄色箭头与光标之间 的程序行,第二,在进入该子程序后,使用菜单 Debug-&Step Out of Current Function(单步执行到该 函数外) ,使用该命令后,即全速执行完调试光标所在的函数并指向主程序中的下一行程序,第三种方法, 在开始调试的,按 F10 而非 F11,程序也将单步执行,不同的是,执行到 delay500ms();行时,按下 F10 键,调试光标不进入函数内部,而是全速执行完该函数,然后直接指向主程序的下一行,灵活应用这几种 方法,可以大大提高查错的效率。 4、 断点设置 程序调试时,一些程序行必须满足一定的条件才能被执行到(如程序中某变量达到一定的值、按键被按 下、串口接收到数据、有中断产生等) ,这些条件往往是异步发生或难以预先设定的,这类问题使用单步执 行的方法是很难调试的,这时就要使用到程序调试中的另一种非常重要的方法――断点设置。断点设置的 方法有多种,常用的是在某一程序行设置断点,设置好断点后可以全速运行程序,一旦执行到该程序行即 停止,可在此观察有关变量值,以确定问题所在。在程序行设置/移除断点的方法是将光标定位于需要设置 断点的程序行,使用菜单 Debug-&Insert/Remove BreakPoint 设置或移除断点(也可以用鼠标在该行双击 实现同样的功能) , Debug-&Enable/Disable Breakpoint 是 开 启 或 暂 停 光 标 所 在 行 的 断 点 功 能 , Debug-&Disable All Breakpoint 暂停所有断点,Debug-&Kill All BreakPoint 清除所有的断点设置。这 些功能也可以用工具条上的快捷按钮进行设置。 除了在某程序行设置断点这一基本方法以外,Keil 软件还提供了多种设置断点的方法,执行菜单 Debug-&Breakpoints… 即出现一个对话框,该对话框用于对断点进行详细的设置,如图 1-50 所示。图 1-50断点设置图中 Expression 后的编缉框内用于输入表达式, 该表达式用于确定程序停止运行的条件, 举例说明如下。 ① 假设当前的延时函数有问题,程序单步执行进入延时函数,此时在 Experssion 中键入 k==100,再点 击 Define 即定义了一个断点,如果还没进入延时函数就定义断点,由于变量 k 还没有分配内存空间,点 Define 按钮时会出现变量没定义的错误提示,如图 1-51 所示,也就是说设置断点的变量只能是全局变量 和调试箭头所指函数中的局部变量。- 33 - 图 1-51 断点定义错误 另外,k 后有两个等号,意即相等,该表达式的含义是:如果 k 的值到达 100 则停止程序运行,除使 用相等符号之外,还可以使用&、&=、&、&=、!=(不等于) 、&(两值按位与) 、&&(两值相与)等运算符号。 ② 在 Experssion 后键入 k==100, 按 Count 后的微调按钮, 将值调到 3, 其意义是当第三次执行到 k==100 时才停止程序运行。 ③ 在 Experssion 后键入 k==100, 在 Command 后键入 printf( “k==100\n” ) , 主程序每次执行到 k==100 时并不停止运行,但会在输出窗口 Command 页输出一行字符,即 k==100。其中“\n”的用途是回车换行, 使窗口输出的字符整齐。 ④ 设置断点前先在输出窗口的 Command 页中键入 DEFINE int a,如图 1-52 所示,然后再设置断点同③, 但是 Command 后键入 printf(&k==100 %d times\n&,++a),则主程序每次执行到 k==100 时并不停止运行, 而会在 Command 窗口输出该字符及被调用的次数,如:k==100 102 times图 1-52 命令栏输入调试命令 5、 常用调试窗口 ① 变量观察窗口,如图 1-53 所示。图 1-53变量观察窗口执行菜单 View → Watch & Call Stack Window 打开变量观察窗口,其中有一个标签页为 Locals,这 一页会自动显示当前函数模块中的变量名及变量值。另外两个标签页 Watch #1 和 Watch #2 可以加入自 定义的观察变量,单击 Watch #1 或 Watch #2 窗口中的&type F2 to edit&,然后再按 F2 即可输入需要 观察的变量,在程序较复杂,变量很多的场合,这两个自定义观察窗口可以筛选出我们自己感兴趣的变量 加以观察。观察窗口中变量的值不仅可以观察,还可以修改,点击变量后面的值,再按 F2,该值即可修改 (也可单击 2 次该值然后修改) , 该窗口显示的变量值可以十进制或十六进制形式显示, 方法是在显示窗口 点右键,在快捷菜单中选择。 ② 存储器窗口,如图 1-54 所示。- 34 - 图 1-54 存储器数值显示方式 代码编译成功后执行 File →Open 打开与工程名对应的*.m51 文件可找到自定义变量名与内存地址的 对应关系,然后执行菜单 View → Memory Window 打开存储器窗口,通过在 Address 后的编缉框内输入 “字母:数字” ,然后回车即可显示相应内存值,其中字母可以是 C、D、I、X,分别代表代码存储空间、 直接寻址的片内存储空间、间接寻址的片内存储空间、扩展的外部 RAM 空间,数字代表想要查看的地址。 例如输入 D:0 即可观察到地址 0 开始的片内 RAM 单元值、键入 C:0 即可显示从 0 开始的 FLASH 存储 单元中的值,即查看程序的二进制代码。 ③ 反汇编窗口,如图 1-55 所示。 点击 View-&Dissambly Window 可以打开反汇编窗口,该窗口可以显示纯汇编代码、也可 C 语言代码 和汇编代码混合显示,可以在该窗口按汇编代码的方式单步执行程序,在反汇编窗口,点击鼠标右键,出 现快捷菜单,其中 Mixed Mode 是以混合方式显示,Assembly Mode 是以纯汇编代码方式显示。图 1-55 ④ 外围窗口,如图 1-56 所示。反汇编窗口为了能够比较直观地了解单片机中定时器、 中断、 并行端口、 串行端口等常用外设的使用情况, Keil 提 供了一些外围接口对话框,通过 Peripherals 菜单选择,该菜单的下拉菜单内容与你建立项目时所选的 CPU 有关,如果是选择的 89C52 这一类“标准”的 51 机, 那么将会有 Interrupt(中断) 、I/O Ports (并行 I/O 口) 、Serial(串行口) 、Timer(定时器/计数器)这四个外围设备菜单。打开这些对话框,列 出了外围设备的当前使用情况,各标志位的情况等,可以在这些对话框中直观地观察和更改各外围设备的 运行情况,最常用的还是 8 位并口,P0 、P1 、P2、 P3,图 1-56 中 P0 口内部寄存器输出与外部引脚电平 不一定相同,比如内部为弱上拉高电平输出状态,但外部引脚可以强制接地成为低电平 0V。- 35 - 图 1-56 外围窗口 ⑤ 逻辑分析仪窗口,如图 1-57 所示。 在软件仿真环境下,单击按钮 进入逻辑分析仪窗口,在图 1-57 的第 4 步设置端口时,按 “端口名. 位”格式输入,显示时只能显示端口名,设置成功的位的显示在自动生成的那一栏的 Shift Right 后面, 也可在波形显示界面的左边看到,注意设置完成必须点工具栏运行按钮才有波形输出,需要停止波形运行 单击紧挨着运行按钮旁边的停止按钮即可,Zoom 下的 3 个按钮可放大、缩小与显示完整波形。图 1-57 1.3.2 (1)仿真设置步骤逻辑分析仪窗口硬件仿真(利用 STC 专用仿真芯片仿真,可仿真所有功能)如图 1-58 所示,在 STC 程序下载软件中首先选择“Keil 仿真设置”页面,点击“添加型号和头文件 到 Keil 中” ,在出现的目录选择窗口中,定位到 Keil 的安装目录(比如“C:\Keil818\”), “确定”后出现 “STC MCU 型号添加成功”的提示信息,点“确定” 。图 1-58 安装 Keil 版本的仿真驱动 在 Keil 中新建项目,出现如图 1-59 对话框,选择“STC MCU Database”项,然后从列表中选择相应 的 MCU 型号,在此选择“STC15W4K32S4” ,点击“OK”完成选择。- 36 - 图 1-59芯片种类选择 进入设置工程界面,选 Debug 选项然后按通常的步骤编写代码,编译成功后,点 KEIL 工具栏图标卡, 如图 1-60 所示, 选择右侧的硬件仿真 “Use …” , 在仿真驱动下拉列表中选择 “STC Monitor-51 Driver” 项,然后点击“Settings”按钮,对串口的端口号和波特率进行设置,波特率一般选择 115200 或者 57600。 然后选中“Load Application at Startup”和“Run to main()” ,最后确定即可。图 1-60硬件仿真设置步骤然后准备一颗 IAP15W4K58S4 按正确方向插入前面的实验电路, 实验电路仍然与电脑串口相连, 然后按 图 1-58 所示操作,先选择仿真芯片运行时的 R/C 时钟频率或使用外部晶振,然后点击“将 IAP15W4K58S4 设置为仿真芯片”按钮,给电路板上电,此时就将会有程序向芯片中下载,下载时间最快大约需要 10 秒, 当程序下载完成后仿真器便制作完成了,IAP15W4K58S4 设置成仿真芯片后,要想再变成一般的单片机无需 任何操作,直接将它当作单片机下载程序使用就可以了。 确认前面我们所创建的项目编译没有错误后,按“Ctrl+F5”或工具栏图标 开始调试,若硬件连接 无误的话,将会进入到与软件仿真类似的调试界面,只是现在可以一步一步执行程序并控制硬件动作了, 断点设置的个数目前最多允许 20 个(理论上可设置任意个,但是断点设置得过多会影响调试的速度) 。 有时进入调试环境可能会失败,这时可将整个程序代码注释掉,只写一个最简单的主函数,编译后再 尝试进入调试环境,若顺利进入,说明是软件代码(比如串口程序)占用了仿真调试接口,否则可能是仿 真串口号选择有误或硬件问题,比如仿真芯片问题或计算机出来的串口工作不正常。 (2)仿真代码占用资源 ① 程序空间:仿真代码占用程序区最后 6K 字节的空间,比如用 IAP15W4K58S4 仿真,用户程序只能占 52K(0x0000~0xCFFF)空间,程序最大不能超过 52× 字节,用户程序不要使用从 0xD000 到 0xE7FF 的 6K 字节空间。 ② 常规 RAM(data,idata) : 0 字节 ③ XRAM(xdata) : 占 用 最 后 768 字 节 空 间 (0x0D00 C 0x0FFF, 用 户 在 程 序 中 不 要 使 用 ) , 对 于- 37 - IAP15W4K58S4,只要程序占用 XRAM 不超过 =3072 字节即可。 ④ I/O : P3.0/P3.1, 用户在程序中不得操作 P3.0/P3.1, 不要使用 INT4/T2CLKO/P3.0, 不要使用 T2/P3.1。 对于 IAP 型号单片机, 对 EEPROM 的操作是通过对多余不用的程序区进行 IAP 模拟实现的, 此部分要修改程 序(IAP 起始地址)。如 IAP15W4K58S4 单片机的 EEPROM 区的位置如图 1-61 所示。图 1-61 1.4仿真过程中 EEPROM 位置安排示意图经典流水灯实例 // 注意宏定义语句后面无分号例 1.3 让接在 IAP15W4K58S4 的 P0.7 引脚发光二极管 1 秒钟闪烁 1 次,R/C 时钟:11.0592MHZ。 #include &STC15W4K.H& void delay500ms() { unsigned char i,j,k; for(i=41;i&0;i--) for(j=133;j&0;j--) for(k=252;k&0;k--); } void port_mode() { P0M1=0x00; P0M0=0x00;P1M1=0x00; P1M0=0x00;P2M1=0x00; P2M0=0x00;P3M1=0x00; P3M0=0x00; P4M1=0x00; P4M0=0x00;P5M1=0x00; P5M0=0x00;P6M1=0x00; P6M0=0x00;P7M1=0x00; P7M0=0x00; } void main() { port_mode(); while(1) { P0 &=~(1&&7); delay500ms(); P0|=(1&&7); delay500ms(); } } 例 1.4 利用异或运算符 ^ 实现 IAP15W4K58S4 的 P0.4 引脚发光二极管 1 秒钟闪烁 1 次。 // 异或运算符 ^ 最重要的用途是对字节中的某位取反(提示:C 语言中很重要的技巧) // 注意宏定义语句后面无分号 #include &STC15W4K.H& void delay500ms() { // 同例 1.3- 38 -// i,j,k 由由软件计算出并验证正确。 // 注意后面没分号 // 注意后面没分号 // 注意后面有分号 // 端口模式// 将单片机所有端口配置为准双向弱上拉方式// 将端口单独某位置 0 (提示:C 语言中很重要的技巧) // 延时 500ms // 将端口单独某位置 1 (提示:C 语言中很重要的技巧) // 延时 500ms } void main() { while(1) { P0 ^=(1&&3); delay500ms(); } } 例 1.5 最精简的流水灯实例(A) //核心思想: 左移位数不断改变, 被移动的数值固定为 。 (变位数, 定数值) , R/C 时钟: 11.0592MHZ。 #include &STC15W4K.H& void delay100ms() { unsigned char i,j,k; for(i=157;i&0;i--) for(j=9;j&0;j--) for(k=194;k&0;k--); } void port_mode() { } void main() { port_mode(); while(1) { P0 =~(1&&a++); delay100ms(); if (a==0x08) { a=0; } } } 例 1.6 最精简的流水灯实例(B) //核心思想:左移位数固定为 1,被移动的数值是前一次移位的结果。 (定位数,变数值) 。 #include &STC15W4K.H& void delay100ms() { // 同例 1.5- 39 -// 等效于 P0 = P0 ^ (1&&3);// 注意宏定义语句后面无分号// i,j,k 由由软件计算出并验证正确。 // 注意后面没分号 // 注意后面没分号 // 注意后面有分号 // 端口模式…… // 同例 1.3// 将单片机所有端口配置为准双向弱上拉方式// 第一次运行时 && 0 =
// 允许左移 8 次。// 注意宏定义语句后面无分号 } int main() { port_mode(); while(1) { k=0x01; for(i=8;i&0;i--) { P0=~k; delay100ms(); k=k&&1; } } } C 语言代码书写提示: ① C 语言中可以在一行写多个语句,每个语句用分号表示接束。比如上例也可这样写: for(i=8;i&0;i--) { P0=~k;delay100ms(); k=k&&1; } ② C 语言中可以将一个语句写在多行,在 Visual Basic 中,前一行的结尾用空格和下划线表明后一行的 内容与前一行作为一个语句, 但 C 语言中不用任何标记, 直接把一个语句的其它内容写在下一行即可, 但注意单词(如变量名、关键字等)不能分成多行,否则编译不能通过。 1.5 单片机 C 语言延时程序详解 // 把 k 左移 1 位,左移时数值最低位填 0 补充 // 把 k 左移 1 位,左移时数值最低位填 0 补充 // 先给 K 一个初值
等待移位 // k 用于保存移位后的值 // 将单片机所有端口配置为准双向弱上拉方式1.5.1 学会使用计算软件 在本章前面反复出现了一个延时函数,格式如下: void delay500ms() { unsigned char i,j,k; for(i=41;i&0;i--) for(j=133;j&0;j--) for(k=252;k&0;k--); } 在本书后面还会出现一个延时函数,格式如下: void delay (unsigned char t) { while(--t);- 40 -// 大范围精确延时函数 // i,j,k 由软件计算出确定。 // 注意后面没分号 // 注意后面没分号 // 注意后面有分号// 小范围精确延时函数 } 读者需要使用延时程序时,直接将这里的延时函数复制到自己的程序中,然后修改函数中的变量值就可以 得到精确的延时时间,如果需要延时时间较长,比如流水灯类程序时间大于 100uS,使用前一个延时函数, 延时时间很短的 18B20 通信类程序要求小于 100uS,使用后一个延时函数,函数中的 i、j、k 和 t 的具体 数值由作者编写好的软件计算,软件界面如图 1-62 所示。图 1-62单片机延时程序变量计算从图 1-62 中可以看出不但可以根据要求的延时时间计算 i j k 的值,也可由 i j k 的值计算出延时时间值, 使用非常方便。读者使用这个软件时可以把文件夹“安装程序”复制到 C 盘根目录下,在 C 盘根目录下运 行安装程序,安装路径随意,默认路径 C:\Program Files\延时时间\,安装完毕后找到安装路径下的图标, 如图 1-63 所示,然后右键选择“发送到-桌面快捷方式”方便随时使用。除使用这个软件外,读者也可以 使用 STC 下载软件中附带的“软件延时计算器” 。图 1-63 重要提示:发送到桌面快捷方式① 程序计算出来通常会有多组数据,随便选一组都可以。 ② 为保证延时时间的准确性, 需要确认工程设置中的代码优化等级为默认的为 8 级或 6 级, 优化等级更低 时延时时间可能会不准确(变长) 。另外还要确定延时函数运行过程中不应有中断函数打断,否则延时 时间会变长。 ③ 延时函数使用到单片机 4 条汇编指令:(1)MOV Rn #data,需 2 个时钟。 (2)DJNZ Rn rel,需 4 个时钟(3)RET,需 4 个时钟(4)LCALL,需 4 个时钟。 对于 STC11、STC12、STC15 系列,这几条指 令执行时间是一样的,因此界面中选择“高速 STC 单片机”计算出的延时函数变量对这 3 个系列是通用 的。 1.5.2 计算软件内部运算过程详解 固定格式大范围精确延时函数计算公式(后面的详细分析步骤总结出的结果) : STC 51: 延时总时间 = (4 i j k + 6 i j + 6 i + 12) × 1/F (单位:uS)- 41 - 固定格式小范围精确延时函数计算公式(后面的详细分析步骤总结出的结果) : STC 51:延时总时间 = (t ×4 + 10)×1/F 用时间也计算在内。 i,j,k 的最小值只能为 1,假设晶振 12M,延时时间 AT89C51=13 uS,IAP15W4K}

我要回帖

更多关于 单片机串口通信实验 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信