文档库 最新最全的文档下载
当前位置:文档库 › 51单片机C语言入门教程--磁动力电子工作室

51单片机C语言入门教程--磁动力电子工作室

51单片机C语言入门教程--磁动力电子工作室
51单片机C语言入门教程--磁动力电子工作室

51 单片机 C 语言入门教程(磁动力工作室) 51 单片机 C 语言学习杂记
学习单片机实在不是件易事,一来要购买高价格的编程器,仿真器,二来要学习编程语 言,还有众多种类的单片机选择真是件让人头痛的事。在众多单片机中 51 架构的芯片风行 很久,学习资料也相对很多,是初学的较好的选择之一。51 的编程语言常用的有二种,一 种是汇编语言,一种是 C 语言。汇编语言的机器代码生成效率很高但可读性却并不强,复 杂一点的程序就更是难读懂,而 C 语言在大多数情况下其机器代码生成效率和汇编语言相 当,但可读性和可移植性却远远超过汇编语言,而且 C 语言还可以嵌入汇编来解决高时效 性的代码编写问题。对于开发周期来说,中大型的软件编写用 C 语言的开发周期通常要小 于汇编语言很多。综合以上 C 语言的优点,我在学习时选择了 C 语言。以后的教程也只是 我在学习过程中的一些学习笔记和随笔,在这里加以整理和修改,希望和大家一起分享,一 起交流,一起学习,一起进步。 *注:可以肯定的说这个教程只是为初学或入门者准备的,笔者本人也只是菜鸟一只, 有望各位大侠高手指点错误提出建议。 明浩 2003-3-30 pnzwzw@https://www.wendangku.net/doc/ea12368036.html,
第一课
建立您的第一个 C 项目
使用 C 语言肯定要使用到 C 编译器,以便把写好的 C 程序编译为机器码,这样单片机 才能执行编写好的程序。KEIL uVISION2 是众多单片机应用开发软件中优秀的软件之一, 它支持众多不同公司的 MCS51 架构的芯片,它集编辑,编译,仿真等于一体,同时还支持, PLM,汇编和 C 语言的程序设计,它的界面和常用的微软 VC++的界面相似,界面友好,易 学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发 51 应用的工程师或 普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了 KEIL51 软件,要使用 KEIL51 软件,必需先要安装它。KEIL51 是一个 商业的软件,对于我们这些普通爱好者可以到 KEIL 中国代理周立功公司的网站上下载一份 能编译 2K 的 DEMO 版软件,基本可以满足一般的个人学习和小型应用的开发。 (安装的方 法和普通软件相当这里就不做介绍了) 安装好后,您是不是迫不及待的想建立自己的第一个 C 程序项目呢?下面就让我们一 起来建立一个小程序项目吧。或许您手中还没有一块实验板,甚至没有一块单片机,不过没 有关系我们可以通过 KEIL 软件仿真看到程序运行的结果。 首先当然是运行 KEIL51 软件。怎么打开?噢,天!那您要从头学电脑了。呵呵,开个 玩笑,这个问题我想读者们也不会提的了:P。运行几秒后,出现如图 1-1 的屏幕。
图 1-1
启动时的屏幕
-1-

51 单片机 C 语言入门教程(磁动力工作室)
接着按下面的步骤建立您的第一个项目: (1)点击 Project 菜单,选择弹出的下拉式菜单中的 New Project,如图 1-2。接着弹 出一个标准 Windows 文件对话窗口,如图 1-3,这个东东想必大家是见了 N 次的了,用法 技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。在“文件名”中输入您的 第一个 C 程序项目名称,这里我们用“test” ,这是笔者惯用的名称,大家不必照搬就是了, 只要符合 Windows 文件规则的文件名都行。 “保存”后的文件扩展名为 uv2,这是 KEIL uVision2 项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。
图 1-2
New Project 菜单
图 1-3
文件窗口
(2)选择所要的单片机,这里我们选择常用的 Ateml 公司的 AT89C51。此时屏幕如图 1-4 所示。AT89C51 有什么功能、特点呢?不用急,看图中右边有简单的介绍,稍后的章 节会作较详细的介绍。完成上面步骤后,我们就可以进行程序的编写了。 (3)首先我们要在项目中创建新的程序文件或加入旧程序文件。如果您没有现成的程 序,那么就要新建一个程序文件。在 KEIL 中有一些程序的 Demo,在这里我们还是以一个 C 程序为例介绍如何新建一个 C 程序和如何加到您的第一个项目中吧。点击图 1-5 中 1 的 新建文件的快捷按钮,在 2 中出现一个新的文字编辑窗口,这个操作也可以通过菜单 File
-2-

51 单片机 C 语言入门教程(磁动力工作室)
-New 或快捷键 Ctrl+N 来实现。好了,现在可以编写程序了,光标已出现在文本编辑窗口 中,等待我们的输入了。第一程序嘛,写个简单明了的吧。下面是经典的一段程序,呵,如 果您看过别的程序书也许也有类似的程序: #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 } }
图 1-4 选取芯片
-3-

51 单片机 C 语言入门教程(磁动力工作室)
图 1-5 新建程序文件 这段程序的功能是不断从串口输出“Hello World!”字符,我们先不管程序的语法和意思吧, 先看看如何把它加入到项目中和如何编译试运行。 (4)点击图 1-5 中的 3 保存新建的程序,也可以用菜单 File-Save 或快捷键 Ctrl+S 进行保存。因是新文件所以保存时会弹出类似图 1-3 的文件操作窗口,我们把第一个程序 命名为 test1.c,保存在项目所在的目录中,这时您会发现程序单词有了不同的颜色,说明 KEIL 的 C 语法检查生效了。如图 1-6 鼠标在屏幕左边的 Source Group1 文件夹图标上右击 弹出菜单,在这里可以做在项目中增加减少文件等操作。我们选“Add File to Group ‘Source Group 1’”弹出文件窗口,选择刚刚保存的文件,按 ADD 按钮,关闭文件窗,程序文件已 加到项目中了。这时在 Source Group1 文件夹图标左边出现了一个小+号说明,文件组中有 了文件,点击它可以展开查看。
图 1-6 把文件加入到项目文件组中
-4-

51 单片机 C 语言入门教程(磁动力工作室)
(5)C 程序文件已被我们加到了项目中了,下面就剩下编译运行了。这个项目我们只 是用做学习新建程序项目和编译运行仿真的基本方法, 所以使用软件默认的编译设置, 它不 会生成用于芯片烧写的 HEX 文件,如何设置生成 HEX 文件就请看下面的第三课。我们先 来看图 1-7 吧,图中 1、2、3 都是编译按钮,不同是 1 是用于编译单个文件。2 是编译当 前项目, 如果先前编译过一次之后文件没有做动编辑改动, 这时再点击是不会再次重新编译 的。3 是重新编译,每点击一次均会再次编译链接一次,不管程序是否有改动。在 3 右边的 是停止编译按钮,只有点击了前三个中的任一个,停止按钮才会生效。5 是菜单中的它们, 我个人就不习惯用它了。嘿嘿,这个项目只有一个文件,您按 123 中的一个都可以编译。按 了?好快哦,呵呵。在 4 中可以看到编译的错误信息和使用的系统资源情况等,以后我们要 查错就靠它了。6 是有一个小放大镜的按钮,这就是开启\关闭调试模式的按钮,它也存在于 菜单 Debug-Start\Stop Debug Session,快捷键为 Ctrl+F5。
图 1-7 编译程序 (6)进入调试模式,软件窗口样式大致如图 1-8 所示。图中 1 为运行,当程序处于停止 状态时才有效,2 为停止,程序处于运行状态时才有效。3 是复位,模拟芯片的复位,程序 回到最开头处执行。按 4 我们可以打开 5 中的串行调试窗口,这个窗口我们可以看到从 51 芯片的串行口输入输出的字符, 这里的第一个项目也正是在这里看运行结果。 这些在菜单中 也有,这里不再一一介绍大家不妨找找看,其它的功能也会在后面的课程中慢慢介绍。首先 按 4 打开串行调试窗口,再按运行键,这时就可以看到串行调试窗口中不断的打印“Hello World!。呵呵,是不是不难呀?这样就完成了您的第一个 C 项目。最后我们要停止程序运 ” 行回到文件编辑模式中,就要先按停止按钮再按开启\关闭调试模式按钮。然后我们就可以 进行关闭 KEIL 等相关操作了。 到此为止,第一课已经完结了,初步学习了一些 KEIL uVision2 的项目文件创建、编译、 运行和软件仿真的基本操作方法。 其中一直有提到一些功能的快捷键的使用, 的确在实际的
-5-

51 单片机 C 语言入门教程(磁动力工作室)
开发应用中快捷键的运用可以大大提高工作的效率, 建议大家多多使用, 还有就是对这里所 讲的操作方法举一反三用于类似的操作中。
图 1-8 调试运行程序
第二课
初步认识 51 芯片
上一课我们的第一个项目完成了, 可能有懂 C 语言的朋友会说, “这和 PC 机上的 C 语言 没有多大的区别呀” 。的确没有太大的区别,C 语言只是一种程序语言的统称,针对不同的 处理器相关的 C 语言都会有一些细节的改变。编写 PC 机的 C 程序时,如要对硬件编程您就 必须对硬件要有一定的认识,51 单片机编程就更是如此,因它的开发应用是不可与硬件脱 节的,所以我们先要来初步认识一下 51 苾片的结构和引脚功能。MSC51 架构的芯片种类很 多, 具体特点和功能不尽相同 (在以后编写的附录中会加入常用的一些 51 芯片的资料列表) , 在此后的教程中就以 Atmel 公司的 AT89C51 和 AT89C2051 为中心对象来进行学习,两者是 AT89 系列的典型代表,在爱好者中使用相当的多,应用资料很多,价格便宜,是初学 51 的 首选芯片。嘿嘿,口水多多有点卖广告之嫌了。 :P
-6-

