免费论文查重: 大雅 万方 维普 turnitin paperpass

MCS-51单片机三种编程方式探讨-

最后更新时间:2024-03-06 作者:用户投稿原创标记本站原创 点赞:5800 浏览:20434
论文导读:#02H;设置为计时器工作方式2MOVTH0,#06H;预设溢出的自动赋值数据MOVTL0,#06H;预设一次计时的初值SETBET0;打开计时/计数器中断控制SETBEA;打开总中断控制SETBTR0;开启计时MOVR1,#00HMOVR0,#00HMOVA,#01H;初始化状态数据LOOP:MOVP0,A;点亮发光二极管SJMPLOOPTIMER0:INCR1;
摘要:MCS-51单片机是目前应用最为广泛的8位单片机,单片机的编程方式主要有汇编、C语言以及两者混合三种方式,掌握三种编程方式,在具体应用中灵活运用是非常重要的,该文通过这三种编程方式对MCS-51单片机的应用进行了详细的讨论。
关键词:单片机;汇编语言;C语言;混合编程
1009-3044(2012)20-4994-03
Discuss of Three Methods of Programming for MCS-51 Single Chip Microcomputer
LI Rui,LV Qiong
(College of Physics and Electronic Engineering, Qujing Normal University,Qujing 655011,China)
Abstract: MCS-51 is the most popular in the 8 bit single chip microcomputer at present. Single chip microcomputer are three ways for programming, they are assembly language, C language and complex programming. Used the techniques with great facility is very import. The document discuss the methods in detail.
Key words: single chip microcomputer; assembly language; C language; complex programming
MCS-51系列单片机是Intel公司的8位单片机,其中DIP封装的AT89S52单片机是美国Atmel公司生产的低电压、高性能CMOS 8位单片机,其片内含有8KB可在线编程的Flash闪速存储器,芯片采用Atmel公司的高密度、非易失性存储技术生产,与标准的MCS-51单片机的指令系统及引脚兼容、功能强大,适合于许多较多较为复杂的控制应用场合。目前开发MCS-51系列单片机最流行的软件是美国Keil Software公司出品的Keil软件,这是一个功能强大的集成开发环境(μ摘自:7彩论文网毕业论文结论怎么写www.7ctime.com
Vision)。
1 MCS-51单片机的三种编程方式

1.1汇编方式

汇编语言是面向机器的程序设计语言,也称为符号语言。汇编语言中,用符号代替机器语言的二进制码,使之比机器语言易于读写、易于调试和修改,同时也具有机器语言执行速度快,占内存空间少等优点,但在编写复杂程序时具有明显的局限性,汇编语言依赖于具体的机型,不能通用,也不能在不同机型之间移植。

1.2 C语言方式

C语言是一种高级语言,其编写的程序比用汇编语言更符合人们的思考习惯,具有良好的模块化,容易阅读和维护等优点,开发者可以更专心地考虑算法而不是考虑一些细节问题,这样就减少了开发和调试的时间。同时C语言不依赖于硬件,这使其具有了很好的移植性。另外,C语言还还有丰富的库函数支持,绘图能力也比较强。但C语言代码编译后的目标代码体积大,意味着存在占用空间多,执行速度较慢的问题。

1.3汇编与C语言混合方式

根据汇编和C语言的特点,选择编程语言的一种折中方式就是汇编和C语言混合编程。混合编程方式主要有两种形式,一种是在C语言中嵌入汇编代码,另一种是汇编和C语言相互调用函数,实现方法是通过关键词进行标识,如果涉及参数传递,主要是通过R2—R7这几个工作寄存器来存取。在应用中,通常在对时效性要求比较严格的时候,这部分代码使用汇编是唯一的选择,比如时钟的中断计时服务程序等,而其它时候,使用C语言比较方便。
2三种编程方式的应用——经典流水灯实验

2.1汇编方式

