打印

最近学习单片机的时候遇到了很多问题

[复制链接]
3433|23
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
chd121487941|  楼主 | 2013-11-15 19:40 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 chd121487941 于 2013-11-15 19:50 编辑

单片机也学了2个多月了,之前只是在学如何控制他,最近想了解他的原理。
根据自己的疑惑在网上收了很多答案,但是也有很多问题没找到想要的答案,所以来论坛求助。
1.不同种单片机的cpu分析同一条机器语言得到的结果不一样是吗?
2.我在keil上编写的c51程序,生成hex文件在用stc isp下载到单片机中是怎么从c代码变成机器语言的?
是生成hex文件后就变成了机器语言还是怎么样?stc isp只是起一个下载作用吗?
3对于”[size=16.19047737121582px]硬件本身也是有程序的,只不过程序固化在硬件上,[size=16.19047737121582px]只有该硬件的设计者才清楚这些程序的具体规范和流程“这句话怎么解读?[size=16.19047737121582px]
4.汇编语言和其它高级语言一样都要经过翻译才能变成机器语言。可以理解为它和高级语言一样,只是离机器语言更接近吗?还是说汇编语言能直接被硬件识别?

我想了解一下单片机工作原理,求推介几本讲解的详细的书籍。

相关帖子

沙发
dirtwillfly| | 2013-11-15 21:11 | 只看该作者
楼主可以找本微机原理看看
1、不同的单片机的机器语言不一定兼容,所以这不只是运行结果不一样的问题。当然,也有兼容的单片机,运行同一条机器语言能得到相同的结果。
2、HEX文件本身里面就是含有机器语言的文本文件。你可以用记事本打开来看看。
3、机器语言都是2进制代码,2进制代码都可以用门电路来表示,所以都可以用硬件描述。固化在硬件里的程序,可以理解成硬件设计者设计出来的一些具有特定功能的硬件电路。
4、汇编语言离机器语言更接近。有不少编译工具都会在编译过程中生成汇编代码

不知道我解释的全不全,请高手指正。

使用特权

评论回复
板凳
NE5532| | 2013-11-15 21:13 | 只看该作者
1.不同内核的单片机,汇编语言(机器语言)不同,无法互相通用。
2.是keil里的C编译器帮你把C语言组织成了汇编语言,stc isp只是一个下载软件,HEX文件是汇编文件生成的机器码的载体(一种数据保存格式罢了),C语言最终生成汇编,再生成HEX文件,再下载。
3.比如STC固华了的BOOT引导程序,厂家预先写在里面的。说白了就是厂家可能先写了一些程序在单片机里,用于一些基础的服务,例如下载、仿真,不告诉你这些程序的细节,你当然就杀都不知道。
4.汇编基本等同于机器码,只是用助记符和宏的方式让人好看,好写罢了,就像你小名叫狗剩,人家好记罢了。

使用特权

评论回复
地板
chd121487941|  楼主 | 2013-11-16 15:48 | 只看该作者
dirtwillfly 发表于 2013-11-15 21:11
楼主可以找本微机原理看看
1、不同的单片机的机器语言不一定兼容,所以这不只是运行结果不一样的问题。当然 ...

感谢你的回答
hex文件为什么是16进制?是我电脑帮我翻译成16进制给我,其实他就是二进制。还是其他?

使用特权

评论回复
5
chd121487941|  楼主 | 2013-11-16 16:08 | 只看该作者
NE5532 发表于 2013-11-15 21:13
1.不同内核的单片机,汇编语言(机器语言)不同,无法互相通用。
2.是keil里的C编译器帮你把C语言组织成了 ...

感谢你的回答 我还是有些疑惑
那汇编的助记符处理器是不懂的,还是要经过软件编译成二进制吗?
那些编译器是厂家提供的吗?要是这样,我们用keil创建c51的时候选择厂家,型号 此时就是在选择编译器吗?
你说的内核,还有常听的51内核到底是什么?处理器吗?

使用特权

评论回复
6
江枫渔火| | 2013-11-16 17:38 | 只看该作者
问的好,只有想得多,才能钻研深。有很多用单片机的人都不会想太多内在的东西的~不过,在日积月累的过程中,这些会逐渐明朗,前提是,心中有问题,想知道。

使用特权

评论回复
7
dirtwillfly| | 2013-11-16 20:37 | 只看该作者
chd121487941 发表于 2013-11-16 15:48
感谢你的回答
hex文件为什么是16进制?是我电脑帮我翻译成16进制给我,其实他就是二进制。还是其他?
...