51 单片机 C 语言入门教程(磁动力工作室)
图 2-1 AT89C51
AT89C51 和 AT89C2051 引脚功能图 AT89C2051 2KB 可编程 Flash 存储器(可擦写 1000 次) 两级程序存储器保密 静态工作频率:0Hz-24MHz 128 字节内部 RAM 2 个 16 位定时/计数器 一个串行通讯口 6 个中断源 15 条 I/O 引线 1 个片内模拟比较器 AT89C51 和 AT89C2051 主要性能表
4KB 可编程 Flash 存储器(可擦写 1000 次) 三级程序存储器保密 静态工作频率:0Hz-24MHz 128 字节内部 RAM 2 个 16 位定时/计数器 一个串行通讯口 6 个中断源 32 条 I/O 引线 片内时种振荡器 表 2-1
图 2-1 中是 AT89C51 和 AT89C2051 的引脚功能图。 而表 2-1 中则是它们的主要性能表。 以上可以看出它们是大体相同的,由于 AT89C2051 的 IO 线很少,导致它无法外加 RAM 和程 序 ROM,片内 Flash 存储器也少,但它的体积比 AT89C51 小很多,以后大家可根据实际需要 来选用。它们各有其特点但其核心是一样的,下面就来看看 AT89C51 的引脚具体功能。 1.电源引脚 Vcc 40 电源端 GND 20 接地端 *工作电压为 5V,另有 AT89LV51 工作电压则是 2.7-6V, 引脚功能一样。 2.外接晶体引脚
-7-

51 单片机 C 语言入门教程(磁动力工作室)
图 2-2
外接晶体引脚
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 处开始运行程序。常用的复位电路如图 2- 3 所示。 *复位操作不会对内部 RAM 有所影响。
-8-

51 单片机 C 语言入门教程(磁动力工作室)
图 2-3
常用复位电路
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 位外部数据存储器时, 口送出高 8 位地址。 P2 而在访问 8 位地址的外部数据存储器时其引脚上的内容在此期间不会改变。 (4) P3 端口[P3.0-P3.7] P2 是一个带有内部上拉电阻的 8 位双向 I/0 端口。输出时 可驱动 4 个 TTL。端口置 1 时,内部上拉电阻将端口拉到高电平,作输入用。 对内部 Flash 程序存储器编程时,接控制信息。除此之外 P3 端口还用于一些 专门功能,具体请看 表 2-2.。 *P1-3 端口在做输入使用时,因内部有上接电阻,被外部拉低的引脚会输出 一定的电流。 P3 引脚 P3.0 P3.1 P3.2 兼用功能 串行通讯输入(RXD) 串行通讯输出(TXD) 外部中断 0( INT0)
-9-

51 单片机 C 语言入门教程(磁动力工作室)
P3.3 P3.4 P3.5 P3.6 P3.7 表 2-2 外部中断 1(INT1) 定时器 0 输入(T0) 定时器 1 输入(T1) 外部数据存储器写选通 WR 外部数据存储器写选通 RD P3 端口引脚兼用功能表
呼!一口气说了那么多,停一下吧。嗯,什么?什么叫上拉电阻?上拉电阻简单来说就 是把电平拉高,通常用 4.7-10K 的电阻接到 Vcc 电源,下拉电阻则是把电平拉低,电阻接 到 GND 地线上。具体说明也不是这里要讨论的,接下来还是接着看其它的引脚功能吧。 5.其它的控制或复用引脚 (1) ALE/PROG 30 访问外部存储器时,ALE(地址锁存允许)的输出用于锁存地址 的低位字节。即使不访问外部存储器,ALE 端仍以不变的频率输出脉冲信号(此 频率是振荡器频率的 1/6)。在访问外部数据存储器时,出现一个 ALE 脉冲。对 Flash 存储器编程时,这个引脚用于输入编程脉冲 PROG (2) PSEN 29 该引是外部程序存储器的选通信号输出端。当 AT89C51 由外部程序存 储器取指令或常数时,每个机器周期输出 2 个脉冲即两次有效。但访问外部数 据存储器时,将不会有脉冲输出。 (3) EA/Vpp 31 外部访问允许端。当该引脚访问外部程序存储器时,应输入低电平。 要使 AT89C51 只访问外部程序存储器(地址为 0000H-FFFFH),这时该引脚必须 保持低电平。对 Flash 存储器编程时,用于施加 Vpp 编程电压。Vpp 电压有两 种,类似芯片最大频率值要根据附加的编号或芯片内的特征字决定。具体如表 2-3 所列。 Vpp = 12V 印刷在芯片面上的型号 AT89C51 xxxx YYWW 030H=1EH 片内特征字 表 2-3 031H=51H 032H=FFH AT89LV51 xxxx YYWW 030H=1EH 031H=61H 032H=FFH Vpp = 5V AT89C51 xxxx-5 YYWW 030H=1EH 031H=51H 032H=05H AT89LV51 xxxx-5 YYWW 030H=1EH 031H=61H 032H=05H
Vpp 与芯片型号和片内特征字的关系
看到这您对 AT89C51 引脚的功能应该有了一定的了解了, 引脚在编程和校验时的时序我 们在这里就不做详细的探讨, 通常情况下我们也没有必要去撑握它, 除非您想自己开发编程 器。 下来的课程我们要开始以一些简单的实例来讲述 C 程序的语法和编写方法技巧, 中间穿 插相关的硬件知识如串口,中断的用法等等。
第三课
生成 HEX 文件和最小化系统
在开始C语言的主要内容时,我们先来看看如何用KEIL uVISION2来编译生成用于烧写 芯片的HEX文件。HEX文件格式是Intel公司提出的按地址排列的数据信息,数据宽度为字 节,所有数据使用16进制数字表示, 常用来保存单片机或其他处理器的目标程序代码。它保 存物理程序存储区中的目标代码映象。 一般的编程器都支持这种格式。 我们先来打开第一课
- 10 -

51 单片机 C 语言入门教程(磁动力工作室)
做的第一项目,打开它的所在目录,找到test.Uv2的文件就可以打开先前的项目了。然后右 击图3-1中的1项目文件夹,弹出项目功能菜单,选Options for Target’Target1’,弹出项目选项 设置窗口,同样先选中项目文件夹图标,这时在Project菜单中也有一样的菜单可选。打开项 目选项窗口,转到Output选项页图3-2所示,图中1是选择编译输出的路径,2是设置编译输 出生成的文件名,3则是决定是否要创建HEX文件,选中它就可以输出HEX文件到指定的路 径中。选好了?好,我们再将它重新编译一次,很快在编译信息窗口中就显示HEX文件创建 到指定的路径中了, 如图3-3。 这样我们就可用自己的编程器所附带的软件去读取并烧到芯 片了,再用实验板看结果,至于编程器或仿真器品种繁多具体方法就看它的说明书了,这里 也不做讨论。 (技巧:一、在图3-1中的1里的项目文件树形目录中,先选中对象,再单击它就可对它进 行重命名操作,双击文件图标便可打开文件。二、在Project下拉菜单的最下方有最近编辑过 的项目路径保存,这里可以快速打开最近在编辑的项目。 )
。 图3-1项目功能菜单
- 11 -

