7

我将开始一个项目,我需要对 PIC 单片机的汇编语言有一个很好的理解。我对 C/C++ 非常熟悉,所以我大部分时间都知道如何编写代码,而且我已经为 PIC 做过很多项目,所以我了解架构,但我已经在“C”中完成了所有的编程。

是否有一本好书或网站可以很好地解释所有汇编命令的含义以及如何为 PIC 微控制器执行相当简单的任务(闪烁 LED、基本数学等)?

编辑:这篇文章的主要目的是请求学习汇编的资源,而不是讨论 PIC 中 C 与汇编的优点,或者 PIC 是否是一个“好”的微控制器。如果这有什么不同,我正在使用 PIC18 微控制器。

4

5 回答 5

5

有不止一种 PIC 架构,具有明显不同的指令集。例如,Microchip 不具备 Atmel AVR 的架构一致性。因此,您需要指定您正在使用的内容 - 例如 PIC12、16、24、32。

因此,首先我建议避免使用 PIC 汇编器,因为您在 PIC12 上学到的知识可能不太适用于 PIC24。其次,如果我作为软件开发人员可能的话,我会完全避免使用 PIC——尽管我承认还有其他考虑因素,你可能别无选择。

您可以选择不使用汇编程序。虽然低端 PIC 可能不是最适合 C 代码生成,但这是编译器编写者的问题;在可能的情况下使用 C 语言在开发时间方面更具成本效益。另一方面,对于大批量产品,如果您可以使用汇编程序将代码装入较小的部分,这可能是一个因素。在测试 C 解决方案之前决定需要汇编程序通常是“过早的优化”。即使 C 实现未能满足大小或时间限制,您也可以将其称为原型,然后对其重新编码以满足限制条件。这样做可能仍然比从头开始汇编程序编码并同时在设计和指令集上苦苦挣扎要快。告诉你的老板你会用 C 做原型,然后当它满足要求时,

最后回答您的问题,假设您需要快速高效地完成工作,请尽可能使用 Microchip 的示例和应用笔记,并熟悉制造商指令集参考中的指令集。低端部分的指令集并不大。对于日常工作,我喜欢使用“说明集参考卡”作为备忘录 - 它总结了每条说明的所有基本细节,通常在几页中 - 将其双面打印并层压!;)。这是一个PIC16 示例

于 2009-09-24T21:01:53.170 回答
2

我会试试这个: 图片教程

于 2009-09-24T18:54:33.033 回答
2

这可能是一个很晚的回复,但您可以从这个主要为通过应用程序学习 PIC 组装而编写的实验课程中受益。

检查:http ://embedded-ju.ucoz.com/

检查实验选项卡,它包括:

实验 0 -(MPLAB 简介)

实验一 ——(PIC汇编指令集简介)

实验 2 -(更多关于指令集和模块化编程技术)

实验3 ——(基本系统分析与设计)
3.1.硬件指南 I

实验 4 - ( LCD - HD44780 )

实验 5 -(键盘)

实验 6 -(在 MPLAB 中使用 HI-TECH C 编译器)6.1。PIC 编程与 ICD2 指南。

实验 7 - (定时器 (Timer0 和 Timer2))

实验 8 - (USART)

实验 9 - (软件 PWM & A/D)


它基于 PIC 16 系列,最值得注意的是 16f84A、16F877A 和 16F917 .. 示例已完全注释,实验已完全解释。

于 2010-12-23T13:17:35.603 回答
0

我相信编写反汇编程序。从一个非常简单的一两行程序开始,它可能会加载一个带有常量的寄存器(必须阅读教程或其他东西来学习该步骤)。组装它。以您能够或愿意编写程序来读取的格式保存二进制文件(也许是英特尔十六进制,或者如果他们支持,则为精灵)。

编写一个程序来读取二进制文件并提取程序,然后获取这些字节并编写一个反汇编程序(即使供应商有一个反汇编程序,您仍然应该编写一个)。

现在开始迭代过程,学习一条新指令或使用该指令的新方法,一次一条指令。编写代码来反汇编该指令或选项。尝试编写汇编程序来操作指令中的每个位。

当你读完指令集时,你会比大多数每天使用它的人更了解指令集,你会知道如何为每个操作码的每个选项编写汇编程序,你也可以了解为什么这个指令只能从其位置寻址 N 个字节,而其他指令可以访问任何内容,或者该指令只能使用 N 位立即数,而其他指令可以使用任何值。之类的东西。

这个过程我用过很多次,学习了很多指令集,ymmv。在前两三个之后,上述过程可能只需要一个下午即可完成。

编辑:

这里的目标是教育而不是下一个伟大的 sourceforge 项目。输出可以像你喜欢的那样丑陋或不完整,你是唯一会阅读它的人。

注意:可变长度指令集的通用反汇编器可能有些困难,您不想线性反汇编二进制文件,在这种情况下您想遵循所有执行路径。我会避免它。即使在可变长度指令集上,采用执行某种线性汇编然后反汇编的简单程序也不困难。如果编译器没有汇编器输出选项或没有反汇编器,您可以通过反汇编和检查 C 编译器(或其他高级语言)的输出来了解指令集利用这一点(除非它是一个固定长度的指令集)。

另请注意,一旦您为一个处理器学习了汇编程序,第二个处理器就会容易得多,依此类推。你需要从一个到下一个学习的东西通常是这个跳跃有多大,立即数的规则是什么,间接寻址,基本上所有与检查操作码直接相关的东西。您可以在不查看操作码的情况下学习它,但您必须依赖高质量的文档或汇编程序错误消息。

于 2009-09-24T19:41:02.303 回答
0

PICList:http ://piclist.com/ 。

尤其,

  • “PIC 微控制器的初学者清单” 有很多很好的提示。
  • Mike McLarens 的HTMLPDF 格式的 PIC18F 指令集摘要包含 PIC18F“16 位内核”的所有汇编语言指令的一页摘要。
于 2011-03-13T04:09:49.920 回答