图3.6 把文件加入到项目文件组中
(5)C 程序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只是用做学习新建程序项目和编译运行仿真的基本方法,所以使用软件默认的编译设置,它不会生成用于芯片烧写的HEX 文件,如何设置生成HEX 文件就请看下面的第三课。我们先来看图1-7 吧,图中1、2、3 都是编译按钮,不同是1 是用于编译单个文件。2 是编译当前项目,如果先前编译过一次之后文件没有做动编辑改动,这时再点击是不会再次重新编译的。3 是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在3 右边的是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。在4 中可以看到编译的错误信息和使用的系统资源情况等,以后我们要查错就靠它了。6 是有一个小放大镜的按钮,这就是开启\\关闭调试模式的按钮,它也存在于菜单Debug-Start\\Stop Debug Session,快捷键为Ctrl+F5。
图3.7 编译程序
(6)进入调试模式,软件窗口样式大致如图1-8 所示。图中1 为运行,当程序处于停止状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序回到最开头处执行。按4 我们可以打开5 中的串行调试窗口,这个窗口我们可以看到从51芯片的串行口输入输出的字符,这里的第一个项目也正是在这里看运行结果。这些在菜单中也有,这里不再一一介绍大家不妨找找看,其它的功能也会在后面的课程中慢慢介绍。首先按4 打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打印“HelloWorld!”。呵呵,是不是不难呀?这样就完成了您的第一个C 项目。最后我们要停止程序运行回到文件编辑模式中,就要先按停止按钮再按开启\\关闭调试模式按钮。然后我们就可以进行关闭KEIL 等相关操作了。
到此为止,初步学习了一些KEIL uVision2 的项目文件创建、编译、运行和软件仿真的基本操作方法。其中一直有提到一些功能的快捷键的使用,的确在实际的开发应用中快捷键的运用可以大大提高工作的效率,建议大家多多使用,还有就是对这里所讲的操作方法举一反三用于类似的操作中。
图3.8 调试运行程序
3.2 初步认识51 芯片
上一接我们的第一个项目完成了,可能有懂C 语言的朋友会说,“这和PC 机上的C 语言没有多大的区别呀”。的确没有太大的区别,C 语言只是一种程序语言的统称,针对不同的处理器相关的C 语言都会有一些细节的改变。编写PC 机的C 程序时,如要对硬件编程您就必须对硬件要有一定的认识,51 单片机编程就更是如此,因它的开发应用是不可与硬件脱节的,所以我们先要来初步认识一下51 苾片的结构和引脚功能。MSC51 架构的芯片种类很多,具体特点和功能不尽相同(在以后编写的附录中会加入常用的一些51 芯片的资料列表),
在此后的教程中就以Atmel 公司的AT89C51 和AT89C2051 为中心对象来进行学习,两者是AT89 系列的典型代表,在爱好者中使用相当的多,应用资料很多,价格便宜,是初学51 的首选芯片。嘿嘿,口水多多有点卖广告之嫌了。:P
图3.9 AT89C51 和AT89C2051 引脚功能图
表3.1 AT89C51 和AT89C2051 主要性能表
图3.9 中是AT89C51 和AT89C2051 的引脚功能图。而表3.1 中则是它们的主要性能表。
以上可以看出它们是大体相同的,由于AT89C2051 的IO 线很少,导致它无法外加RAM 和程序ROM,片内Flash 存储器也少,但它的体积比AT89C51 小很多,以后大家可根据实际需要来选用。它们各有其特点但其核心是一样的,下面就来看看AT89C51 的引脚具体功能。
1.电源引脚
Vcc 40 电源端, GND 20 接地端。
*工作电压为5V,另有AT89LV51 工作电压则是2.7-6V, 引脚功能一样。 2.外接晶体引脚
图3.10 外接晶体引脚
XTAL1 19,XTAL2 18。
XTAL1 是片内振荡器的反相放大器输入端,XTAL2 则是输出端,使用外部振荡器时,外部振荡信号应直接加到XTAL1,而XTAL2 悬空。内部方式时,时钟发生器对振荡脉冲二分频,如晶振为12MHz,时钟频率就为6MHz。晶振的频率可以在1MHz-24MHz内选择。电容取30PF 左右。
同样为AT89C51 的芯片,在其后面还有频率编号,有12,16,20,24MHz 可选。大家在购买和选用时要注意了。如AT89C51 24PC 就是最高振荡频率为24MHz,40P6 封装的普通商用芯片。
3.复位 RST 9
在振荡器运行时,有两个机器周期(24 个振荡周期)以上的高电平出现在此引腿时,
将使单片机复位,只要这个脚保持高电平,51 芯片便循环复位。复位后P0-P3 口均置1 引脚表现为高电平,程序计数器和特殊功能寄存器SFR 全部清零。当复位脚由高电平变为低电平时,芯片为ROM 的00H 处开始运行程序。常用的复位电路如图3.11 所示。
*复位操作不会对内部RAM 有所影响。
图3.11 常用复位电路
4.输入输出引脚
(1) P0 端口[P0.0-P0.7] P0 是一个8 位漏极开路型双向I/O 端口,端口置1(对端口写1)时作高阻抗输入端。作为输出口时能驱动8 个TTL。对内部Flash 程序存储器编程时,接收指令字节;校验程序时输出指令字节,要求外接上拉电阻。在访问外部程序和外部数据存储器时,P0 口是分时转换的地址(低8 位)/数据总线,访问期间内部的上拉电阻起作用。
(2) P1 端口[P1.0-P1.7] P1 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接收低8 位地址信息。
(3) P2 端口[P2.0-P2.7] P2 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接收高8 位地址和控制信息。
在访问外部程序和16 位外部数据存储器时,P2 口送出高8 位地址。而在访问8位地址的外部数据存储器时其引脚上的内容在此期间不会改变。
(4) P3 端口[P3.0-P3.7] P2 是一个带有内部上拉电阻的8 位双向I/0 端口。输出时可驱动4 个TTL。端口置1 时,内部上拉电阻将端口拉到高电平,作输入用。对内部Flash 程序存储器编程时,接控制信息。除此之外P3 端口还用于一些专门功能,具体请看 表2-2.。
*P1-3 端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出一定的电流。