51 单片机 C 语言入门教程(磁动力工作室)
图3-2
项目选项窗口
图 3-3
编译信息窗口
或许您已把编译好的文件烧到了芯片上, 如果您购买或自制了带串口输出元件的学习实 验板, 那您就可以把串口和 PC 机串口相联用串口调试软件或 Windows 的超级终端,将其波特 率设为 1200,就可以看到不停输出的“Hello World!”字样。也许您还没有实验板,那这 里先说说 AT89C51 的最小化系统, 再以一实例程序验证最小化系统是否在运行, 这个最小化 系统也易于自制用于实验。 3-4 便是 AT89C51 的最小化系统,不过为了让我们可以看出它 图 是在运行的,我加了一个电阻和一个 LED,用以显示它的状态,晶振可以根据自己的情况使 用, 一般实验板上是用 11.0592MHz 或 12MHz,使用前者的好外是可以产生标准的串口波特率, 后者则一个机器周期为 1 微秒, 便于做精确定时。 在自己做实验里, 注意的是 VCC 是+5V 的, 不能高于此值,否则将损坏单片机,太低则不能正常工作。在 31 脚要接高电平,这样我们 才能执行片内的程序,如接低电平则使用片外的程序存储器。下面,我们建一个新的项目名 为 OneLED 来验证最小化系统是否可以工作 (所有的例程都可在我的主页下面下载到, 网址:
- 12 -

51 单片机 C 语言入门教程(磁动力工作室)
https://www.wendangku.net/doc/ea12368036.html, 或 https://www.wendangku.net/doc/ea12368036.html, ) 。程序如下: #include //预处理命令 void main(void) //主函数名 { //这是第一种注释方式 unsigned int a; //定义变量 a 为 int 类型 /* 这是第二种注释方式 */ do{ //do while 组成循环 for (a=0; a<50000; a++); //这是一个循环 P1_0 = 0; //设 P1.0 口为低电平,点亮 LED for (a=0; a<50000; a++); //这是一个循环 P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED } while(1); }
图 3-4
AT89C51 最小化系统
这里先讲讲 KEIL C 编译器所支持的注释语句。一种是以“//”符号开始的语句,符号
- 13 -

51 单片机 C 语言入门教程(磁动力工作室)
之后的语句都被视为注释,直到有回车换行。另一种是在“/*”和“*/”符号之内的为注释。 注释不会被 C 编译器所编译。一个 C 应用程序中应有一个 main 主函数,main 函数可以调用 别的功能函数, 但其它功能函数不允许调用 main 函数。 不论 main 函数放在程序中的那个位 置,总是先被执行。用上面学到的知识编译写好的 OneLED 程序,并把它烧到刚做好的最小 化系统中。上电,刚开始时 LED 是不亮的(因为上电复位后所有的 IO 口都置 1 引脚为高电 平) ,然后延时一段时间(for (a=0; a<50000; a++)这句在运行) ,LED 亮,再延时,LED 熄灭,然后交替亮、灭。第一个真正的小应用就做完,呵呵,先不要管它是否实用哦。如果 没有这样的效果那么您就要认真检查一下电路或编译烧写的步骤了。
第四课
数据类型
先来简单说说 C 语言的标识符和关键字。标识符是用来标识源程序中某个对象的名字 的,这些对象可以是语句、数据类型、函数、变量、数组等等。C 语言是大小字敏感的一种 高级语言,如果我们要定义一个定时器 1,可以写做“Timer1” ,如果程序中有“TIMER1” , 那么这两个是完全不同定义的标识符。标识符由字符串,数字和下划线等组成,注意的是第 一个字符必须是字母或下划线,如“1Timer”是错误的,编译时便会有错误提示。有些编译 系统专用的标识符是以下划线开头, 所以一般不要以下划线开头命名标识符。 标识符在命名 时应当简单,含义清晰,这样有助于阅读理解程序。在 C51 编译器中,只支持标识符的前 32 位为有效标识,一般情况下也足够用了,除非你要写天书:P。 关键字则是编程语言保留的特殊标识符, 它们具有固定名称和含义, 在程序编写中不允 许标识符与关键字相同。在 KEIL uVision2 中的关键字除了有 ANSI C 标准的 32 个关键字外 还根据 51 单片机的特点扩展了相关的关键字。其实在 KEIL uVision2 的文本编辑器中编写 C 程序,系统可以把保留字以不同颜色显示,缺省颜色为天蓝色。 (标准和扩展关键字请看 附录一中的附表 1-1 和附表 1-2) 先看表 4-1,表中列出了 KEIL uVision2 C51 编译器所支持的数据类型。在标准 C 语 言中基本的数据类型为 char,int,short,long,float 和 double,而在 C51 编译器中 int 和 short 相同,float 和 double 相同,这里就不列出说明了。下面来看看它们的具体定义: 数据类型 unsigned char signed char unsigned int signed int unsigned long signed long float * bit sfr sfr16 sbit 表 4-1 1. char 字符类型
- 14 -




单字节 单字节 双字节 双字节 四字节 四字节 四字节 1~3 字节 位 单字节 双字节 位
0~255 -128~+127 0~65535 -32768~+32767 0~4294967295 -2147483648~+2147483647 ±1.175494E-38~±3.402823E+38 对象的地址 0或1 0~255 0~65535 0或1
KEIL uVision2 C51 编译器所支持的数据类型

51 单片机 C 语言入门教程(磁动力工作室)
char 类型的长度是一个字节,通常用于定义处理字符数据的变量或常量。分无符号字 符类型 unsigned char 和有符号字符类型 signed char,默认值为 signed char 类型。 unsigned char 类型用字节中所有的位来表示数值,所可以表达的数值范围是 0~255。 signed char 类型用字节中最高位字节表示数据的符号, “0”表示正数, “1”表示负数, 负数用补码表示。 所能表示的数值范围是-128~+127。 unsigned char 常用于处理 ASCII 字符或用于处理小于或等于 255 的整型数。 *正数的补码与原码相同,负二进制数的补码等于它的绝对值按位取反后加 1。 2. int 整型 int 整型长度为两个字节,用于存放一个双字节数据。分有符号 int 整型数 signed int 和无符号整型数 unsigned int,默认值为 signed int 类型。signed int 表示的数值范 围是-32768~+32767,字节中最高位表示数据的符号, “0”表示正数, “1”表示负数。 unsigned int 表示的数值范围是 0~65535。 好了,先停一下吧,我们来写个小程序看看 unsigned char 和 unsigned int 用于延时 的不同效果,说明它们的长度是不同的,呵,尽管它并没有实际的应用意义,这里我们学习 它们的用法就行。依旧用我们上一课的最小化系统做实验,不过要加多一个电阻和 LED,如 图 4-1。实验中用 D1 的点亮表明正在用 unsigned int 数值延时,用 D2 点亮表明正在用 unsigned char 数值延时。
图 4-1
第 4 课实验用电路
- 15 -

51 单片机 C 语言入门教程(磁动力工作室)
我们把这个项目称为 TwoLED,实验程序如下: #include //预处理命令 void main(void) //主函数名 { unsigned int a; //定义变量 a 为 unsigned int 类型 unsigned char b; //定义变量 b 为 unsigned char 类型 do { //do while 组成循环 for (a=0; a<65535; a++) P1_0 = 0; //65535 次设 P1.0 口为低电平,点亮 LED P1_0 = 1; //设 P1.0 口为高电平,熄灭 LED for (a=0; a<30000; a++); //空循环 for (b=0; b<255; b++) P1_1 = 0; //255 次设 P1.1 口为低电平,点亮 LED P1_1 = 1; //设 P1.1 口为高电平,熄灭 LED
for (a=0; a<30000; a++); //空循环 } while(1); } 同样编译烧写,上电运行您就可以看到结果了。很明显 D1 点亮的时间长于 D2 点亮的时间。 程序中的循环延时时间并不是很好确定, 并不太适合要求精确延时的场合, 关于这方面我们 以后也会做讨论。这里必须要讲的是,当定义一个变量为特定的数据类型时,在程序使用该 变量不应使它的值超过数据类型的值域。 如本例中的变量 b 不能赋超出 0~255 的值, for 如 (b=0; b<255; b++)改为 for (b=0; b<256; b++),编译是可以通过的,但运行时就会有问题 出现,就是说 b 的值永远都是小于 256 的,所以无法跳出循环执行下一句 P1_1 = 1,从而 造成死循环。同理 a 的值不应超出 0~65535。大家可以烧片看看实验的运行结果,同样软 件仿真也是可以看到结果的。 3. long 长整型 long 长整型长度为四个字节, 用于存放一个四字节数据。 分有符号 long 长整型 signed long 和无符号长整型 unsigned long,默认值为 signed long 类型。signed int 表示 的数值范围是-2147483648~+2147483647,字节中最高位表示数据的符号, “0”表示正 数, “1”表示负数。unsigned long 表示的数值范围是 0~4294967295。 4. float 浮点型 float 浮点型在十进制中具有 7 位有效数字,是符合 IEEE-754 标准的单精度浮点型数
- 16 -

51 单片机 C 语言入门教程(磁动力工作室)
据,占用四个字节。因浮点数的结构较复杂在以后的章节中再做详细的讨论。 5.* 指针型 指针型本身就是一个变量, 在这个变量中存放的指向另一个数据的地址。 这个指针变量 要占据一定的内存单元, 对不同的处理器长度也不尽相同, C51 中它的长度一般为 1~ 在 3 个字节。 指针变量也具有类型, 在以后的课程中有专门一课做探讨, 这里就不多说了。 6. bit 位标量 bit 位标量是 C51 编译器的一种扩充数据类型,利用它可定义一个位标量,但不能定义 位指针,也不能定义位数组。它的值是一个二进制位,不是 0 就是 1,类似一些高级语 言中的 Boolean 类型中的 True 和 False。 7. sfr 特殊功能寄存器 sfr 也是一种扩充数据类型,点用一个内存单元,值域为 0~255。利用它可以访问 51 单片机内部的所有特殊功能寄存器。如用 sfr P1 = 0x90 这一句定 P1 为 P1 端口在片内 的寄存器,在后面的语句中我们用以用 P1 = 255(对 P1 端口的所有引脚置高电平)之 类的语句来操作特殊功能寄存器。 *AT89C51 的特殊功能寄存器表请看附录二 8.sfr16 16 位特殊功能寄存器 sfr16 占用两个内存单元,值域为 0~65535。sfr16 和 sfr 一样用于操作特殊功能寄存 器,所不同的是它用于操作占两个字节的寄存器,好定时器 T0 和 T1。 9. sbit 可录址位 sbit 同位是 C51 中的一种扩充数据类型,利用它可以访问芯片内部的 RAM 中的可寻址 位或特殊功能寄存器中的可寻址位。如先前我们定义了 sfr P1 = 0x90; //因 P1 端口的寄存器是可位寻址的,所以我们可以定义 sbit P1_1 = P1^1; //P1_1 为 P1 中的 P1.1 引脚 //同样我们可以用 P1.1 的地址去写,如 sbit P1_1 = 0x91; 这样我们在以后的程序语句中就可以用 P1_1 来对 P1.1 引脚进行读写操作了。 通常这些 可以直接使用系统提供的预处理文件, 里面已定义好各特殊功能寄存器的简单名字, 直 接引用可以省去一点时间,我自己是一直用的。当然您也可以自己写自己的定义文件, 用您认为好记的名字。 关于数据类型转换等相关操作在后面的课程或程序实例中将有所提及。 大家可以用所讲 到的数据类型改写一下这课的实例程序,加深对各类型的认识。
第五课
常量
上一节我们学习了 KEIL C51 编译器所支持的数据类型。而这些数据类型又是怎么用在 常量和变量的定义中的呢?又有什么要注意的吗?下面就来看看吧。 晕! 你还区分不清楚什 么是常量,什么是变量。常量是在程序运行过程中不能改变值的量,而变量是可以在程序运 行过程中不断变化的量。 变量的定义可以使用所有 C51 编译器支持的数据类型, 而常量的数 据类型只有整型、浮点型、字符型、字符串型和位标量。这一节我们学习常量定义和用法,
- 17 -

51 单片机 C 语言入门教程(磁动力工作室)
而下一节则学习变量。 常量的数据类型说明是这样的 1. 整型常量可以表示为十进制如 123,0, -89 等。 十六进制则以 0x 开头如 0x34,-0x3B 等。长整型就在数字后面加字母 L,如 104L,034L,0xF340 等。 2. 浮点型常量可分为十进制和指数表示形式。十进制由数字和小数点组成,如 0.888,3345.345,0.0 等,整数或小数部分为 0,可以省略但必须有小数点。指数表 示形式为[±]数字[.数字]e[±]数字,[]中的内容为可选项,其中内容根据具体情 况可有可无,但其余部分必须有,如 125e3,7e9,-3.0e-3。 3. 字符型常量是单引号内的字符,如‘a’,‘d’等,不可以显示的控制字符,可以 在该字符前面加一个反斜杠“\”组成专用转义字符。常用转义字符表请看表 5-1。 4. 字符串型常量由双引号内的字符组成,如“test”,“OK”等。当引号内的没有字 符时,为空字符串。在使用特殊字符时同样要使用转义字符如双引号。在 C 中字符 串常量是做为字符类型数组来处理的,在存储字符串时系统会在字符串尾部加上\o 转义字符以作为该字符串的结束符。字符串常量“A”和字符常量‘A’是不同的, 前者在存储时多占用一个字节的字间。 5. 位标量,它的值是一个二进制。 转义字符 \o \n \r \t \b \f \' \" \\ 换行符(LF) 回车符(CR) 水平制表符(HT) 退格符(BS) 换页符(FF) 单引号 双引号 反斜杠 表 5-1 常用转义字符表 含义 空字符(NULL) ASCII 码(16/10 进制) 00H/0 0AH/10 0DH/13 09H/9 08H/8 0CH/12 27H/39 22H/34 5CH/92
常量可用在不必改变值的场合,如固定的数据表,字库等。常量的定义方式有几种,下 面来加以说明。 #difine False 0x0; //用预定义语句可以定义常量 #difine True 0x1; //这里定义 False 为 0,True 为 1 //在程序中用到 False 编译时自动用 0 替换,同理 True 替换为 1 unsigned int code a=100; //这一句用 code 把 a 定义在程序存储器中并赋值 const unsigned int c=100; //用 const 定义 c 为无符号 int 常量并赋值 以上两句它们的值都保存在程序存储器中,而程序存储器在运行中是不允许被修改的, 所以如果在这两句后面用了类似 a=110,a++这样的赋值语句,编译时将会出错。 说了一通还不如写个程序来实验一下吧。写什么程序呢?跑马灯!对,就写这个简单易 懂的吧,这个也好说明典型的常量用法。先来看看电路图吧。它是在我们上一课的实验电路 的基础上增加 6 个 LED 组成的,也就是用 P1 口的全部引脚分别驱动一个 LED,电路如图 5 -1 所示。 新建一个 RunLED 的项目,主程序如下:
- 18 -

51 单片机 C 语言入门教程(磁动力工作室)
#include //预处理文件里面定义了特殊寄存器的名称如 P1 口定义为 P1 void main(void) { //定义花样数据 const unsigned char design[32]={0xFF,0xFE,0xFD,0xFB,0xF7,0xEF,0xDF,0xBF,0x7F, 0x7F,0xBF,0xDF,0xEF,0xF7,0xFB,0xFD,0xFE,0xFF, 0xFF,0xFE,0xFC,0xF8,0xF0,0xE0,0xC0,0x80,0x0, 0xE7,0xDB,0xBD,0x7E,0xFF}; unsigned int a; //定义循环用的变量 unsigned char b; //在 C51 编程中因内存有限尽可能注意变量类型的使用 //尽可能使用少字节的类型,在大型的程序中很 受用 do{ for (b=0; b<32; b++) { for(a=0; a<30000; a++); //延时一段时间 P1 = design[b]; //读已定义的花样数据并写花样数据到 P1 口 } }while(1); } 程序中的花样数据可以自以去定义,因这里我们的 LED 要 AT89C51 的 P1 引脚为低电平才 会点亮,所以我们要向 P1 口的各引脚写数据 O 对应连接的 LED 才会被点亮,P1 口的八个引 脚刚好对应 P1 口特殊寄存器的八个二进位,如向 P1 口定数据 0xFE,转成二进制就是 11111110,最低位 D0 为 0 这里 P1.0 引脚输出低电平,LED1 被点亮。如此类推,大家不难算 出自己想要做的效果了。大家编译烧写看看,效果就出来,显示的速度您可以根据需要调整 延时 a 的值,不要超过变量类型的值域就很行了。哦,您还没有实验板?那如何可以知道程 序运行的结果呢?呵,不用急,这就来说说用 KEIL uVision2 的软件仿真来调试 IO 口输出 输入程序。
- 19 -

51 单片机 C 语言入门教程(磁动力工作室)
图 5-1 八路跑马灯电路 编译运行上面的程序,然后按外部设备菜单 Peripherals-I/O Ports-Port1 就打开 Port1 的调试窗口了,如图 5-3 中的 2。这时程序运行了,但我们并不能在 Port1 调试窗口 上看到有会什么效果,这时我们可以用鼠标左击图 5-3 中 1 旁边绿色的方条,点一下就有 一个小红方格在点一下又没有了, 哪一句语句前有小方格程序运行到那一句时就停止了, 就 是设置调试断点, 同样图 5-2 中的 1 也是同样功能, 分别是增加/移除断点、 移除所有断点、 允许/禁止断点、禁止所有断点,菜单也有一样的功能,另外菜单中还有 Breakpoints 可打 开断点设置窗口它的功能更强大,不过我们这里先不用它。我们在“P1 = design[b];”这 一句设置一个断点这时程序运行到这里就停住了,再留意一下 Port1 调试窗口,再按图 5-2 中的 2 的运行键, 程序又运行到设置断点的地方停住了, 这时 Port1 调试窗口的状态又不同 了。也就是说 Port1 调试窗口模拟了 P1 口的电平状态,打勾为高电平,不打勾则为低电平, 窗口中 P1 为 P1 寄存器的状态,Pins 为引脚的状态,注意的是如果是读引脚值必须把引脚 对应的寄存器置 1 才能正确读取。图 5-2 中 2 旁边的{}样的按钮分别为单步入,步越, 步出和执行到当前行。图中 3 为显示下一句将要执行的语句。图 5-3 中的 3 是 Watches 窗 口可查看各变量的当前值,数组和字串是显示其头一个地址,如本例中的 design 数组是保 存在 code 存储区的首地址为 D:0x08,可以在图中 4 Memory 存储器查看窗口中的 Address 地 址中打入 D:0x08 就可以查看到 design 各数据和存放地址了。如果你的 uVision2 没有显示 这些窗口,可以在 View 菜单中打开在图 5-2 中 3 后面一栏的查看窗口快捷栏中打开。
- 20 -

51单片机新手入门实例详解

51单片机新手入门实例详解 1.硬件和软件准备 ●实验系统:EL89C单片机学习开发系统一套 ●电脑:具有标准串口的台式机或笔记本电脑,如果没有串口也可购 买一条USB转串口线代替 ●工具软件:Keil uVision2(用于编写和编译源程序、仿真调试); 光盘上非安装烧写软件,路径 \单片机EL89C\EL89C光盘\STC52单片机下载程序\stc-isp-v4.79-not-setup\STC_ISP_V483.exe (EL89C的编程控制烧写软件) 2.源程序编写和编译 EL89C的8个发光二极管负极通过限流电阻接入单片机的P1.0~P1.7端口,下面的范例程序可以使这8个发光二极管轮流点亮,形成流水灯效果。 我们使用的开发工具是Keil C51,是目前世界上最优秀、最强大的51单片机应用平台之一,它集编辑、编译、仿真调试于一体,支持汇编、C语言以及混合编程。同时具备功能强大的软件仿真和硬件仿真功能。 下面以一个简单的流水灯程序为例子来介绍Keil C51的使用方法: 2.1首先在硬盘上建立一个文件夹,命名为ledtest(当然可以是其他名字), 为方便程序的编写和调试,我们将调试过程中产生的文件都将放在这个目录中。 2.2启动Keil软件,点击菜单project,选择new project,然后选择你要保 存的路径,输入工程文件的名字,我们现在保存到刚才建立的ledtest目录中,工程文件命名为ledtest,然后点击保存。 2.3这时会弹出下面的对话框Select Device for Target,要求你为刚才的项 目选择一个CPU。我们选择Atmel的AT89C52,如图所示,选择AT89C52之后,右边一栏是对这个单片机的基本的说明,然后点击确定。

51单片机C语言编程基础与实例

基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为 x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;} 在某引脚输出高电平的编程方法:(比如P1.3(PIN4)引脚) 代码