ORG 0000H;标记程序起始位置
SJMP MAIN;跳转到主程序地址
ORG 000BH;计时/计数器0的中断入口地址
AJMP TIMER0;跳转到计时中断服务程序
ORG 0033H;标记主程序起始的绝对位置MAIN: MOV TMOD,#02H ;设置为计时器工作方式2
MOV TH0,#06H;预设溢出的自动赋值数据MOV TL0,#06H;预设一次计时的初值
SETB ET0;打开计时/计数器中断控制
SETB EA;打开总中断控制
SETB TR0;开启计时
MOV R1,#00H
MOV R0,#00H
MOV A,#01H;初始化状态数据LOOP: MOV P0,A;点亮发光二极管
SJMP LOOP
TIMER0: INC R1;机器周期计时
CJNE R1,#250,EXT ;而方式2使用的是8位字长,因此使用了R0和R1扩展
MOV R1,#00H
INC R0
CJNE R0,#32,EXT
MOV R0,#00H
RL A;循环左移点亮状态数据
EXT:RETI;中断返回
END;程序结束

2.2 C语言方式

unsigned int t=0;//计时变量
unsigned char s=0x01;//发光二极管点亮状态数据变量void timer0() interrupt 1 using 1{ //中断函数申明
t++;//每次中断,计时变量加1
if(t==8000){//需要8000次中断,时间才到1秒
s=_crol_(s,1);//点亮状态数据变为下一状态
t=0;//到1秒后,赋0重新计时
}
}
void main(){
TMOD=0x02;//设置计时/计数器的工作方式
TH0=0x06;//自动赋值设置TL0=0x06;//设置计时初值
ET0=1;//打开计时中断控制EA=1;//打开总中断控制
TR0=1;//开启论文导读:而且C语言下定义的变量也可以直接使用,只不过超过单字节长度的变量的算法比较麻烦。2.3.2C语言和汇编相互调用汇编代码既可以直接嵌入C语言中,也可以单独分离出来,下面的实例中把中断函数单独写为汇编语言,另外,为了方便说明汇编对C语言的调用,把逻辑循环左移函数重新自定义。在应用中,混合编程方式最麻烦就的相互代
计时
do{//死循环等待中断
P0=s;//点亮发光二极管
}while(1);
}

2.3汇编和C语言混合方式

2.3.1 C语言中嵌入汇编

实际应用中,如果对中断有严格的要求,可以把中断程序代码改为汇编,也就是嵌入汇编语言的形式,这种方式实现比较简单,而且C语言下定义的变量也可以直接使用,只不过超过单字节长度的变量的算法比较麻烦。

2.3.2 C语言和汇编相互调用

汇编代码既可以直接嵌入C语言中,也可以单独分离出来,下面的实例中把中断函数单独写为汇编语言,另外,为了方便说明汇编对C语言的调用,把逻辑循环左移函数重新自定义。在应用中,混合编程方式最麻烦就的相互代码和变量的调用,在MCS-51系列单片机中,存在一套规则,如表1。

2.4编译时需注意的问题

1)生成目标程序文件
使用Keil编译,可以生成16进制的后缀为.HEX的目标程序文件,这个文件可以直接写入单片机运行,但Keil默认是不生成. HEX文件的,需要进行设置,方法是在选中“Project Workspace”窗口中的“Target 1”,点鼠标右键,选择“Options for……”,在“Output”选项下进行设置。
2)编译混合方式的程序
首先,在Project窗口中的C文件上点鼠标右键,选择“Options for……”,使“Generate Assembler SRC File”和“Assemble SRC File”选项变成黑色(有效)状态;然后,根据选择的编译模式,把相应的库文件(如Small模式时,是Keil\C51\Lib\C51S.Lib)加入工程中,该文件必须作为工程的最后文件;最后进行编译,即可生成目标代码。
3结束语
以上代码均通过Keil的编译,并通过在线编程系统写入AT89S52单片机内部程序存储中,使用单片机最小系统能正常运行。三种编程方式在具体的应用中是很灵活的,需要根据其特点和使用者的经验来选择使用。对于初学者,熟练掌握前两种方式是非常必要的,而对于经验丰富的程序员,第三种方式不失为一种高效实用的方法。
参考文献
邓兴成,姜宝钧.单片机原理与实践指导[M].北京:机械工业出版社,2009:1.
赵亮,侯国锐.单片机C语言编程与实例[M].北京:人民邮电出版社,2003:1.
[3] Keil Elektronik GmbH. and Keil software. Cx51 Compiler, User’s Guide 2001:118-132.
[4] Keil Elektronik GmbH. and Keil software. Macro Assembler and Utilities, User’s Guide 2001:99-137.