第01课了解单⽚机的原理控制⼀个LED灯的亮和灭-----51单⽚
机C语⾔试验教程
第⼀课,了解单⽚机及单⽚机的控制原理和DX516 的⽤法,控制⼀个LED 灯的亮和灭
本章学习内容:
单⽚机基本原理,如何使⽤DX516 仿真器,如何编程点亮和灭掉⼀个LED 灯,如何进⼊KEILC51uV
调试环境,如何使⽤单步,断点,全速,停⽌的调试⽅法
聂⼩猛 2006 年6 ⽉
单⽚机现在是越来越普及了,学习单⽚机的热潮也⼀阵阵赶来,许多⼈因为⼯作需要或者个⼈兴趣需
要学习单⽚机。可以说,掌握了单⽚机开发,就多了⼀个饭碗。
51 单⽚机已经有30 多年的历史了,在中国,⾼校的单⽚机课程⼤多数都是51,⽽51 经过这么多年的
发展,也增长了许多的系列,功能上有了许多改进,也扩展出了不少分⽀。⽽国内书店的单⽚机专架上,
也⼤多数都是51 系列。可以预见,51 单⽚机在市场上只会越来越多,功能只会越来越丰富,在可以预见的
数⼗年内是不可能会消失的。
作为⼀个初学者,如何单⽚机⼊门?需要那些知识和设备呢?知识上,其实不需要多少东西,会简单
的C 语⾔,知道51 单⽚机的基本结构就可以了。⼀般的⼤学毕业⽣都可以快速⼊门,⾃学过这2 门课程的
⾼中⽣也够条件。
就算你没有学过单⽚机课程,只掌握了C 语⾔的⽪⽑,通过本系列的教程,您也会逐渐的进⼊单⽚机
的⼤门。当然在学习的过程中,您还是必须多去研读单⽚机书籍,了解他们的基本结构及⼯作⽅式。
下⾯以51 为例来了解⼀下单⽚机是什么东西,控制原理⼜是什么?
在数字电路中,电压信号只有两种情况,⾼电平和低电平,⽤数字来记录就是1 和0。单⽚机内部的
CPU,寄存器,总线等等结构都是通过1 和0 两种信号来运作的,数据也是以1 或者0 来保存的。单⽚
的输⼊输出管脚,也就是IO ⼝,也是只输出或识别1 和0 两种信号,也就是⾼电平和低电平。当单⽚机输
出⼀个或⼀组电平信号到IO ⼝后,外部的设备就可以读到这些信号,并进⾏相应操作,这就是单⽚机对外
部的控制。当外部⼀个或⼀组电平信号送到单⽚机的IO ⼝时,单⽚机也可以读到这些信号,并进⾏分析操
作,这就是单⽚机对外部设备信号的读取。当然实际的操作中,这些信号可能⼗分复杂,必须严格地按照
规定的时间顺序(时序)输⼊输出。每种设备也都规定了⾃⼰的时序,只要都严格遵守,就可以控制任何
设备,做出只要你想象得出的任何事情。
您可能会再问,我如何让单⽚机去控制和分析外部设备呢?答案是程序,您可以编写相关的程序,并
且把他们烧写到单⽚机内部的程序空间,单⽚机在上电时,就会⼀步⼀步按照您写的程序去执⾏指令,做
您想做的事情。
在51 标准芯⽚中,有32 个输⼊输出IO,分为4 组,每组8 个,分别为P0 ⼝,P1 ⼝,P2 ⼝,P3 ⼝。
P1 ⼝的8 条脚就⽤P1.0 ⾄P1.7 表⽰,其余类似。51 就是⽤这32 个⼝来完成所有外部操作的。对于51 的
内部结构,如果您已经了解,那是最好;如果不懂,也可以先放下,在完成了本教程开始的⼏个章节之后,
您就会⼤有兴趣,⾃⼰去寻资料阅读了。当然,如果您希望成为⼀个优秀的单⽚机开发程序员,还是必
须熟悉单⽚机的内部结构及⼯作原理,切不可偷懒!
在这⼀章,您将⽤程序去控制⼀个LED 发光管的亮和灭。你应该知道,LED 发光管在通过⼀定电流时
亮,不通电就灭。为了不让LED 通过太⼤的电流把它烧坏,我们还要串上限流电阻。51 的IO 是弱上拉的
⽅式,在输出⾼电平时,只能输出⼏⼗微安的电流到地,⽽在输出低电平时,VCC 电源可以输⼊⼏⼗毫安
的电流到IO。⼀般LED 需要10 毫安左右电流点亮,我们就将LED 接在电源VCC 和IO ⼝之间,中间串
上电阻,当IO 输出低电平时,灯就亮了,反之,灯就灭了。我们在这个程序⾥要控制的是P1.0。请参考⼀
下我们将要使⽤的试验板的电路图,这个试验板是在购买dx516 仿真器是赠送的。
图1,试验电路图
图2:试验板外观图
2。电源
因为⽤户板使⽤电流不⼤,可以使⽤usb 取电,usb 最⼤电流可以提供500mA,将usb 取电板插⼊电脑的usb ⼝中。(实际应⽤中,如果⽤户板使⽤电流超过100mA,我们就建议使⽤外部电源)
3。启动
在仿真器上电,或者按⼀下仿真器上⾯的按钮时,仿真器会发出“嘀-”,表⽰仿真器正常启动。同时
仿真器上⾯的灯闪烁⼀次,表⽰进⼊正常仿真状态。
4。仿真设置
第⼀个设置:
C51 ⽤户请在您的代码的main()函数前⾯,加上⼀句:
char code dx516[3] _at_ 0x003b;
如果以上设置你没有做,在装载过程中,仿真器会发出“嘀嘀嘀” 的三声短声报警,这时的仿真结果将
可能不正确。
在我们的例程中,这句话已经加⼊了。这句话并不会影响程序的⼯作,可以⼀直保留。
第⼆个设置:
请在硬件仿真设置选项中,选择serial interrupt,在前⾯打勾。
如果以上设置你没有做,在装载过程中,仿真器会发出“嘀-” 的⼀声长声报警,这时的仿真结果将可
能不正确。
其余设置:
请选择use keil Monitor-51 Driver ,这样才会使⽤硬件仿真
请选择load Application at start ,在启动时直接装载程序
请选择Go till main ,装载后直接运⾏到main 函数
请在硬件仿真设置选项中,选择115200bps 波特率,所有cache 都可以不选,或者只选cache code。同时请选择正确的串⼝号。
图4 仿真设置
好了,现在可以开始做试验了,我们打开已经建⽴好的⼯程和编写好的程序试验。顺便还会学习⼀下程序调试的技巧。⾄于如何建⽴⼀个新⼯程,请参考C51 的帮助⽂件,或者⾃⼰摸索⼀下, 的DX516
专栏⾥也有“⼀步步教你如何第⼀次做…”的⽂章可以学习。
请双击lessoncode01 ⽬录下的lesson1.uv2,打开后界⾯如下:
图6:程序界⾯
这个界⾯是uV3 的,和uV2 是⼀样⽤的。
点⼀下上图第三排第2 或者第3 个按钮(您的编译器按钮位置不⼀定在那个位置,⾃⼰),就可以看
到编译结果了。上⾯显⽰是0errrs,0warnings,这是最佳的编译结果,如果有error,则⽆法进⾏下⼀步仿真,如果有warning,⼀定要尽量消除,确实⽆法消除的,也要确认不会对程序造成影响,才进⾏下⼀步的仿真。
在编译结果中,我们还可以看到有data,xdata,code 等⽤了多少字节的报告,要注意您的单⽚机中是否有
这么多的资源,如果不够,将来烧⽚运⾏时就可能出现问题。⽐如AT89C51 的程序空间是4K,xdata 如果没有外
扩就是0 个,data 是128 个。超出这些范围,程序就不能在AT89c51 中运⾏。不同的芯⽚有不同的容量,如
c语言大学教程SST89E516RD 就有64K 程序,内部768 字节XDATA,还有256 个字节的data。我们的例程中肯定都考虑了这些了,肯定不会超出,因为DX516 仿真器是和SST89E516RD 有同样的容量的,将来⾃⼰开发时就要注意了。
下⾯我们故意把第9 ⾏的P10 写成P11,点编译,因为没有预先定义P11,所以就报告错误了,如下
图:

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。