单片机C语言编程实例

单片机C语言编程实例 前言 INTEL公司的MCS-51单片机是目前在我国应用得最广泛的单片机之一.随着 单片机应用技术的不断发展,许多公司纷纷以51单片机为内核,开发出与其兼容的 多种芯片,从而扩充和扩展了其品种和应用领域。 C语言已成为当前举世公认的高效简洁而又贴近硬件的编程语言之—。将C语言向单片机上的移植,始于20世纪80年代的中后期。经过十几年的努力,C语言终于成为专业化单片机上的实用高级语言。用C语言编写的8051单片机的软件,可以大大缩短开发周期,且明显地增加软件的可读性,便于改进和扩充,从而研制出规模更大、性能更完善的系统。因此,不管是对于新进入这一领域的开发者来说,还是对于有多年单片机开发经验的人来说,学习单片机的C语言编程技术都是十分必要的。. C语言是具有结构化.模块化编译的通用计算机语言,是国际上应用最广.最多的计算语言之一。C51是在通用C语言的基础上开发出的专门用于51系列单片机编程的C语言.与汇编语言相比,C51在功能上.结构上以及可读性.可移植性.可维护性等方面都有非常明显的优势。目前 最先进、功能最强大、国内用户最多的C51编译器是Keil Soft ware公司推出的KeilC51。第 一章单片机C语言入门 1.1建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码, 这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软 件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑, 编译,仿真等于一体,同时还支持PLM、汇编和C语言的程序设计,它的界面 和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真 方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周 立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个

