如何用汇编写51单片机程序之模块化程序

最近研究了一下51汇编指令系统。由于用C语言写程序,容易上手,开发效率高,所以之前一直用C写程序。在写C程序的时候,我习惯使用模块化编程,这极大地方便了代码的管理。又因为大二学习了8086汇编系统,在实验指导书上也使用了模块化编程,于是我想,51汇编应该也可以使用模块化编程。为了搞懂51汇编结构化编程,我浏览了很多论坛,也下载不少的资料,但是基本上没有哪个论坛或网站讲到模块化编程,这浪费我不少时间。皇天不负有心人,就在今天早上,在我头脑比较清醒的时候,我找到了一份资料,并将其精简,写成大家容易理解的文字。当然,写这些并不是为了说明我有多么的刻苦,而是为了告诉大家,找个好资料不简单,写这个教程可以节省大家的时间,只需要逛一下我的空间就可以轻松地学习新的知识。好了,吹牛吹过头了,咱们言归正传。

        我之前写过一篇《教你如何高效编程之头文件书写》的文章,已经了解C语言模块化编程或者看过我写过的那篇文章就可以很容易了解我下面将写到的汇编模块化编程了,这是我们《单片机实验指导书》上面的实验一,我将其写成模块化编程结构以供大家参考。
一、主程序的书写
        
                 

        如上图就是结构化编程的截图,里面的.asm即是
汇编文件的扩展名,C语言用的是 .c 。在汇编语言中,头文件的扩展名是.inc,而在C语言中头文件的扩展名是.h。
        仔细观察上图,汇编包含头文件的格式是$include(头文件完整名称),而在C语言中是#include“头文件完整名称”,二者有着非常相似之处。ORG 0000H ; LJMP MAIN应该不用我解释是有什么作用的吧?ORG指令就是指定其下面一条指令或数据的首字节按ORG后面的地址或标号存放到相应的存储单元。_MAIN_ASM SEGMENT CODE; RSEG  _MAIN_ASM的作用上图已经标明了,也不用多讲,需要说明的是,_MAIN_ASM不一定要写成这样,你喜欢写什么符号都可以(如:MAINFUNC、_MAIN_FUNC、ZHUHANSHU,最后一个举例有点俗了),只要符合汇编语言变量或标号的命名规则即可。如果讲求规范,最好就按以上格式书写。
还有一点就是,这段动态分配程序地址的代码可以省略,如果没有这段代码,编译器就不会动态分配程序地址了。 主函数的功能大家肯定都能分析了,不然看这个教程也没什么意义了。
二、子程序的书写

 

        下面讲的是子程序如何书写,子程序是要被调用的,你必须告诉编译器其他模块可以调用子程序模块中的哪些程序,如上所示,DELAY1MS即是可被调用的延时函数,公共变量及函数声明用关键字PUBLIC,后面跟函数名(标号名)。动态分配程序地址可以省略,在main.asm中已经讲到了。注意,子程序模块最后一行要写一个END,没有这一句,编译器不会报错,但会出现警告,容易出现问题,为了规范编程,大家还是别偷懒了。



三、头文件的书写  
        最后一点就是头文件的作用了,这跟C语言的作用一样,可以对变量或函数进行声明,这个程序比较简单,可以直接放到主程序中声明,如下图:

这样写之后,头文件的相关函数就要删掉了,不然编译器会报错,重复定义!
至此,一个简单的完整的汇编模块化编程就完成了,是不是很简单?
欢迎大家转载分享!
  • 4
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值