它本来就是16进制的

使用特权

评论回复
8
NE5532| | 2013-11-16 21:41 | 只看该作者
汇编转成机器码,实际上不见编译了,就直接是翻译。汇编助记符的意思就是不用你写0101。举个例子,你写0101001和写move是一样的,写01你记不住。

编译器不一定由厂家提供,大部分是第三方和原厂合作,比如keil里你能选的型号,就是厂家提供给keil的。

51的内核就是ALU部分。定时器,串口这些就是与内核相对的外设。

使用特权

评论回复
9
chd121487941|  楼主 | 2013-11-17 11:27 | 只看该作者
dirtwillfly 发表于 2013-11-16 20:37
它本来就是16进制的

是哦  他本来就是16进制的。一下子没转过来。:P

使用特权

评论回复
10
chd121487941|  楼主 | 2013-11-17 11:30 | 只看该作者
江枫渔火 发表于 2013-11-16 17:38
问的好,只有想得多,才能钻研深。有很多用单片机的人都不会想太多内在的东西的~不过,在日积月累的过程中 ...

是啊  身边的人好像都不去想这些。只要会用就好。
有时候我真的是很好奇,要是不搞懂,就没心情学学下去。也不知道是好是坏

使用特权

评论回复
11
chd121487941|  楼主 | 2013-11-17 11:50 | 只看该作者
NE5532 发表于 2013-11-16 21:41
汇编转成机器码,实际上不见编译了,就直接是翻译。汇编助记符的意思就是不用你写0101。举个例子,你写0101 ...

编译和翻译不是一个意思吗?是不是翻译就是把助记符变成010101...而编译时把所有变成010101..
总结:汇编其实还带有机器语言,而高级语言直接没有机器语言了  可以这样理解吗?

使用特权

评论回复
12
NE5532| | 2013-11-17 15:23 | 只看该作者
翻译,是一对一的翻译,比如把简体中文翻译成繁体中文,写就是汇编和机器码的区别。编译,就是把英文转成中文,不能一对一,而且要有专门的工具,这就是把C等高级语言编译成机器语言的样子。

使用特权

评论回复
13
chd121487941|  楼主 | 2013-11-17 19:01 | 只看该作者
NE5532 发表于 2013-11-17 15:23
翻译,是一对一的翻译,比如把简体中文翻译成繁体中文,写就是汇编和机器码的区别。编译,就是把英文转成中 ...

原来是这样,非常感谢您的回答

使用特权

评论回复
14
黄小俊| | 2013-11-18 15:35 | 只看该作者
找个视频教程看看就差不多了

使用特权

评论回复
15
chd121487941|  楼主 | 2013-11-18 20:26 | 只看该作者
**n1131 发表于 2013-11-18 15:35
找个视频教程看看就差不多了

能推介一个吗?

使用特权

评论回复
16
黄小俊| | 2013-11-18 22:39 | 只看该作者
郭天祥的很不错。用来入门。

使用特权

评论回复
17
lion187| | 2013-11-19 17:55 | 只看该作者
建议楼主看下计算机体系结构方面的书籍,找本汇编语言的书看看有助于你写出更高效或者更接近底层硬件的程序也会帮你了解软件和硬件是如何“交互”的,关于编译器,你需要看看《编译原理》。家里有一些电子版的这方面书籍,如有需要请留下邮箱。
一般一个系列的CPU只需要一个编译器,但需要传入不同参数。在IDE中对芯片型号的选择,最终IDE会把配置变成参数传入编译器。
C一类的高级语言要经过编译-连接的过程,可以理解为C一类的高级语言先翻译成汇编,在翻译成01形式的机器码,形成类似hex或bin形式的文件。

使用特权

评论回复
18
限量_个性。| | 2013-11-19 17:57 | 只看该作者
你把郭天祥的几节课看完,也不会看到有楼上几位的解释。

使用特权

评论回复
19
chd121487941|  楼主 | 2013-11-19 19:18 | 只看该作者
lion187 发表于 2013-11-19 17:55
建议楼主看下计算机体系结构方面的书籍,找本汇编语言的书看看有助于你写出更高效或者更接近底层硬件的程序 ...

121487941@qq.com
非常感谢

使用特权

评论回复
20
lion187| | 2013-11-20 21:07 | 只看该作者
chd121487941 发表于 2013-11-19 19:18
121487941@qq.com
非常感谢

资料太大,加QQ:174980551来传吧~

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

11

主题

85

帖子

2

粉丝