51单片机经典教程

单片机经典教程 目录
第一课 第二课 第三课 第四课 第五课 第六课 第七课 第八课 第九课 第十课 第十一课 第十二课 第十三课 第十四课 第十五课 第十六课 第十七课 第十八课 第十九课 第二十课 第二十一课 第二十二课 第二十三课 第二十四课 单片机的概述 单片机的硬件结构与开发过程 单片机的内部结构 一 半导体存储器 单片机的内部结构 二 工作寄存器 单片机的内部结构 三 时序与时钟 单片机的内部结构 四 并行口 单片机的内部结构 五 数据与地址 单片机的内部结构 六 特殊功能存储器 单片机的工作方式 单片机的寻址 单片机的指令 一 数据传递类指令 单片机的指令 二 数据传递类指令 单片机的指令 三 算术逻辑运算类指令 单片机的指令 四 控制转移类指令 单片机的指令 五 位及位操作指令 单片机的程序设计方法 单片机的定时 计数器 单片机的中断系统 单片机的定时/中断实验 一 单片机的定时/中断实验 二 键盘接口及编程方法 一 独立式按键 键盘接口及编程方法 二 矩阵式按键 单片机显示器接口及编程方法 数码管的静态扫描与编程方法 6 9 11 15 18 20 24 27 29 32 35 38 42 47 51 55 64 68 73 78 81 87 90 94
4

第一课 单片机的概述
因为我们的主要课程是单片机的应用 本来不想讲解单片机的历史与发展 这话说现状更确切 些 但为了兼顾大多数朋友 我还是简单的介绍一下这方面的相关知识 一 单片机的由来 单片机 专业名称—Micro Controller Unit(微控制器件) 它是由大名鼎鼎的 INTEL 公司发明的 最早的系列是 MCS-48 后来有了 MCS-51 我们经常说的 51 系列单片机就是 MCS-51 micro controller system 它是一种 8 位的单片机 8 位是什么意思 我们以后再讲 后来 INTEL 公司把它的核心技术转让给了世界上很多的小公司 不过 再小也有几个亿的销售/ 年哦 所以世界上就有许多公司生产 51 系列兼容单片机 比如飞利浦的 87LPC 系列 华邦的 W78 系列 达拉斯的 DS87 系列 现代的 GSM97 系列等等 目前在我国比较流行的就是美国 ATMEL 公司的 89C51 它是一种带 Flash ROM 的单片机 至于什么是 Flash ROM 我在这儿先不作介绍 等以后大家学到相 关的知识时自然就会明白 我们的讲座就是以该型号的单片机来作实验的 讲到这里 也许有的人会 问 我平时在各种书上看到全是讲解 8031 8051 等型号的单片机 它们又有什么不同呢 其实它们同 属于一个系列 只是 89C51 的单片机更新型一点(事实上,89C51 目前正在用 89S51 代替 我们的实验系 统采用就是 89S52 的 兼容 89C52) 这里随便说一下 目前国内的单片机教材都是以 8051 为蓝本的 尽管其内核也是 51 系列的 但毕竟 8051 的单片机已经属于淘汰产品 在市场上也很少见到了 所以由 此感叹 国内的高等教育是如此的跟不上时代的发展需要 这话可能会引起很多人的不满,所以大家别 说是我讲的哦 二 主要单片机的分类 接着上面的话题 再给大家介绍一下我们经常在各种刊物上看到的 AVR 系列和 PIC 系列单片机是 怎么回事 以便让大家对单片机的发展有一个较全面的认识 在没有学习单片机之前 这是一个令很多 初学者非常困惑的问题 这么多的单片机我该先学哪一种呢 AVR 系列单片机也是 ATMEL 公司生产的一种 8 位单片机 它采用的是一种叫 RISC 精简指令集单 片机 的结构 所以它的技术和 51 系列有所不同 开发设备也和 51 系列是不通用的 它的一条指令的 运行速度可以达到纳秒级 即每秒 1000000000 次 是 8 位单片机中的高端产品 由于它的出色性能 目前应用范围越来越广 大有取代 51 系列的趋势 所以学完了 51 系列的 看来必须学会 AVR 的才行 可叹知识爆炸 人生苦短 说完了 AVR 的 再来说说另一种--PIC 系列单片机 它是美国 MICROCHIP 公 司 唉 又是老美 叫微芯公司的生产的另一种 8 位单片机 它采用的也是 RISC 的指令集 它的指令 系统和开发工具与 51 系列更是不同 但由于它的低价格和出色性能 目前国内使用的人越来越多 国 内也有很多的公司在推广它 不过它的影响力远没有 51 系列的大 所以作为初学者 51 系列当然是首 选 以上几种只是比较多见的系列 其实世界上还有许多的公司生产各种各样的单片机 比如 MOTOROLA 的 MC68H 系列 老牌的单片机 TI 的 MSP430C 系列 极低功耗的单片机 德国的西门子 SIEMENS 等等 它们都有各自的结构体系 并不与 51 系列兼容 为了不搞大家的脑筋 这里就不介绍了 等大 家入了门以后自己去研究它吧 我们还是回来了解一下 51 系列单片机到底是个什么东西 它有那些部 分组成 请接着往下看 三 单片机的结构及组成 单片机到底是一种什么 DD 它究竟能做什么呢 其实它就是一种能进行数学和逻辑运算 根据不 同使用对象完成不同控制任务的面向控制而设计的集成电路 此话好象有点绕口 没关系 大家都应该 知道我们经常使用的电脑吧 在电脑上 我们可以用不同的软件在相同的硬件上实现不同的工作 比如 我们用 WORD 可以打字 用 PROTEL 可以设计图纸等等 单片机其实也是如此 同样的芯片可以根据我们 不同的要求做出截然不同的产品 只不过电脑是面向应用的 而单片机是面向控制的 比如控制一个指
6

c51单片机实例下载大全

单片机资料教程下载,省去找资料的麻烦,只供学习参考用,下载24内删掉,祝大家学习进步 单片机点阵学习资料 https://www.wendangku.net/doc/ea12368036.html,/thread-1703-1-1.html 手把手教你学单片机--教程视频 https://www.wendangku.net/doc/ea12368036.html,/thread-1688-1-1.html 力天把手教你学单片机视频教程 https://www.wendangku.net/doc/ea12368036.html,/thread-1689-1-1.html 谱中单片机开发板例程 https://www.wendangku.net/doc/ea12368036.html,/thread-1683-1-2.html 初学单片机的30,硬件简单对初学者有帮助 https://www.wendangku.net/doc/ea12368036.html,/thread-1962-1-1.html 用单片机制作的MP3 https://www.wendangku.net/doc/ea12368036.html,/thread-1701-1-2.html 51单片机应用开发大全所含100个范例代码及电路图 https://www.wendangku.net/doc/ea12368036.html,/thread-1820-1-1.html 【含28个单片机实例流程图】 https://www.wendangku.net/doc/ea12368036.html,/thread-1959-1-2.html 谱中单片机程序烧录工具STC https://www.wendangku.net/doc/ea12368036.html,/thread-1682-1-2.html 《单片机技术》32讲

