MCS-51单片机的三种编程方式对MCS311文献的应用

MCS-51单片机的三种编程方式以上代码均通过Keil的编译,并通过在线编程系统写入AT89S52单片机内部程序存储中,使用单片机最小系统能正常运行。

片机的编程方式主要包括汇编、C语言和两者的混合,掌握这三种编程方法非常重要,在具体应用中灵活使用也非常重要,通过这三种编程方法详细探讨了MCS-51单片机的应用。

关键词:单片机;汇编语言;C语言;混合编程

中图分类号:TP311证件识别码:A标准编号:1009-3044(2012)20-4994-03

MCS-51单片机编程方法探讨

李锐,吕琼

(曲靖师范大学物理与电子工程学院,辽宁 曲靖 655011)

摘要: MCS-51是目前最流行的8位单片机。单片机有三种编程方式,分别是汇编语言、C语言和复杂编程。使用技术与伟大的设施是非常重要的。该文档详细讨论了这些方法。

关键词: 单片机; 汇编语言;C语言;复杂编程

MCS-51 系列 MCU 是英特尔的 8 位 MCU,其中

DIP封装AT89S52 MCU是Atmel在美国生产的一款低电压、高性能CMOS 8位MCU,它包含8KB在线可编程Flash闪存,该芯片采用Atmel的高密度、非易失性存储器技术生产,与标准MCS-51 MCU的命令系统和引脚兼容且功能强大。它适用于许多更复杂的控制应用[1]。目前,MCS-51系列单片机开发最流行的软件是美国Keil Software生产的Keil软件,这是一个功能强大的集成开发环境(μVision)。

1 MCS-51微控制器的三种编程模式

1.1 编译

汇编语言是一种面向机器的编程语言,也称为符号语言。在汇编语言中,机器语言的二进制代码被符号所取代,这使得它比机器语言更容易读写,易于调试和修改,并且还具有机器语言执行速度快、内存空间少等优点,但在编写复杂程序时有明显的局限性,汇编语言依赖于特定的模型, 不能普遍使用,也不能在不同型号之间移植。

1.2 C语言

C语言是一种高级语言,它编写的程序比汇编语言更符合人们的思维习惯,并且具有模块化好、易于阅读和维护等优点,开发人员可以更专注于算法而不是考虑一些细节,从而减少了开发和调试的时间。同时,C 语言不依赖于硬件,这使得它非常便携 [2]。此外,C语言还具有丰富的库函数支持,绘制能力也比较强。但是,C代码编译后的目标代码体积较大,意味着它占用了大量空间,执行速度较慢。

1.3 汇编语言和C语言的混合根据汇编语言和C语言的

特点,选择编程语言的折衷方法是将汇编语言和C语言编程混合在一起。混合编程主要有两种形式,一种是在C语言中嵌入汇编代码,另一种是在汇编语言和C语言之间调用函数,实现方式用关键词标识,如果涉及参数传递,主要通过R2-R7的工作寄存器访问。在应用中,通常当时效性要求比较严格时,使用汇编对于这部分代码是唯一的选择,比如时钟的中断定时服务程序等,而其他时候,使用C语言更方便。

2.三种编程方法的应用——经典的流光实验

2.1 编译

组织 0000H;标记程序开始位置

SJMP主;转到主程序地址

组织 000BH;定时/计数器 0 的中断入口地址

AJMP 计时器0;跳转至定时中断服务程序

组织 0033H;标记主程序开始的绝对位置 MAIN: MOV TMOD, #02H ;设置为定时器工作模式2

MOV TH0,#06H;预置溢出的自动分配数据为MOV TL0,#06H;预设定时器的初始值

SETB ET0;打开定时器/计数器中断控制

SETB EA;打开总中断控制

设置:TR0;打开计时器

MOV R1,#00H

MOV R0,#00H

MOV A,#01H;初始化状态数据循环:MOV P0,A;点亮发光二极管

SJMP循环

定时器0:INC R1;机器循环正时

CJNE R1,#250,EXT ;方法 2 使用 8 位字长,因此使用 R0 和 R1 扩展名

MOV R1,#00H

INC R0型

CJNE R0,#32,分机

MOV R0,#00H

RL A;向左循环点亮状态数据

分机:RETI;中断返回

结束;节目结束

2.2 C语言

无符号整数 t=0;时序变量

无符号字符 s=0x01;LED照明状态数据变量 void timer0() interrupt 1 using 1{ //中断函数声明

t++;对于每个中断,定时变量增加 1

if(t==8000){//需要8000次中断,时间仅为1秒

.}

s=_crol_(s,1);点亮状态数据将更改为下一个状态

t=0;1 秒后,将 0 分配给重新计时

无效 main(){

TMOD=0x02;设置计时/计数器的工作方式

TH0=0x06;自动分配设置 TL0=0x06;设置定时的初始值

ET0=1;开启定时中断控制 EA=1;打开总中断控制

TR0=1;打开计时器

do{//无限循环等待中断

P0=秒;点亮发光二极管

}while(1);

2.3 汇编和 C 语言混合

2.3.1 在 C 语言中嵌入程序集

在实际应用中,如果对中断有严格的要求,可以将中断程序代码改为汇编,即以汇编语言的形式嵌入,实现起来比较简单,C语言下定义的变量也可以直接使用,但是超过单字节长度的变量算法比较麻烦。

2.3.2 C 和汇编相互调用

汇编代码可以直接嵌入到C语言中

,也可以单独分开,在下面的例子中,中断函数被单独写成汇编语言,另外,为了方便汇编调用C语言,对逻辑循环左函数进行了重新定制。在应用中,最麻烦的混合编程方法是调用互代码和变量,而在MCS-51系列微控制器中,有一套规则,如表1所示。

2.4 编译过程中需要注意的问题

1) 生成目标程序文件

使用 Keil 编译,可以生成 的十六进制后缀。HEX对象文件,这个文件可以直接写入微控制器运行,但Keil默认不生成。对于十六进制文件,您需要通过在“项目工作区”窗口中选择“目标 1”,右键单击,选择“……选项”,然后在“输出”选项下进行设置来设置它。

2)在混合模式下编译程序

首先,右键单击“项目”窗口中的 C 文件,然后选择“……选项”使“生成汇编程序 SRC 文件”和“汇编 SRC 文件”选项变黑(有效)。然后,根据选择的编译模式,放入对应的库文件(例如,KeilC51LibC51S.lib)加入项目,该文件必须作为项目的最终文件;最后,对其进行编译以生成目标代码。

3 结束语

以上代码由Keil编译,通过在线编程系统写入单片机内部程序存储AT89S52,最小系统可与单片机正常运行。这三种编程方法在具体应用中是灵活的,需要根据它们的特点和用户的经验进行选择。对于初学者来说,精通前两种方式是必不可少的,而对于有经验的程序员来说,第三种方式是一种高效实用的方法。

引用

[1] 邓兴成,江宝军.单片机原理与实践指导[M].北京:机械工业出版社,2009:1.

[2]赵亮,侯国瑞.C语言编程及单片机实例[M].北京:人民邮电出版社,2003:1

[3] Keil Elektronik GmbH. 和 Keil 软件。Cx51 编译器,用户指南 2001:118-132。

[4] Keil Elektronik GmbH. 和 Keil 软件。宏汇编程序和实用程序,用户指南 2001:99-137。

单片机

比亚迪汽车知识大讲堂:高压安全保护系统

2024-2-7 21:04:42

单片机

《单片机原理及接口技术(第2版)》仍以汇编语言

2024-2-7 22:01:22

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索