c51单片机c语言教程.doc
《c51单片机c语言教程.doc》由会员分享,可在线阅读,更多相关《c51单片机c语言教程.doc(71页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、51 单片机 C 语言入门教程 - 1 - 51单片机C 语言学习杂记 学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语言,还有众多种类的单片机选择真是件让人头痛的事。在众多单片机中 51 架构的芯片风行很久,学习资料也相对很多,是初学的较好的选择之一。51 的编程语言常用的有二种,一种是汇编语言,一种是 C 语言。汇编语言的机器代码生成效率很高但可读性却并不强,复杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效性的代码编写问题。对于开发周期来说,中大
2、型的软件编写用 C 语言的开发周期通常要小于汇编语言很多。综合以上 C 语言的优点,我在学习时选择了 C 语言。以后的教程也只是我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一起交流,一起学习,一起进步。 *注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只,有望各位大侠高手指点错误提出建议。 明浩 2003-3-30 pnzwzw 第一课 建立您的第一个 C 项目 使用 C 语言肯定要使用到 C 编译器,以便把写好的 C 程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一
3、,它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C 语言的程序设计,它的界面和常用的微软 VC+的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发 51 应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了 KEIL51 软件,要使用 KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到 KEIL中国代理周立功公司的网站上下载一份能编译 2K的 DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。 (安装的方法和普通软件相当这里就不做介绍了
4、) 安装好后,您是不是迫不及待的想建立自己的第一个 C 程序项目呢?下面就让我们一起来建立一个小程序项目吧。或许您手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过 KEIL软件仿真看到程序运行的结果。 首先当然是运行 KEIL51 软件。怎么打开?噢,天!那您要从头学电脑了。呵呵,开个玩笑,这个问题我想读者们也不会提的了:P。运行几秒后,出现如图11 的屏幕。 图11 启动时的屏幕 51 单片机 C 语言入门教程 - 2 - 接着按下面的步骤建立您的第一个项目: (1)点击Project菜单,选择弹出的下拉式菜单中的 New Project,如图 12。接着弹出一个标准 Wi
5、ndows文件对话窗口,如图 13,这个东东想必大家是见了N次的了,用法技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。在“文件名”中输入您的第一个 C程序项目名称,这里我们用“test” ,这是笔者惯用的名称,大家不必照搬就是了,只要符合 Windows 文件规则的文件名都行。 “保存”后的文件扩展名为 uv2,这是 KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。 图12 New Project菜单 图13 文件窗口 (2)选择所要的单片机,这里我们选择常用的 Ateml公司的AT89C51。此时屏幕如图14 所示。AT89C51 有什么功
6、能、特点呢?不用急,看图中右边有简单的介绍,稍后的章节会作较详细的介绍。完成上面步骤后,我们就可以进行程序的编写了。 (3)首先我们要在项目中创建新的程序文件或加入旧程序文件。如果您没有现成的程序,那么就要新建一个程序文件。在 KEIL 中有一些程序的 Demo,在这里我们还是以一个C 程序为例介绍如何新建一个C 程序和如何加到您的第一个项目中吧。点击图 15 中1 的新建文件的快捷按钮,在 2 中出现一个新的文字编辑窗口,这个操作也可以通过菜单 FileNew 或快捷键 Ctrl+N 来实现。好了,现在可以编写程序了,光标已出现在文本编辑窗口中,等待我们的输入了。第一程序嘛,写个简单明了的吧
7、。下面是经典的一段程序,呵,如51 单片机 C 语言入门教程 - 3 - 果您看过别的程序书也许也有类似的程序: #include #include void main(void) SCON = 0x50; /串口方式 1,允许接收 TMOD = 0x20; /定时器 1定时方式2 TCON = 0x40; /设定时器 1开始计数 TH1 = 0xE8; /11.0592MHz 1200波特率 TL1 = 0xE8; TI = 1; TR1 = 1; /启动定时器 while(1) printf (Hello World!n); /显示 Hello World 图14 选取芯片 51 单片机
8、C 语言入门教程 - 4 - 图15新建程序文件 这段程序的功能是不断从串口输出“Hello World!”字符,我们先不管程序的语法和意思吧,先看看如何把它加入到项目中和如何编译试运行。 (4)点击图 15 中的 3 保存新建的程序,也可以用菜单 FileSave 或快捷键 Ctrl+S进行保存。因是新文件所以保存时会弹出类似图 13 的文件操作窗口,我们把第一个程序命名为 test1.c,保存在项目所在的目录中,这时您会发现程序单词有了不同的颜色,说明KEIL的C 语法检查生效了。如图 16鼠标在屏幕左边的 Source Group1文件夹图标上右击弹出菜单,在这里可以做在项目中增加减少文
9、件等操作。我们选“Add File to Group Source Group 1”弹出文件窗口,选择刚刚保存的文件,按 ADD 按钮,关闭文件窗,程序文件已加到项目中了。这时在 Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有了文件,点击它可以展开查看。 图 16 把文件加入到项目文件组中 51 单片机 C 语言入门教程 - 5 - (5)C 程序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的 HEX 文件,如何设置生成 HEX 文件就请看下面的第三
10、课。我们先来看图 17 吧,图中 1、2、3 都是编译按钮,不同是 1 是用于编译单个文件。2 是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在 3右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5 是菜单中的它们,我个人就不习惯用它了。嘿嘿,这个项目只有一个文件,您按 123 中的一个都可以编译。按了?好快哦,呵呵。在 4中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6 是有一个小放大镜的按钮,这就是开启关闭调试模式的按钮,它也存在于菜
11、单DebugStartStop Debug Session,快捷键为 Ctrl+F5。 图 17编译程序 (6)进入调试模式,软件窗口样式大致如图 18所示。图中 1为运行,当程序处于停止状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序回到最开头处执行。按 4 我们可以打开 5 中的串行调试窗口,这个窗口我们可以看到从 51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有,这里不再一一介绍大家不妨找找看,其它的功能也会在后面的课程中慢慢介绍。首先按 4 打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打印“
12、Hello World! ” 。呵呵,是不是不难呀?这样就完成了您的第一个 C项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启关闭调试模式按钮。然后我们就可以进行关闭 KEIL等相关操作了。 到此为止,第一课已经完结了,初步学习了一些 KEIL uVision2的项目文件创建、编译、运行和软件仿真的基本操作方法。其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,建议大家多多使用,还有就是对这里所讲的操作方法举一反三用于类似的操作中。 51 单片机 C 语言入门教程 - 6 - 图 18 调试运行程序 第二课 初步认识51 芯
13、片 上一课我们的第一个项目完成了,可能有懂C语言的朋友会说, “这和PC机上的 C语言没有多大的区别呀” 。的确没有太大的区别,C 语言只是一种程序语言的统称,针对不同的处理器相关的 C语言都会有一些细节的改变。编写 PC 机的C 程序时,如要对硬件编程您就必须对硬件要有一定的认识,51 单片机编程就更是如此,因它的开发应用是不可与硬件脱节的,所以我们先要来初步认识一下 51 苾片的结构和引脚功能。MSC51 架构的芯片种类很多, 具体特点和功能不尽相同 (在以后编写的附录中会加入常用的一些 51芯片的资料列表) ,在此后的教程中就以 Atmel 公司的 AT89C51 和 AT89C2051
14、 为中心对象来进行学习,两者是AT89系列的典型代表,在爱好者中使用相当的多,应用资料很多,价格便宜,是初学 51的首选芯片。嘿嘿,口水多多有点卖广告之嫌了。 :P 图21 AT89C51 和 AT89C2051 引脚功能图 51 单片机 C 语言入门教程 - 7 - AT89C51 AT89C2051 4KB 可编程Flash 存储器(可擦写1000次) 2KB 可编程Flash 存储器(可擦写1000次)三级程序存储器保密 两级程序存储器保密 静态工作频率:0Hz-24MHz 静态工作频率:0Hz-24MHz 128字节内部 RAM 128字节内部 RAM 2 个 16 位定时/计数器 2
15、个 16 位定时/计数器 一个串行通讯口 一个串行通讯口 6 个中断源 6 个中断源 32条I/O 引线 15 条I/O 引线 片内时种振荡器 1个片内模拟比较器 表21 AT89C51 和AT89C2051 主要性能表 图21中是AT89C51和AT89C2051的引脚功能图。 而表21中则是它们的主要性能表。以上可以看出它们是大体相同的,由于 AT89C2051 的 IO 线很少,导致它无法外加 RAM 和程序 ROM,片内Flash存储器也少,但它的体积比AT89C51 小很多,以后大家可根据实际需要来选用。它们各有其特点但其核心是一样的,下面就来看看 AT89C51 的引脚具体功能。
16、1.电源引脚 Vcc 40 电源端 GND 20 接地端 工作电压为 5V,另有AT89LV51 工作电压则是2.7-6V, 引脚功能一样。 2.外接晶体引脚 图22 外接晶体引脚 XTAL1 19 XTAL2 18 XTAL1 是片内振荡器的反相放大器输入端,XTAL2 则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2 悬空。内部方式时,时钟发生器对振荡脉冲二分频, 如晶振为12MHz, 时钟频率就为6MHz。 晶振的频率可以在1MHz-24MHz内选择。电容取 30PF左右。 51 单片机 C 语言入门教程 - 8 - 型号同样为AT89C51 的芯片, 在其后
17、面还有频率编号, 有12,16,20,24MHz可选。大家在购买和选用时要注意了。如 AT89C51 24PC就是最高振荡频率为 24MHz,40P6封装的普通商用芯片。 3.复位 RST 9 在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在此引腿时,将使单片机复位,只要这个脚保持高电平,51芯片便循环复位。复位后P0P3 口均置 1 引脚表现为高电平,程序计数器和特殊功能寄存器 SFR 全部清零。当复位脚由高电平变为低电平时,芯片为ROM的00H 处开始运行程序。常用的复位电路如图 23 所示。 复位操作不会对内部RAM 有所影响。 图 23 常用复位电路 4.输入输出引
18、脚 (1) P0 端口P0.0-P0.7 P0是一个8位漏极开路型双向I/O 端口,端口置 1(对端口写 1)时作高阻抗输入端。作为输出口时能驱动 8 个 TTL。 对内部 Flash 程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。 在访问外部程序和外部数据存储器时,P0 口是分时转换的地址(低 8 位)/数据总线,访问期间内部的上拉电阻起作用。 (2) P1端口P1.0P1.7 P1是一个带有内部上拉电阻的8 位双向I/0端口。输出时可驱动 4个 TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。 对内部 Flash 程序存储器编程时,接收低 8 位地
19、址信息。 (3) P2端口P2.0P2.7 P2是一个带有内部上拉电阻的8位双向 I/0端口。输出时可驱动 4个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部 Flash 程序存储器编程时,接收高 8 位地址和控制信息。 在访问外部程序和 16位外部数据存储器时,P2口送出高 8位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。 51 单片机 C 语言入门教程 - 9 - (4) P3端口P3.0P3.7 P2是一个带有内部上拉电阻的8 位双向 I/0端口。输出时可驱动4个 TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。 对内部 F
20、lash 程序存储器编程时,接控制信息。除此之外 P3 端口还用于一些专门功能,具体请看 表 22.。 P13 端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。 P3 引脚 兼用功能 P3.0 串行通讯输入(RXD) P3.1 串行通讯输出(TXD) P3.2 外部中断0( INT0) P3.3 外部中断 1(INT1) P3.4 定时器0 输入(T0) P3.5 定时器1 输入(T1) P3.6 外部数据存储器写选通 WR P3.7 外部数据存储器写选通 RD 表22 P3 端口引脚兼用功能表 呼!一口气说了那么多,停一下吧。嗯,什么?什么叫上拉电阻?上拉电阻简单来说
21、就是把电平拉高,通常用 4.710K的电阻接到 Vcc电源,下拉电阻则是把电平拉低,电阻接到 GND 地线上。具体说明也不是这里要讨论的,接下来还是接着看其它的引脚功能吧。 5.其它的控制或复用引脚 (1) ALE/PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址的低位字节。即使不访问外部存储器,ALE 端仍以不变的频率输出脉冲信号(此频率是振荡器频率的 1/6)。在访问外部数据存储器时,出现一个ALE脉冲。对Flash 存储器编程时,这个引脚用于输入编程脉冲 PROG (2) PSEN 29 该引是外部程序存储器的选通信号输出端。当 AT89C51 由外部程序存储器
22、取指令或常数时,每个机器周期输出 2 个脉冲即两次有效。但访问外部数据存储器时,将不会有脉冲输出。 (3) EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。要使AT89C51 只访问外部程序存储器(地址为0000H-FFFFH),这时该引脚必须保持低电平。对 Flash 存储器编程时,用于施加 Vpp 编程电压。Vpp 电压有两种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。具体如表23 所列。 Vpp = 12V Vpp = 5V 印刷在芯片面上的型号 AT89C51 xxxx YYWW AT89LV51 xxxx YYWW AT89C51 xxx
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- c51 单片机 语言 教程
限制150内