什么是学习PIC微控制器汇编语言的最佳资源[关闭]

问题描述 投票:7回答:5

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

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

编辑:这篇文章的主要目的是请求学习大会的资源,而不是在PIC中讨论C与汇编的优点,或者PIC是否是一个“好”的微控制器。我使用的是PIC18单片机,如果这有任何区别的话。

assembly embedded microcontroller pic microchip
5个回答
2
投票

我会试试这个:Pic Tutorial


5
投票

有一个PIC架构,具有明显不同的指令集。例如,Microchip没有Atmel AVR的架构一致性。所以你需要指定你正在使用的东西 - 例如PIC12,16,24,32。

首先,我建议避免PIC汇编程序,因为你所学的内容是PIC12,这可能不太适用于PIC24。其次,如果我可以作为软件开发人员,我会完全避免使用PIC - 尽管我承认还有其他考虑因素,你可能别无选择。

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

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


2
投票

这可能是一个相当晚的回复,但您可以从本实验课程中受益,该课程主要是为了通过应用程序学习PIC程序集。

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

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

实验0 - (MPLAB简介)

实验1 - (PIC组装指令集简介)

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

实验3 - (基本系统分析和设计) 3.1。硬件指南I

实验4 - (LCD - HD44780)

实验5 - (键盘)

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

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

实验8 - (USART)

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


它基于PIC 16系列,最值得注意的是16f84A,16F877A和16F917 ..这些例子都得到了充分的评论,实验得到了充分的解释。


0
投票

我是编写反汇编程序的信徒。从一个非常简单的一行或两行程序开始,该程序可以加载带有常量的寄存器(必须阅读教程或学习该步骤的内容)。组装它。以您能够或愿意编写程序的格式保存二进制文件(或许是intel hex,如果他们支持,则为elf)。

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

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

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

我已多次使用这个过程并学习了许多指令集,ymmv。在前三对之后,上述过程可能只需要一个下午才能完成。

编辑:

这里的目标是教育而不是下一个伟大的sourceforge项目。输出可能是丑陋的或不完整的,因为你是唯一一个阅读它的人。

注意:用于可变长度指令集的通用反汇编程序可能有些困难,在这种情况下,您不希望线性地反汇编二进制文件,以便遵循所有执行路径。我会避免它。采用稍微线性组装的简单程序,即使在可变长度指令集上也不难进行拆卸。通过反汇编和检查C编译器(或其他高级语言)的输出,如果编译器没有汇编器输出选项或没有反汇编程序,你可能无法学到很多关于指令集的知识。利用这个(除非它是一个固定长度的指令集)。

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


0
投票

PICList:http://piclist.com/

特别是,

© www.soinside.com 2019 - 2024. All rights reserved.