https://www.wendangku.net/doc/ea12368036.html,/thread-1693-1-1.html 51单片机c语言100例教程 https://www.wendangku.net/doc/ea12368036.html,/thread-1700-1-1.html 单片机超级精华包 https://www.wendangku.net/doc/ea12368036.html,/thread-1687-1-1.html 新手学的多功能电子钟 https://www.wendangku.net/doc/ea12368036.html,/thread-1679-1-1.html 十天学会单片机和c语言视频教程 https://www.wendangku.net/doc/ea12368036.html,/thread-1692-1-1.html C语言函数库速查手册 https://www.wendangku.net/doc/ea12368036.html,/thread-1696-1-1.html 历史上最全的KEIL中文学习资料 https://www.wendangku.net/doc/ea12368036.html,/thread-1729-1-2.html 单片机c语言程序设计实训100例--基于AVR+PROTUES https://www.wendangku.net/doc/ea12368036.html,/thread-1695-1-2.html (有电路图和程序) https://www.wendangku.net/doc/ea12368036.html,/thread-1965-1-1.html 关于单片机抗干扰的资料 https://www.wendangku.net/doc/ea12368036.html,/thread-1961-1-1.html 单片机矩阵扫描键盘程序 https://www.wendangku.net/doc/ea12368036.html,/thread-1723-1-1.html 共享通过串口在线调试51单片机的专业版培训资料

51单片机教程

原作:平凡的单片机

1、何谓单片机一台能够工作的计算机要有这样几个部份构成:CPU(进行运算、控制)、RAM(数据存储)、ROM(程序存储)、输入/输出设备(例如:串行口、并行输出口等)。在个人计算机上这些部份被分成若干块芯片,安装一个称之为主板的印刷线路板上。而在单片机中,这些部份,全部被做到一块集成电路芯片中了,所以就称为单片(单芯片)机,而且有一些单片机中除了上述部份外,还集成了其它部份如A/D,D/A等。 天!PC中的CPU一块就要卖几千块钱,这么多东西做在一起,还不得买个天价!再说这块芯片也得非常大了。不,价格并不高,从几元人民币到几十元人民币,体积也不大,一般用40脚封装,当然功能多一些单片机也有引脚比较多的,如68引脚,功能少的只有10多个或20多个引脚,有的甚至只8只引脚。为什么会这样呢?功能有强弱,打个比方,市场上面有的组合音响一套才卖几百块钱,可是有的一台功放机就要卖好几千。另外这种芯片的生产量很大,技术也很成熟,51系列的单片机已经做了十几年,所以价格就低了。既然如此,单片机的功能肯定不强,干吗要学它呢?话不能这样说,实际工作中并不是任何需要计算机的场合都要求计算机有很高的性能,一个控制电冰箱温度的计算机难道要用PIII?应用的关键是看是否够用,是否有很好的性能价格比。所以8051出来十多年,依然没有被淘汰,还在不断的发展中。 2、MCS51单片机和8051、8031、89C51等的关系我们平常老是讲8051,又有什么8031,现在又有89C51,它们之间究竟是什么关系? MCS51是指由美国INTEL公司(对了,就是大名鼎鼎的INTEL)生产的一系列单片机的总称,这一系列单片机包括了好些品种,如8031,8051,8751,8032,8052,8752等,其中8051是最早最典型的产品,该系列其它单片机都是在8051的基础上进行功能的增、减、改变而来的,所以人们习惯于用8051来称呼MCS51系列单片机,而8031是前些年在我国最流行的单片机,所以很多场合会看到8031的名称。INTEL 公司将MCS51的核心技术授权给了很多其它公司,所以有很多公司在做以8051为核心的单片机,当然,功能或多或少有些改变,以满足不同的需求,其中89C51就是这几年在我国非常流行的单片机,它是由美国ATMEL 公司开发生产的。以后我们将用89C51来完成一系列的实验。 一、单片机的外部结构 拿到一块芯片,想要使用它,首先必须要知道怎样连线,我们用的一块称之为89C51的芯片,下面我们就看一下如何给它连线。1、电源:这当然是必不可少的了。单片机使用的是5V电源,其中正极接40引脚,负极(地)接20引脚。2、振蒎电路:单片机是一种时序电路,必须提供脉冲信号才能正常工作,在单片机内部已集成了振荡器,使用晶体振荡器,接18、19脚。只要买来晶振,电容,连上就可以了,按图1接上即可。3、复位引脚:按图1中画法连好,至于复位是何含义及为何需要复要复位,在单片机功能中介绍。4、EA引脚:EA引脚接到正电源端。至此,一个单片机就接好,通上电,单片机就开始工作了。 我们的第一个任务是要用单片机点亮一只发光二极管LED,显然,这个LED必须要和单片机的某个引脚相连,否则单片机就没法控制它了,那么和哪个引脚相连呢?单片机上除了刚才用掉的5个引脚,还有35个,我们将这个LED和1脚相连。(见图1,其中R1是限流电阻) 按照这个图的接法,当1脚是高电平时,LED不亮,只有1脚是低电平时,LED才发亮。因此要1脚我们要能够控制,也就是说,我们要能够让1引脚按要求变为高或低电平。即然我们要控制1脚,就得给它起个名字,总不能就叫它一脚吧?叫它什么名字呢?设计51芯片的INTEL公司已经起好了,就叫它P1.0,这是规定,不可以由我们来更改。

51单片机C语言程序设计复习资料

2013-2014学年上期51单片机C语言程序设计重修复习提纲考试方式:闭卷考试。 考试题型: 填空题(每空1分,共18分);单项选择题(每空2分,共18分);问答及计算题(每题4分,共16分);编程及程序阅读题(5小题,共48分)。 考试分数: 卷面成绩70%+平时成绩15%+实验成绩15%,未缺席、无课堂违纪、作业全交且认真完成的同学平时成绩可获得满分,缺席一次平时成绩扣30分,实验好评次数3次以上且实验报告全优的同学实验成绩可得满分,实验缺席一次扣30分。缺席实验和旷课共3次以上者,无考试资格。 考试时间: 18周周一(12月30日)下午14:00:16:00,考试地点:具体考室另行通知希望大家认真复习,认真听讲,不懂就问,考试成绩不及格允许查卷,如查卷卷面批阅无误成绩不做更改。 编程题为实验或实验类似的题目有3题,其余2题也取自课堂讲授例题,请务必认真复习。第一章单片机概述及单片机知识回顾 掌握什么是单片机、单片机的应用、常见单片机类型、十进制、十六进制、二进制数制转换知识。掌握单片机的硬件组成、CPU的结构、程序计数器PC的功能、存储器结构、机器周期的计算、会画出单片机的最小系统电路图及回答单片机最小系统的组成。 第二章C51语言程序设计基础(本章填空题和选择题比重较大请务必认真复习)掌握C51语言进行软件开发与汇编语言相比的优点、掌握C51的数据类型、特殊功能位的定义、C51的基本运算(位运算重点复习)、数组的定义、C51的结构及函数。 第三章AT89S51片内并行端口及编程(本章有编程题) 掌握P0-P3并行端口的特点,会开关量检测及流水灯程序的编程。 第四章AT89S51单片机的中断系统(本章有编程题) 掌握中断系统的结构、中断请求响应被满足的条件、外部中断的触发选择方式、外部中断的使用与编程。 第五章AT89S51单片机的定时器/计数器(本章有编程器) 掌握定时器的结构,TOMD及TCON的使用,定时器方式0和方式1的特点、会计算定时器初值,会用定时器中断产生PWM波形,会用定时器对外部事件进行计数。 第六章AT89S51单片机的串行口(本章有计算题) 掌握串行通信的基础知识(课本没有的内容请参照课堂讲授笔记或PPT)、串行口的四种工作方式的特点、会计算奇偶校验码、会根据波特率计算T1的初值。 第七章AT89S51单片机与输入/输出外设接口(本章有编程题) 掌握数码管动态显示的原理、掌握矩阵式键盘的原理与编程(矩阵键盘编程必考,但不会考4X4键盘)。 第八章AT89S51单片机与D/A与A/D转换器的接口(本章有编程题) 掌握AD与DA转换的接口、ADC和DAC的技术指标、常用AD和DA转换器。掌握ADC0809和TLC2543的使用与编程(2器件其中之一有编程题)。 第九章AT89S51单片机应用系统与调试(本章有编程题) 掌握单片机应用系统的软件抗干扰方法。

51单片机C语言入门教程详细解说

单片机c语言入门 相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没 什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大 家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想 学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候, 我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。 当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51还是A51呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上 书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学C51,毕竟C51和我们课上讲的C语言,有些类似, 编程的思想可以说是相通的。而且C51还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看,如果你选择了A51,那么你可以不要看了!因为下面讲 的全是C方面的,完全在浪费你的时间! 呵呵^_^ 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某个特定的意义上来说是并不能代替硬件的),即使

51单片机C语言入门实例2

