找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3425|回复: 19
打印 上一主题 下一主题
收起左侧

一个汇编程序,哪位大侠看的懂的帮忙看看呗

[复制链接]
跳转到指定楼层
楼主
一个汇编程序,哪位大侠看的懂的帮忙看看呗

IMG_20170226_172117.jpg (478.92 KB, 下载次数: 126)

IMG_20170226_172117.jpg
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:74784 发表于 2017-2-26 22:37 | 只看该作者
看了
玩汇编代码
一要有注释
二要和硬件联系在一起才行
这两点都没有
难啊
回复

使用道具 举报

板凳
ID:166817 发表于 2017-2-27 01:44 | 只看该作者
汇编以前刚开始就学的汇编,后来学了c语言,基本通用了,赶紧去学习C语言吧
回复

使用道具 举报

地板
ID:27916 发表于 2017-2-27 08:47 | 只看该作者
看懂这个有什么用?
初始化了一下SP,Timer,清了几个RAM,,,,

便有有错误,还是先把错误改了吧
回复

使用道具 举报

5#
ID:123289 发表于 2017-2-27 12:58 | 只看该作者
赞同二楼。
本人从不用C写单片机程序,只用写。
回复

使用道具 举报

6#
ID:72947 发表于 2017-2-27 13:47 | 只看该作者
定时器0和定时器1初始化程序,第1句设置堆栈首地址,第2句设置T0和T1的模式,第3、4句设置T0初值,第5、6句设置T1初值,接下来吧一堆标志位清零;鉴定完毕!
回复

使用道具 举报

7#
ID:153041 发表于 2017-2-27 15:37 | 只看该作者
补充楼上意见,编译错误信息表示 F_0 到 F_9  没有定义。 就像c语言变量没有声明一样。应该在程序的开头定义好,比如 #define F_0  00h   (00h指向内存位寻址的第一个位)
回复

使用道具 举报

8#
ID:111634 发表于 2017-2-27 16:19 | 只看该作者
本帖最后由 zl2168 于 2017-2-27 16:22 编辑
yzwzfyz 发表于 2017-2-27 12:58
赞同二楼。
本人从不用C写单片机程序,只用写。

C程序与汇编程序虽各有千秋,但C程序优点更多。


C51编程的特点


C51编程与80C51汇编语言相比,主要具有以下特点:


编程相对方便。


用汇编语言编程,几乎每一条指令操作都与具体的存储单元有关,80C51单片机的片内存储空间容量有限,编程之初即需安排好片内存储单元的用途,且一般不宜重复使用。当一些应用项目程序量较大时,片内存储单元有可能捉襟见肘,稍有不慎就将出错,编程相对复杂。而C51编译系统能自动完成对变量存储单元的分配和使用,且对函数内局部变量占用的存储单元,仅在调用时临时分配,使用完毕即行释放,大大提高了80C51片内有限存储空间的使用效率。因此,使用者只需专注于软件编程,不需过多关注涉及的具体存储单元及其操作指令,编程相对方便。


便于实现各种复杂的运算和程序。


C语言具有丰富且功能强大的运算符,能以简单的语句方便地实现各种复杂的运算和程序。相比之下,汇编语言要实现较复杂的运算和程序,就比较困难。例如,双字节的乘除法,汇编语言要用许多条指令操作才能完成;而C51只需一条语句便能方便实现。又例如,循环、查表和散转等程序,C51语句实现起来也相对简单方便(当然C51语句编译转换为汇编语言指令后仍然复杂,只是不用程序员操心,由编译器自动完成罢了)。


可方便地调用各已有程序模块。


已有程序模块包括C51编译器中丰富的库函数、用户自编的常用接口芯片功能函数和以前已开发项目中的功能函数。读者可能会说,汇编程序不也一样可以调用吗?不一样。汇编程序调用时,涉及到模块中具体的存储单元,这些存储单元很可能与主调用程序有重复,会引起冲突而出错。而C51程序函数中的变量一般为局部变量,主函数调用前不占用存储单元,仅在调用时由C51编译器根据存储区域空余情况临时分配,使用完毕即行释放,一般不会发生冲突而出错。因此,C51程序可方便地调用各已有程序模块,减少重复劳动,利于团队合作开发,大大提高编程效率。


可读性较好。


C语言属于高级语言。一条C51语句,会编译为多条甚至许多条汇编指令(例如数学运算和循环程序等),相对来说,C51程序简洁而清晰,可读性较好。


实时性较差。


汇编语言指令每一条对应13字节机器码,每一步的执行动作都很清楚,程序大小和堆栈调用情况都容易控制,响应及时,实时性较好。而C51程序并不能被单片机直接执行,需编译转换为汇编语言指令。一条C51语句编译后,会转换成很多机器码,占用单片机片内较多资源,可能出现ROMRAM空间不够,堆栈溢出等问题;且执行步骤不很明确,有时还会兜圈子,因而实时性较差(参阅9-3),甚至会因时序配合不好而出错。然而,随着单片机芯片技术的发展,其运行速度和内存容量有了较大提高,这些都为C51的应用创造了有利条件。
以上摘自张志良编著《80C51单片机实用教程——基于Keil C和Proteus》高等教育出版社ISBN 978-7-04-044532-9


回复

使用道具 举报

9#
ID:123289 发表于 2017-2-28 11:20 | 只看该作者
C:经编译后,成汇编,因此用汇编的人,是自己代替代了C。
有许多节省内存的技巧及方式,C是做不到了,因为C是从通用化出发的。因此没有,C更能能节省内存的这一说。
回复

使用道具 举报

