单片机用汇编和C语言点灯程序的区别_第1页
单片机用汇编和C语言点灯程序的区别_第2页
单片机用汇编和C语言点灯程序的区别_第3页
单片机用汇编和C语言点灯程序的区别_第4页
单片机用汇编和C语言点灯程序的区别_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

现在做单片机开发,可能很少看到有直接用汇编做项目了,但单片机的启动文件、RTOS底层等一些地方,依然还有汇编代码的身影。不知道大家有没有学过汇编,或者有没有用汇编语言编过程?学习汇编语言我在2010年学习单片机编程的时候,老师教学都还是用汇编教我们,包括教学实验,也是要求我们用汇编写程序。MOVA,#00HMOVP1,A我记得那会儿,老师要求我们把汇编指令背下来。虽然现在很多汇编指令写不出来了,但看到很多汇编代码,还是基本明白它的意思。以前计算机三级(PC技术)的上机考试,就是用汇编编程,我那个时候上机考试还是满分。当时觉得自己很牛逼,现在看来就是一菜鸟图片汇编转C语言刚开始学习汇编那会儿,我真的用汇编在51单片机上写流水灯程序。后面看了用C语言写流水灯程序,突然发现,哇,用C语言写程序还能这么简单、方便。于是,我就那个时候开始放弃了汇编,转向了C语言。包括后面我在大学实验室自己学习、DIY做东西、以及后面的全国大学生电子设计竞赛,都是用C语言编写的程序。10行汇编程序,可能只需要一行C语言代码就能实现,这是C语言相比汇编简化的优点。但是,C语言编写的程序,经过编译,也会转为汇编。比如我们在线调试代码的时候,会看到类似的“汇编窗口”:图片因为以前单片机的运行速度不高,且内存和Flash容量不大,要求节约程序空间。所以使用汇编的优点:代码运行效率更高、更节约代码存储空间。对比汇编和C语言点灯程序汇编语言写程序的主要缺点:语法复杂、可读性差等。下面分享一个实例:51单片机上的流水灯程序。分别用C语言和汇编写出来,大家对比一下就知道了。C语言版:/********************宏定义**************************/#defineMAIN_Fosc22118400L//定义主时钟/********************延时函数**************************/voiddelay_ms(u8ms){u16i;do{i=MAIN_Fosc/13000;while(--i);//14Tperloop}while(--ms);}/********************主函数**************************/voidmain(void){P0M1=0;P0M0=0;//设置为准双向口P1M1=0;P1M0=0;//设置为准双向口P2M1=0;P2M0=0;//设置为准双向口P3M1=0;P3M0=0;//设置为准双向口P4M1=0;P4M0=0;//设置为准双向口P5M1=0;P5M0=0;//设置为准双向口P6M1=0;P6M0=0;//设置为准双向口P7M1=0;P7M0=0;//设置为准双向口while(1){P17=0;delay_ms(250);delay_ms(250);P17=1;P16=0;delay_ms(250);delay_ms(250);P16=1;P47=0;delay_ms(250);delay_ms(250);P47=1;P46=0;delay_ms(250);delay_ms(250);P46=1;}}汇编语言版:;********************宏定义**************************/Fosc_KHZEQU22118;22118KHZSTACK_POIRTEREQU0D0H;堆栈开始地质;********************延时函数**************************/F_delay_ms:PUSH02H;入栈R2PUSH03H;入栈R3PUSH04H;入栈R4MOVR2,AL_delay_ms_1:MOVR3,#HIGH(Fosc_KHZ/13)MOVR4,#LOW(Fosc_KHZ/13)L_delay_ms_2:MOVA,R4;1TTotal13T/loopDECR4;2TJNZL_delay_ms_3;4TDECR3L_delay_ms_3:DECA;1TORLA,R3;1TJNZL_delay_ms_2;4TDJNZR2,L_delay_ms_1POP04H;出栈R2POP03H;出栈R3POP02H;出栈R4RET;********************主程序**************************/ORG0100H;resetF_Main:CLRAMOVP0M1,A;设置为准双向口MOVP0M0,AMOVP1M1,A;设置为准双向口MOVP1M0,AMOVP2M1,A;设置为准双向口MOVP2M0,AMOVP3M1,A;设置为准双向口MOVP3M0,AMOVP4M1,A;设置为准双向口MOVP4M0,AMOVP5M1,A;设置为准双向口MOVP5M0,AMOVP6M1,A;设置为准双向口MOVP6M0,AMOVP7M1,A;设置为准双向口MOVP7M0,AMOVSP,#STACK_POIRTERMOVPSW,#0;选择第0组R0~R7L_MainLoop:CLRP1.7MOVA,#250LCALLF_delay_ms;延时250msLCALLF_delay_ms;延时250msSETBP1.7CLRP1.6MOVA,#250LCALLF_delay_ms;延时250msLCALLF_delay_ms;延时250msSETBP1.6CLRP4.7MOVA,#250LCALLF_delay_ms;延时250msLCALLF_delay_ms;延时250msSETBP4.7CLRP4.6MOVA,#250LCALLF_delay_ms;延时250msLCALLF_delay_ms;延时250msSETBP4.6SJMPL_MainLoop上面两个程序,实现的功能都一样(流水灯),但对比代码,大家发现有啥区别?对于有汇编基础的

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论