13.动态数码显示技术 1.实验任务 如图4.13.1所示,P0端口接动态数码管的字形码笔段,P2端口接动态数码管的数位选择端,P1.7接一个开关,当开关接高电平时,显示“12345”字样;当开关接低电平时,显示“HELLO”字样。 2.电路原理图 图4.13.1 3.系统板上硬件连线 (1.把“单片机系统”区域中的P0.0/AD0-P0.7/AD7用8芯排线连接到“动态数码显示”区域中的a-h端口上;

(2.把“单片机系统”区域中的P2.0/A8-P2.7/A15用8芯排线连接到“动态数码显示”区域中的S1-S8端口上; (3.把“单片机系统”区域中的P1.7端口用导线连接到“独立式键盘”区域中的SP1端口上; 4.程序设计内容 (1.动态扫描方法 动态接口采用各数码管循环轮流显示的方法,当循环显示频率较高时,利用人眼的暂留特性,看不出闪烁显示现象,这种显示需要一个接口完成字形码的输出(字形选择),另一接口完成各数码管的轮流点亮(数位选择)。 (2.在进行数码显示的时候,要对显示单元开辟8个显示缓冲区,每个显示缓冲区装有显示的不同数据即可。 (3.对于显示的字形码数据我们采用查表方法来完成。 5.程序框图 图4.13.2

6.汇编源程序 ORG 00H START: JB P1.7,DIR1 MOV DPTR,#TABLE1 SJMP DIR DIR1: MOV DPTR,#TABLE2 DIR: MOV R0,#00H MOV R1,#01H NEXT: MOV A,R0 MOVC A,@A+DPTR MOV P0,A MOV A,R1 MOV P2,A LCALL DAY INC R0 RL A MOV R1,A CJNE R1,#0DFH,NEXT SJMP START DAY: MOV R6,#4 D1: MOV R7,#248 DJNZ R7,$ DJNZ R6,D1 RET TABLE1: DB 06H,5BH,4FH,66H,6DH TABLE2: DB 78H,79H,38H,38H,3FH END 7. C语言源程序 #include unsigned char code table1[]={0x06,0x5b,0x4f,0x66,0x6d}; unsigned char code table2[]={0x78,0x79,0x38,0x38,0x3f}; unsigned char i; unsigned char a,b; unsigned char temp; void main(void) { while(1) { temp=0xfe; for(i=0;i<5;i++) { if(P1_7==1)

51单片机及C语言入门教程

51单片机 及C语言入门教程 注:排成16开版式,是为了方便自已打印阅读。请不要用于非法用途。 2007.12.20

51单片机及C语言入门教程 第一课 建立您的第一个C项目 使用C语言肯定要使用到C编译器,以便把写好的C程序编译为机器码,这样单片机才能执行编写好的程序。KEIL uVISION2是众多单片机应用开发软件中优秀的软件之一,它支持众多不同公司的MCS51架构的芯片,它集编辑,编译,仿真等于一体,同时还支持,PLM,汇编和C语言的程序设计,它的界面和常用的微软VC++的界面相似,界面友好,易学易用,在调试程序,软件仿真方面也有很强大的功能。因此很多开发51应用的工程师或普通的单片机爱好者,都对它十分喜欢。 以上简单介绍了KEIL51软件,要使用KEIL51软件,必需先要安装它。KEIL51是一个商业的软件,对于我们这些普通爱好者可以到KEIL中国代理周立功公司的网站上下载一份能编译2K的DEMO版软件,基本可以满足一般的个人学习和小型应用的开发。(安装的方法和普通软件相当这里就不做介绍了) 安装好后,你是不是迫不及待的想建立自己的第一个C程序项目呢?下面就让我们一起来建立一个小程序项目吧。或许你手中还没有一块实验板,甚至没有一块单片机,不过没有关系我们可以通过KEIL软件仿真看到程序运行的结果。 首先当然是运行KEIL51软件。怎么打开?噢,天!那你要从头学电脑了。呵呵,开个玩笑,这个问题我想读者们也不会提的了:P。运行几秒后,出现如图1-1的屏幕。 图1-1启动时的屏幕

接着按下面的步骤建立您的第一个项目: (1)点击Project菜单,选择弹出的下拉式菜单中的New Project,如图1-2。接着弹出一个标准Windows文件对话窗口,如图1-3,这个东东想必大家是见了N次的了,用法技巧也不是这里要说的,以后的章节中出现类似情况将不再说明。在"文件名"中输入您的第一个C程序项目名称,这里我们用"test",这是笔者惯用的名称,大家不必照搬就是了,只要符合Windows文件规则的文件名都行。"保存"后的文件扩展名为uv2,这是KEIL uVision2项目文件扩展名,以后我们可以直接点击此文件以打开先前做的项目。 图1-2New Project菜单 图1-3文件窗口 (2)选择所要的单片机,这里我们选择常用的Ateml公司的AT89C51。此时屏幕如图1-4

51单片机声控智能小车C语言程序设计代码

51单片机声控智能小车C语言程序设计代码 #include #define uint unsigned int #define uchar unsigned char unsigned char code LEDShowData[]={0x9F,0x25,0x0D,0x99,0x49,0x41,0x1F,0x01,0x19,0x03}; sbit LED=P0^7; sbit m1a=P0^0; sbit m1b=P0^1; sbit m2a=P0^2; sbit m2b=P0^3; sbit B1=P0^4; uint m,n,x,y,z; void delayB1() { unsigned int delaytime=500; while(delaytime--); return; } void delayLED(uint ms) { uint a,b; for(a=0;a

TR0=1;//启动T0定时器 TR1=0;//关闭T1定时器 m1a=1; m2a=1; } void timer2(void) interrupt 5 { TF2=0;//软件对T2标志位清零 n++; if(n==250)//n控制查询周期时间 { n=0; switch(m) { case 1://低速挡,占空比77.8% { P2=LEDShowData[0];//七段数码管显示1 TH0=210; TL0=210;//对T0定时器赋初值 TH1=240; TL1=240;//对T1定时器赋初值 x=m; m=0; z=0; ET0=1; ET1=1; TR0=1;//启动T0定时器 break;//跳出switch } case 2://高速挡,占空比99.6% { P2=LEDShowData[1];//七段数码管显示2 TH0=1; TL0=1; //对T0定时器赋初值 TH1=255; TL1=255; //对T1定时器赋初值 x=m+1; m=0; z=0; ET0=1; ET1=1; TR0=1; //启动T0定时器 break;//跳出switch }

51单片机C语言学习知识编程基础学习知识及其实例

基础知识:51单片机编程基础 第一节:单数码管按键显示 第二节:双数码管可调秒表 第三节:十字路口交通灯 第四节:数码管驱动 第五节:键盘驱动 第六节:低频频率计 第七节:电子表 第八节:串行口应用 基础知识:51单片机编程基础 单片机的外部结构: 1. DIP40双列直插; 2. P0,P1,P2,P3四个8位准双向I/O引脚;(作为I/O输入时,要先输出高电平) 3. 电源VCC(PIN40)和地线GND(PIN20); 4. 高电平复位RESET(PIN9);(10uF电容接VCC与RESET,即可实现上电复位) 5. 内置振荡电路,外部只要接晶体至X1(PIN18)和X0(PIN19);(频率为主频的12倍) 6. 程序配置EA(PIN31)接高电平VCC;(运行单片机内部ROM中的程序) 7. P3支持第二功能:RXD、TXD、INT0、INT1、T0、T1 单片机内部I/O部件:(所为学习单片机,实际上就是编程控制以下I/O部件,完成指定任务) 1. 四个8位通用I/O端口,对应引脚P0、P1、P2和P3; 2. 两个16位定时计数器;(TMOD,TCON,TL0,TH0,TL1,TH1) 3. 一个串行通信接口;(SCON,SBUF) 4. 一个中断控制器;(IE,IP) 针对AT89C52单片机,头文件AT89x52.h给出了SFR特殊功能寄存器所有端口的定义。 C语言编程基础: 1. 十六进制表示字节0x5a:二进制为01011010B;0x6E为01101110。 2. 如果将一个16位二进数赋给一个8位的字节变量,则自动截断为低8位,而丢掉高8位。 3. ++var表示对变量var先增一;var—表示对变量后减一。 4. x |= 0x0f;表示为x = x | 0x0f; 5. TMOD = ( TMOD & 0xf0 ) | 0x05;表示给变量TMOD的低四位赋值0x5,而不改变TMOD的高 四位。 6. While( 1 ); 表示无限执行该语句,即死循环。语句后的分号表示空循环体,也就是{;}

(1小时学会C语言51单片机)C语言入门教程

相信很多爱好电子的朋友,对单片机这个词应该都不会陌生了吧。不过有些朋友可能只听说他叫单片机,他的全称是什么也许并不太清楚, 更不用说他的英文全称和简称了。单片机是一块在集成电路芯片上集成了一台有一定规模的微型计算机。简称为:单片微型计算机或单片机 (Single Chip Computer)。单片机的应用到处可见,应用领域广泛,主要应用在智能仪表、实时控制、通信、家电等方面。不过这一切都没什么关系,因为我(当然也包括任何人)都是从不知道转变成知道的,再转变成精通的。现在我只想把我学习单片机的经历,详细地讲叙给大家听听,可能有些大虾会笑话我,想:那么简单的东西还在这里卖弄。但是你错了,我只是把我个人学习的经历讲述一遍而已,仅仅对那些想学习单片机,但又找不到好方法或者途径的朋友,提供一个帮助,使他们在学习过程中,尽量少走些弯路而已! 首先,你必须有学习单片机的热情,不是说今天去图书馆看了一个下午关于单片机的书,而明天玩上半天,后天就不知道那个本书在讲什 么东西了。还是先说说我吧,我从大二的第一个学期期末的时候才开始接触单片机,但在这之前,正如上面所说的:我知道有种芯片叫单片机, 但是具体长成什么样子,却一点也不知道!看到这里很多朋友一定会忍不住发笑。嘿嘿,你可千万别笑,有些大四毕业的人也同样不知道单片 机长成什么样子呢!而我对单片机的痴迷更是常人所不能想象的地步,大二的期末考试,我全放弃了复习,每当室友拿着书在埋头复习的时候,我却捧着自己从图书馆借的单片机书在那看,虽然有很多不懂,但是我还是坚持了下来,当时我就想过,为了单片机值不值得我这样去付出, 或许这也是在一些三流学校的好处吧,考试挂科后,明年开学交上几十元一门的补考费,应该大部分都能过了。于是,我横下一条心,坚持看 我的单片机书和资料。当你明白了单片机是这么一回事的时候,显而易见的问题出来了:我要选择那种语言为单片机编写程序呢?这个问题,困扰了我好久。具 体选择C51 还是A51 呢?汇编在我们大二之前并没有开过课,虽然看着人家的讲解,很容易明白单片机的每一时刻的具体工作情况,但是一合上书或者资料,自己却什么也不知道了,根本不用说自己写程序了。于是,我最终还是决定学 C51,毕竟C51和我们课上讲的C语言,有些类似,编程的思想可以说是相通的。而且C51 还有更大的优点就是编写大程序时的优越性更不言而喻,当然在那时,我并没有想的那么深远,C51 的特 点,还是在后来的实践过程中,渐渐体会到的!朋友如果你选择了C51,那么请继续往下看, 如果你选择了A51,那么你可以不要看了!因为下面讲的全是C方面的,完全在浪费你的时间!呵呵A_A 第二,既然你想学好单片机,你必须得舍得花钱,如果不买些芯片回来自己动手焊焊拆 拆的(但是在后期会介绍给大家一个很好用的硬件 仿真软件,并不需要你用实验板和仿真器了,直接在你的PC上完成,但是软件毕竟是软件,从某 个特定的意义上来说是并不能代替硬件的),即使 你每天捧着本书,把那本书翻烂,也永远学不会单片机的!刚接触单片机的朋友,看了资料,一定会对以下几个词见的比较多,但是具体的概 念还是比较模糊,现作如下说明: (1 )编程器编程器是用来烧单片机芯片的,是把HEX 或者BIN 文件烧到单片机ROM 里的,供单片机运行的。 (2)实验板实验板是专为初学者根据某些要求而特做的板,一般上面就有一个单片机的最小系统,使用者只需写好程序,烧好芯片,放 到上面加以验证的这么一个工具。有了实验板,对与初学者来说,省去了焊个最小系统的麻烦。但是对于电子开发人员来说,作用并不是很大

51单片机C语言入门实例

1.闪烁灯 1.实验任务 如图4.1.1所示:在P1.0端口上接一个发光二极管L1,使L1在不停地一亮一灭,一亮一灭的时间间隔为0.2秒。 2.电路原理图 图4.1.1 3.系统板上硬件连线 把“单片机系统”区域中的P1.0端口用导线连接到“八路发光二极管指示模块”区域中的L1端口上。 4.程序设计内容 (1).延时程序的设计方法 作为单片机的指令的执行的时间是很短,数量大微秒级,因此,我们要 求的闪烁时间间隔为0.2秒,相对于微秒来说,相差太大,所以我们在 执行某一指令时,插入延时程序,来达到我们的要求,但这样的延时程 序是如何设计呢?下面具体介绍其原理: 如图4.1.1所示的石英晶体为12MHz,因此,1个机器周期为1微秒

机器周期微秒 MOV R6,#20 2个 2 D1: MOV R7,#248 2个 2 2+2×248=498 20× DJNZ R7,$ 2个2×248(498 DJNZ R6,D1 2个2×20=40 10002 因此,上面的延时程序时间为10.002ms。 由以上可知,当R6=10、R7=248时,延时5ms,R6=20、R7=248时, 延时10ms,以此为基本的计时单位。如本实验要求0.2秒=200ms, 10ms×R5=200ms,则R5=20,延时子程序如下: DELAY: MOV R5,#20 D1: MOV R6,#20 D2: MOV R7,#248 DJNZ R7,$ DJNZ R6,D2 DJNZ R5,D1 RET (2).输出控制 如图1所示,当P1.0端口输出高电平,即P1.0=1时,根据发光二极管 的单向导电性可知,这时发光二极管L1熄灭;当P1.0端口输出低电平,即P1.0=0时,发光二极管L1亮;我们可以使用SETB P1.0指令使P1.0 端口输出高电平,使用CLR P1.0指令使P1.0端口输出低电平。 5.程序框图 如图4.1.2所示

51单片机教程

目录 上册
第一课 第二课 第三课 第四课 第五课 第六课 第七课 第八课 第九课 第十课 第十一课 第十二课 第十三课 第十四课 第十五课 第十六课 第十七课 第十八课 第十九课 第二十课 第二十一课 第二十二课 第二十三课 第二十四课 单片机的概述 单片机的硬件结构与开发过程 单片机的内部结构 一 半导体存储器 单片机的内部结构 二 工作寄存器 单片机的内部结构 三 时序与时钟 单片机的内部结构 四 并行口 单片机的内部结构 五 数据与地址 单片机的内部结构 六 特殊功能存储器 单片机的工作方式 单片机的寻址 单片机的指令 一 数据传递类指令 单片机的指令 二 数据传递类指令 单片机的指令 三 算术逻辑运算类指令 单片机的指令 四 控制转移类指令 单片机的指令 五 位及位操作指令 单片机的程序设计方法 单片机的定时 计数器 单片机的中断系统 单片机的定时/中断实验 一 单片机的定时/中断实验 二 键盘接口及编程方法 一 独立式按键 键盘接口及编程方法 二 矩阵式按键 单片机显示器接口及编程方法 数码管的静态扫描与编程方法 6 9 11 15 18 20 24 27 29 32 35 38 42 47 51 55 64 68 73 78 81 87 90 94
4

下册
第二十五课 第二十六课 第二十七课 第二十八课 第二十九课 第三十课 第三十一课 第三十二课 第三十三课 第三十四课 第三十五课 第三十六课 第三十七课 第三十八课 第三十八课 第三十九课 第四十课 第四十一课 第四十二课 第四十三课 第四十四课 第四十五课 第四十六课 第四十七课 第四十八课 程序存储器的扩展及编程方法 一 程序存储器的扩展及编程方法 二 数据存储器的扩展及编程方法 一 数据存储器的扩展及编程方法 二 I2C 总线原理及编程方法 串行接口的原理及编程方法 一 串行接口的原理及编程方法 二 多机通讯的原理及编程方法 一 多机通讯的原理及编程方法 二 定时/计数器的扩展及编程方法 中断的扩展及编程方法 D/A 转换的原理及编程方法 一 D/A 转换的原理及编程方法 二 A/D 转换的原理及编程方法 一 A/D 转换的原理及编程方法 二 看门狗原理和单片机的可靠性设计 键盘的扩展及编程方法 显示器的扩展及编程方法 单片机专用键显芯片的设计方法及编程原理 实时时钟的原理及编程方法 一 实时时钟的原理及编程方法 二 单片机汉字显示系统的原理 单片机汉字点阵屏的实验 液晶显示器的原理和编程方法 一 液晶显示器的原理和编程方法 二 2 6 8 12 16 20 25 28 32 36 41 45 50 54 58 62 66 70 75 79 83 86 91 94 96
5

51单片机C语言变量定义

单片机教程,51单片机C语言学习 第六课变量 上课所提到变量就是一种在程序执行过程中其值能不断变化的量。要在程序中使用变量必须先用标识符作为变量名,并指出所用的数据类型和存储模式,这样编译系统才能为变量分配相应的存储空间。定义一个变量的格式如下:[存储种类]数据类型[存储器类型]变量名表 在定义格式中除了数据类型和变量名表是必要的,其它都是可选项。存储种类有四种:自动(auto),外部(extern),静态(static)和寄存器(register),缺省类型为自动(auto)。这些存储种类的具体含义和用法,将在第七课《变量的存储》中进一步进行学习。 而这里的数据类型则是和我们在第四课中学习到的名种数据类型的定义是一样的。说明了一个变量的数据类型后,还可选择说明该变量的存储器类型。存储器类型的说明就是指定该变量在C51硬件系统中所使用的存储区域,并在编译时准确的定位。表6-1中是KEIL uVision2所能认别的存储器类型。注意的是在AT89C51芯片中RAM只有低128位,位于80H到FFH的高128位则在52芯片中才有用,并和特殊寄存器地址重叠。特殊寄存器(SFR)的地址表请看附录二 如果省略存储器类型,系统则会按编译模式SMALL,COMPACT或LARGE所规定的默认存储器类型去指定变量的存储区域。无论什么存储模式都可以声明变量在任何的8051存储区范围,然而把最常用的命令如循环计数器和队列索引放在内部数据区可以显著的提高系统性能。还有要指出的就是变量的存储种类与存储器类型是完全无关的。 SMALL存储模式把所有函数变量和局部数据段放在8051系统的内部数据存储区这使访问数据非常快,但SMALL存储模式的地址空间受限。在写小型的应用程序时,变量和数据放在data内部数据存储器中是很好的因为访问速度快,但在较大的应用程序中data区最好只存放小的变量、数据或常用的变量(如循环计数、数据索引),而大的数据则放置在别的存储区域。 COMPACT存储模式中所有的函数和程序变量和局部数据段定位在8051系统的外部数据存储区。外部数据存储区可有最多256字节(一页),在本模式中外部数据存储区的短地址用@R0/R1。 LARGE存储模式所有函数和过程的变量和局部数据段都定位在8051系统的外部数据区外部数据区最多可有64KB,这要求用DPTR数据指针访问数据。 之前提到简单提到sfr,sfr16,sbit定义变量的方法,下面我们再来仔细看看。

相关文档
相关文档 最新文档