10#
ID:123289 发表于 2017-2-28 11:21 | 只看该作者
比如:C是用堆栈传递参数的,需要的堆栈就大,占用的寄存器就多,51的寄存器本来就少,这会造成寄存器紧张,汇编传递参数很直接,大多可以不用堆栈,省出寄存器作他用。
在运作时间上,汇编有极大的优势。
比如以下一个项目,用C很难完成,而用汇编就已很好的完成了(前提是只用51单片机):
16*64的LED点阵显示+14个LED数据管显示+中文汉字显示处理+无线收发+生产记录(计划、产能、次品、待产)+年月日精确时间(普通晶振,日差小于一秒)。
单就解决显示的扫描闪动(驱动显示1136个LED段,必须分8次扫描,1136个点时刻会变,要占多少处理时间及内存),与程序运行的速度矛盾(汉字解码+无线通讯+时钟+扫键……)。
回复

使用道具 举报

11#
ID:123289 发表于 2017-2-28 11:22 | 只看该作者
以上所例,仅说明汇编比C的优势,并不排拆C的好处:
1、用汇编需用很强的优化寄存器及内存的能力,用C的好处是,不需要你去考虑这些复杂的问题,使得编程简单。
2、 C出错的机率远小于汇编,汇编稍有不小心就会出错,要命的是:不易察觉。
3、 C有团体合作的优势, 这是 C的特点,便于交流。如果是汇编,很难与他人交流。
4、 对于运算程序, C已有前辈们做好了运算库,很难想像一般人能用汇编去:开方、三角函数(当然,也可以让C先编译,再做成汇编的库)。
5、 C 有庞大的公用程序库(子程序),这对于程序量大的程序更有优势。汇编的程序库多为个人积累,很难得到。
回复

使用道具 举报

12#
ID:123289 发表于 2017-2-28 11:22 | 只看该作者
其实C只有一个优点:
先插入说一下单片机程序通常结构:1硬件初始化、2软件参数初始化(含内存安排)、3主程序(事件处理)、4中断程序。
如果用汇编以上一切由你处理,除非你已获得了很多相关的汇编数据库。
如果用C:
在你未写程序之前C已为你做了什么?
1、硬件初始化,C仅能做很少的部分。(注:这就是为什么在做硬件时你总是要一行行慢慢写的原因,与汇编比几乎没有优势)
2、软件参数初始化(含内存安排),C完成其中的大部分。(注:比汇编操心少啊)
3、主程序(事件处理),C有大量的库函数可以调用,可以减少你大部分工作量。(注:比汇编操心少啊)
4、中断程序。C有大量的库函数可以调用。(注:本人不建议在中断中完成事件处理,而建议尽最大可能只在中断中做一些事件标志!而让事件在主程序中依标志进行处理,因为中断有优先权,处理事件往往需要的时间多,会耽误其它事件的处理,如这时按键就会伪“失灵”)

可见 C的这个优点是,C能帮你完成程序中的很大一部分工作。(其实是你调用了前辈们已做好的工作,这此工作是通过:编译器、程序库来实现的)

道理很简单:一件事能用设备完成的尽量用设备,设备无法完成的用人工。C就是写单片机程序的一个极好的“设备”。
回复

使用道具 举报

13#
ID:123289 发表于 2017-2-28 11:23 | 只看该作者
用C的风险在哪里?
一个程序什么都OK了,就缺一些库文件!找又找不到。
如果你会汇编,就可以自己完成找不到的这个库。

总之C适合大多数的人,汇编仅适用很少的一部分人,但用汇编写程序的人,一定是高手,否则他驾驭不了单片机。
做汇编需要彻底地了解单片机,做C无需要了解到很底层。而要精通单片机,汇编又是最佳手段。
回复

使用道具 举报

14#
ID:123289 发表于 2017-2-28 11:24 | 只看该作者
个人建议:所有学单片机的同学学C,C是在大势所趋,也适合绝大多数人。特别是团体作战,未来不是单打独斗的年代!
也建议那些想精通单片机的同学,学好汇编,汇编天马行空,不受库存文件、头文件限制,不受C的规矩,但也必须会C。

一但学好了汇编,你再打开你的C编译后的汇编看看,这时就知道缺点在那里,就能提高自己C语言的水平。也能轻松掌握C当中绕人的难点。
回复

使用道具 举报

15#
ID:153041 发表于 2017-3-1 17:05 | 只看该作者
争论C和汇编的人,必定是只擅长C或只擅长汇编的人。
回复

使用道具 举报

16#
ID:111634 发表于 2017-3-1 19:52 | 只看该作者
本帖最后由 zl2168 于 2017-3-1 20:46 编辑
utzuzu 发表于 2017-3-1 17:05
争论C和汇编的人,必定是只擅长C或只擅长汇编的人。

错!只有同时熟练应用C及汇编的人,才能客观地比较C与汇编的优缺点。
回复

使用道具 举报

17#
ID:111634 发表于 2017-3-1 19:55 | 只看该作者
本帖最后由 zl2168 于 2017-3-1 20:47 编辑

不熟练应用C及汇编的人,只会讲好与不好,讲不出好与不好的原因,更讲不到好与不好的点子上。
回复

使用道具 举报

18#
ID:167509 发表于 2017-3-1 20:31 | 只看该作者
清标志位
回复

使用道具 举报

19#
ID:139514 发表于 2017-3-2 16:53 | 只看该作者
哈囉~你好
你第7行到16行這些 =>   F_0  F_1  F_2  F_3  F_4  F_5  F_6  F_7  F_8  F_9
,這10個東西你沒有在程序的開頭定義它,你使用CLR要清除東西後面只能接C(進為旗標)或bit(位元)或是A(累加器),因為你沒有在程序開頭宣告定義那10個東西,所以下面才會跑出那10行說無效的
回复

使用道具 举报

20#
ID:74784 发表于 2017-8-13 01:38 | 只看该作者
不会C
只用汇编
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表