51单片机C语言编程入门以及keil_uvision使用方法介绍(详讲版)
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
看门狗的使用在后面会有详细介绍,我们来看看单片机的在线编程(ISP)功能。要把 程序烧写到 AT89C 系列单片机中,最常用的做法是把单片机插入专用的编程器中,通过编程 器把程序烧到单片机里。这样做的麻烦之处是在调试程序时,编程者对程序作出的每次修改, 都要把单片机从电路中拔出来,插到编程器,烧好后又要把单片机重新插回电路板。可以想 象,这种工作是吃力不讨好的。利用 S5x 单片机的 ISP 功能,我们就无须来回插拔单片机, 只要在电路中把单片机的 ISP 编程引脚接出来,并且这几个引脚所接的外围电路对 ISP 没有 影响,就可以用 ISP 编程器对单片机进行烧写了。另外,支持 AT89C 系列单片机的编程器成 本要比 ISP 下载线高最少几倍。一根并口 ISP 下载线的成本仅几元钱。
§5 编写高质量的单片机 C 程序……………………………………………………………… 64 5.1 文件结构………………………………………………………………………………… 64 5.2 程序的版式……………………………………………………………………………… 66 5.3 单片机程序命名规则与变量选择……………………………………………………… 70 5.4 表达式和基本语句……………………………………………………………………… 73 5.5 函数设计………………………………………………………………………………… 77 5.6 单片机程序框架………………………………………………………………………… 79
中国科学技术大学业余无线电协会编
目
录
§1 前言………………………………………………………………………………………… 1
§2 单片机简介………………………………………………………………………………… 2 2.1 数字电路简介…………………………………………………………………………… 2 2.2 MCS-51 单片机简介……………………………………………………………………… 2 2.3 Easy 51 Kit Pro 简介………………………………………………………………… 5 2.4 Easy 51 Kit Pro 电路功能分析……………………………………………………… 5
除了 S 系列、C 系列外,atmel 公司的 MCS-51 兼容产品也有其它系列,它们的主要区 别在于供作电压范围,在此就不作介绍了。
值得注意的是,一片单片机可以反复擦写的次数是有限的,atmel 的 C 系列、S 系列单 片机的声称可重复擦写次数为 1000 次。
下面以 S52 为例,对其引脚功能一一作出说明。C51、C52 以及 S51 的引脚功能与 S52 大致相同,如有遇到不同的地方会用粗斜体字特别说明。
2.1 数字电路简介
在一个控制系统中,单片机是电路的一部分,单片机中的程序是针对其所在的电路编写 的。因此,要对单片机编程并实现一定的功能,必须了解整个系统的电路图。单片机编程是 针对某个特定的电路进行的,这一点和普通的编程不一样。编程时很可能要经常参照电路图。 与单片机直接相关的电路大都是数字电路。数字电路各部分的功能十分明确,因此相对比较 容易掌握。
I/O、定时器、中断、串口等资源的用法在后面有详细介绍。这里只对程序存储器与 RAM 作一下说明。单片机程序代码经过编译(C 程序)或汇编(汇编程序)后,要把编译或汇编 得到的代码文件(一般来说编译得到 hex 格式文件、汇编得到 bin 格式文件)烧写到单片机 内,存放这个程序的地方就是程序存储器。显而易见,单片机的程序存储器越大,我们就可 以把越大、越复杂的程序放进去。如果我们编写的程序太大,那么单片机的程序存储器就有 可能会放不下这个程序。这时,解决办法就只有精简代码、外接程序存储器(前提是所用的 单片机支持使用外部程序存储器)或采用程序存储器容量更大的单片机。RAM 是单片机程序 运行时存放变量的地方,常量也可以放在 RAM 中。C51 中的 RAM 大小为 128 字节,这就是说 单片机程序中最多只能同时存在 128 个 unsigned char 型的变量或 64 个 unsigned int 型的 变量(在 Keil 环境中,int 型变量的长度为 16 位,这与 VC 的 32 位不一样)或者是相应的
简单地说,数字电路就是只有“0”和“1”两种信号的电路。判别信号究竟是“0”还 是“1”是通过电压的大小(常称作“电平”)来判断的。不同的数字器件的电平判断标准是 不一样的。常用的数字器件以高电平(超过某一阈值的电平)作为逻辑“1”,以低电平(低 于某一阈值的电平)作为逻辑“0”。其中高电平阈值大于低电平阈值,处于高电平阈值与低 电平阈值之间的电压是无效的。高电平阈值与低电平阈值的具体值与数字器件的供电电压有 关,如 AT89S51 单片机的高电平阈值为(0.2Vcc+0.9)V,低电平阈值为(0.2Vcc-0.1)V, 其中 Vcc 为单片机的供电电压。早年常用的数字器件的额定供电电压为 5V,现在 3.3V、1.8V 等电压的数字器件已经大量使用了。在 Easy 51 Kit Pro 中,我们仍使用 5V 供电的单片机。 另外,还有一种 RS-232 电平标准,以-12V~-5V 作为逻辑“1”,以 5V~12V 作为逻辑“0”。 电脑上的串口都符合 RS-232 标准。
什么是单片机,目前还没有一个确切的定义。普通认为单片机是将CPU、RAM、ROM、定 时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所 组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。简称为单 片微机或单片机。利用单片机程序,可以实现对硬件系统的小型化的智能控制。由于单片机 的硬件结构与指令系统都是按工业控制要求设计的,常用于工业的检测、控制装置中,因而 也称为微控制器(Micro-Controller)或嵌入式控制器(Embedded-Controller)。
附图:Easy 51 Kit Pro 电路图(最小系统板)…………………………………………… 80 附图:Easy 51 Kit Pro 电路图(学习板)………………………………………………… 81
V2.0.2
51 单片机 C 语言编程入门——Easy 51 Kit Pro 配套学习资料
§1 前言
还有一个“地”的概念。在电路中“地”并不是通常意义中的地,而是指电路中的一点, 这一点的电压被人为地规定为 0V。
2.2 MCS-51 单片机简介
目前生产单片机产品的公司非常多,当中较有影响力的有 intel 公司推出的 MCS-51 系 列等。很多公司的产品都是与 MCS-51 架构兼容(MCS-51 compatible)的。本资料中采用的 atmel 公司的 AT89C51/52 或 AT89S51/52 单片机,就是兼容 MCS-51 架构的单片机。
§3 MCS-51 单片机的 C 语言编程……………………………………………………………… 8 3.1 汇编语言………………………………………………………………………………… 8 3.2 建立你的第一个 C 项目………………………………………………………………… 8 3.3 生成 hex 文件…………………………………………………………………………… 12 3.4 Keil C 语言……………………………………………………………………………… 14 3.5 单片机 I/O……………………………………………………………………………… 18 3.6 中断……………………………………………………………………………………… 25 3.7 定时器/计数器………………………………………………………………………… 27 3.8 定时器的应用举例……………………………………………………………………… 29 3.9 外部中断………………………………………………………………………………… 34 3.10 串行通信……………………………………………………………………………… 38 3.11 定时器 2……………………………………………………………………………… 43 3.12 看门狗………………………………………………………………………………… 47 3.13 空闲模式和掉电模式………………………………………………………………… 50
中国科学技术大学业余无线电协会
2
51 单片机 C 语言编程入门——Easy 51 Kit Pro 配套学习资料
各种不同类型变量的组合。可以看出,单片机程序所允许的规模比 Windows 或其它操作系统 环境下的程序要小得多。编写单片机程序时一定要注意不要滥用资源。
S51 与 S52 分别是 C51、C52 的换代产品。从用户的角度看,S5x 单片机比相对应的 C5x 单片机多了看门狗与在线编程(ISP)功能,另外最高运行速度有所增加(C5x 最高支持 24MHz 的时钟频率,而 S5x 最高支持 33MHz 的时钟频率,但市面上比较容易买到的 S5x 单片机仍只 最高支持 24MHz 的时钟频率)。
1、电源引脚 Vcc 40 电源引脚 GND 20 接地引脚 工作电压为4V~5.5V。
2、外源自文库晶体引脚
图2.2 AT89C2051引脚功能图 图2.1 AT89S52引脚功能图
中国科学技术大学业余无线电协会
C51 拥有 4096 字节(1 字节=8 位)的片内程序存储器、128 字节的 RAM、32 个 I/O 口、 两个定时器、6 个中断源、一个串口等。C52、C2051 的资源与 C51 差别不大,其中 C52 的片 内程序存储器为 8192 字节、RAM 为 256 节、定时器有 3 个,其它与 C51 一样; C2051 的片 内程序存储器为 2048 字节、I/O 口只有 15 个,另比 C51 多了一个模拟比较器,工作电压范 围比较宽,为 2.7V~6V(C51/52、S51/52 为 4.5~5.5V),其它与 C51 一样。
同时,本学习资料还致力于引导读者编写高质量的单片机 C 语言程序。尽管单片机程序 的规模有限,但高质量的单片机程序除了可以优化运行效率外,对程序的开发速度和可维护 性也具有重要的影响。
中国科学技术大学业余无线电协会
1
51 单片机 C 语言编程入门——Easy 51 Kit Pro 配套学习资料
§2 单片机简介
单片机的应用十分广泛,我们将以 Easy 51 Kit Pro 单片机学习板为基础,学习 51 单 片机的入门知识。
本学习资料面向掌握基本电路知识和基础 C 语言编程的单片机初学者。为使读者能迅速 上手,本资料并不深入介绍单片机的内部体系结构和指令系统,而是从读者较熟悉的高级语 言开始使读者掌握单片机的 C 语言编程。通过本资料的大量程序例子,读者应当可以在较短 的时间内熟悉单片机的入门编程以及单片机基本外围电路的连接,从而具备基本的单片机开 发能力。然而,本资料的局限性也正在于此,当读者需要更深入地开发单片机或其它控制器 时,可能需要进一步了解其内部体系结构和指令系统,这时读者就应查阅其它资料了。
§4 MCS-51 单片机 C 语言编程应用进阶…………………………………………………… 51 4.1 扫描式键盘……………………………………………………………………………… 51 4.2 EEPROM 芯片 AT93C46 的读写…………………………………………………………… 55 4.3 Keil C 的高级使用……………………………………………………………………… 63
Atmel 公司的 AT89C51(以后简称“C51”)、AT89C52(以后简称“C52”)、AT89C2051 (以后简称“C2051”)以及 C51、C52 的换代产品 AT89S51(以后简称“S51”)、AT89S52 (以后简称“S52”)容易上手、价格低廉(不超过 10 元/片)、资料丰富,是初学者入门 时广泛采用的单片机。
§5 编写高质量的单片机 C 程序……………………………………………………………… 64 5.1 文件结构………………………………………………………………………………… 64 5.2 程序的版式……………………………………………………………………………… 66 5.3 单片机程序命名规则与变量选择……………………………………………………… 70 5.4 表达式和基本语句……………………………………………………………………… 73 5.5 函数设计………………………………………………………………………………… 77 5.6 单片机程序框架………………………………………………………………………… 79
中国科学技术大学业余无线电协会编
目
录
§1 前言………………………………………………………………………………………… 1
§2 单片机简介………………………………………………………………………………… 2 2.1 数字电路简介…………………………………………………………………………… 2 2.2 MCS-51 单片机简介……………………………………………………………………… 2 2.3 Easy 51 Kit Pro 简介………………………………………………………………… 5 2.4 Easy 51 Kit Pro 电路功能分析……………………………………………………… 5
除了 S 系列、C 系列外,atmel 公司的 MCS-51 兼容产品也有其它系列,它们的主要区 别在于供作电压范围,在此就不作介绍了。
值得注意的是,一片单片机可以反复擦写的次数是有限的,atmel 的 C 系列、S 系列单 片机的声称可重复擦写次数为 1000 次。
下面以 S52 为例,对其引脚功能一一作出说明。C51、C52 以及 S51 的引脚功能与 S52 大致相同,如有遇到不同的地方会用粗斜体字特别说明。
2.1 数字电路简介
在一个控制系统中,单片机是电路的一部分,单片机中的程序是针对其所在的电路编写 的。因此,要对单片机编程并实现一定的功能,必须了解整个系统的电路图。单片机编程是 针对某个特定的电路进行的,这一点和普通的编程不一样。编程时很可能要经常参照电路图。 与单片机直接相关的电路大都是数字电路。数字电路各部分的功能十分明确,因此相对比较 容易掌握。
I/O、定时器、中断、串口等资源的用法在后面有详细介绍。这里只对程序存储器与 RAM 作一下说明。单片机程序代码经过编译(C 程序)或汇编(汇编程序)后,要把编译或汇编 得到的代码文件(一般来说编译得到 hex 格式文件、汇编得到 bin 格式文件)烧写到单片机 内,存放这个程序的地方就是程序存储器。显而易见,单片机的程序存储器越大,我们就可 以把越大、越复杂的程序放进去。如果我们编写的程序太大,那么单片机的程序存储器就有 可能会放不下这个程序。这时,解决办法就只有精简代码、外接程序存储器(前提是所用的 单片机支持使用外部程序存储器)或采用程序存储器容量更大的单片机。RAM 是单片机程序 运行时存放变量的地方,常量也可以放在 RAM 中。C51 中的 RAM 大小为 128 字节,这就是说 单片机程序中最多只能同时存在 128 个 unsigned char 型的变量或 64 个 unsigned int 型的 变量(在 Keil 环境中,int 型变量的长度为 16 位,这与 VC 的 32 位不一样)或者是相应的
简单地说,数字电路就是只有“0”和“1”两种信号的电路。判别信号究竟是“0”还 是“1”是通过电压的大小(常称作“电平”)来判断的。不同的数字器件的电平判断标准是 不一样的。常用的数字器件以高电平(超过某一阈值的电平)作为逻辑“1”,以低电平(低 于某一阈值的电平)作为逻辑“0”。其中高电平阈值大于低电平阈值,处于高电平阈值与低 电平阈值之间的电压是无效的。高电平阈值与低电平阈值的具体值与数字器件的供电电压有 关,如 AT89S51 单片机的高电平阈值为(0.2Vcc+0.9)V,低电平阈值为(0.2Vcc-0.1)V, 其中 Vcc 为单片机的供电电压。早年常用的数字器件的额定供电电压为 5V,现在 3.3V、1.8V 等电压的数字器件已经大量使用了。在 Easy 51 Kit Pro 中,我们仍使用 5V 供电的单片机。 另外,还有一种 RS-232 电平标准,以-12V~-5V 作为逻辑“1”,以 5V~12V 作为逻辑“0”。 电脑上的串口都符合 RS-232 标准。
什么是单片机,目前还没有一个确切的定义。普通认为单片机是将CPU、RAM、ROM、定 时器/计数器以及输入输出(I/O)接口电路等计算机主要部件集成在一块芯片上,这样所 组成的芯片级微型计算机称为单片微型计算机(Single Chip Microcomputer)。简称为单 片微机或单片机。利用单片机程序,可以实现对硬件系统的小型化的智能控制。由于单片机 的硬件结构与指令系统都是按工业控制要求设计的,常用于工业的检测、控制装置中,因而 也称为微控制器(Micro-Controller)或嵌入式控制器(Embedded-Controller)。
附图:Easy 51 Kit Pro 电路图(最小系统板)…………………………………………… 80 附图:Easy 51 Kit Pro 电路图(学习板)………………………………………………… 81
V2.0.2
51 单片机 C 语言编程入门——Easy 51 Kit Pro 配套学习资料
§1 前言
还有一个“地”的概念。在电路中“地”并不是通常意义中的地,而是指电路中的一点, 这一点的电压被人为地规定为 0V。
2.2 MCS-51 单片机简介
目前生产单片机产品的公司非常多,当中较有影响力的有 intel 公司推出的 MCS-51 系 列等。很多公司的产品都是与 MCS-51 架构兼容(MCS-51 compatible)的。本资料中采用的 atmel 公司的 AT89C51/52 或 AT89S51/52 单片机,就是兼容 MCS-51 架构的单片机。
§3 MCS-51 单片机的 C 语言编程……………………………………………………………… 8 3.1 汇编语言………………………………………………………………………………… 8 3.2 建立你的第一个 C 项目………………………………………………………………… 8 3.3 生成 hex 文件…………………………………………………………………………… 12 3.4 Keil C 语言……………………………………………………………………………… 14 3.5 单片机 I/O……………………………………………………………………………… 18 3.6 中断……………………………………………………………………………………… 25 3.7 定时器/计数器………………………………………………………………………… 27 3.8 定时器的应用举例……………………………………………………………………… 29 3.9 外部中断………………………………………………………………………………… 34 3.10 串行通信……………………………………………………………………………… 38 3.11 定时器 2……………………………………………………………………………… 43 3.12 看门狗………………………………………………………………………………… 47 3.13 空闲模式和掉电模式………………………………………………………………… 50
中国科学技术大学业余无线电协会
2
51 单片机 C 语言编程入门——Easy 51 Kit Pro 配套学习资料
各种不同类型变量的组合。可以看出,单片机程序所允许的规模比 Windows 或其它操作系统 环境下的程序要小得多。编写单片机程序时一定要注意不要滥用资源。
S51 与 S52 分别是 C51、C52 的换代产品。从用户的角度看,S5x 单片机比相对应的 C5x 单片机多了看门狗与在线编程(ISP)功能,另外最高运行速度有所增加(C5x 最高支持 24MHz 的时钟频率,而 S5x 最高支持 33MHz 的时钟频率,但市面上比较容易买到的 S5x 单片机仍只 最高支持 24MHz 的时钟频率)。
1、电源引脚 Vcc 40 电源引脚 GND 20 接地引脚 工作电压为4V~5.5V。
2、外源自文库晶体引脚
图2.2 AT89C2051引脚功能图 图2.1 AT89S52引脚功能图
中国科学技术大学业余无线电协会
C51 拥有 4096 字节(1 字节=8 位)的片内程序存储器、128 字节的 RAM、32 个 I/O 口、 两个定时器、6 个中断源、一个串口等。C52、C2051 的资源与 C51 差别不大,其中 C52 的片 内程序存储器为 8192 字节、RAM 为 256 节、定时器有 3 个,其它与 C51 一样; C2051 的片 内程序存储器为 2048 字节、I/O 口只有 15 个,另比 C51 多了一个模拟比较器,工作电压范 围比较宽,为 2.7V~6V(C51/52、S51/52 为 4.5~5.5V),其它与 C51 一样。
同时,本学习资料还致力于引导读者编写高质量的单片机 C 语言程序。尽管单片机程序 的规模有限,但高质量的单片机程序除了可以优化运行效率外,对程序的开发速度和可维护 性也具有重要的影响。
中国科学技术大学业余无线电协会
1
51 单片机 C 语言编程入门——Easy 51 Kit Pro 配套学习资料
§2 单片机简介
单片机的应用十分广泛,我们将以 Easy 51 Kit Pro 单片机学习板为基础,学习 51 单 片机的入门知识。
本学习资料面向掌握基本电路知识和基础 C 语言编程的单片机初学者。为使读者能迅速 上手,本资料并不深入介绍单片机的内部体系结构和指令系统,而是从读者较熟悉的高级语 言开始使读者掌握单片机的 C 语言编程。通过本资料的大量程序例子,读者应当可以在较短 的时间内熟悉单片机的入门编程以及单片机基本外围电路的连接,从而具备基本的单片机开 发能力。然而,本资料的局限性也正在于此,当读者需要更深入地开发单片机或其它控制器 时,可能需要进一步了解其内部体系结构和指令系统,这时读者就应查阅其它资料了。
§4 MCS-51 单片机 C 语言编程应用进阶…………………………………………………… 51 4.1 扫描式键盘……………………………………………………………………………… 51 4.2 EEPROM 芯片 AT93C46 的读写…………………………………………………………… 55 4.3 Keil C 的高级使用……………………………………………………………………… 63
Atmel 公司的 AT89C51(以后简称“C51”)、AT89C52(以后简称“C52”)、AT89C2051 (以后简称“C2051”)以及 C51、C52 的换代产品 AT89S51(以后简称“S51”)、AT89S52 (以后简称“S52”)容易上手、价格低廉(不超过 10 元/片)、资料丰富,是初学者入门 时广泛采用的单片机。