电子爱好者学习、教学经验,对这些最基本概念作一说明

一块单片机应用电路板包括单片机部份及为达到使用目的而设计的应用电路,仿真就是利用仿真机来代替应用电路板(称目标机)的单片机部份,对应用电路部份进行测试、调试。

1. 巴士:

我们知道电路总是由通过电线连接的组件组成。 在模拟电路中,接线不会成为问题,因为器件一般都是串联关系,器件之间的连线并不多。 ,但计算机电路不同。 它基于微处理器。 每个设备都必须连接到微处理器。 每个设备的工作必须相互协调,因此需要大量的连接。 如果还是像模拟电路一样,如果每个微处理器和每个设备之间都有单独的连接,那么线路数量将是惊人的。 因此,微处理器中引入了总线的概念,各个设备共享连接。 所有设备的8根线全部数据线都连接到8根公共线,相当于将设备并联起来,但仅此还不够。 如果两个设备同时发送数据,一个是0,另一个是1,那么接收方接收到的到底是什么呢? 这种情况是不允许的,所以必须通过控制线进行控制,使设备分时工作。 任何时候只有一台设备可以发送数据(多台设备可以同时接收)。 设备的数据线也称为数据总线,设备的所有控制线称为控制总线。 微控制器内部或外部存储器和其他设备中都有存储单元。 这些存储单元必须先分配地址才能使用。 当然,所分配的地址也是以电信号的形式给出的。 由于存储单元较多,因此用于地址分配。 还有很多线,这些线称为地址总线。

2.数据、地址、指令:

之所以将这三者放在一起,是因为这三者的本质是相同的——数字,或者是‘0’和‘1’的序列。 换句话说,地址和指令也是数据。

命令:微控制器芯片设计者指定的数字。 它与我们常用的命令助记符有着严格的一一对应关系,单片机的开发者无法更改。

地址:是查找单片机内外存储单元和输入输出端口的依据。 内部单元的地址值已经由芯片设计者指定,不能更改。 外部单元可以由微控制器开发人员确定,但有一些地址单元。 一定有的(具体参见程序的执行过程)。

数据:这是微处理器处理的对象,在不同的应用电路中数据有所不同。 一般来说,正在处理的数据可能有以下几种情况:

地址(如MOV DPTR,#1000H),即地址1000H发送到DPTR。

模式字或控制字(如MOV TMOD,#3),3为控制字。

常数(如MOV TH0、#10H) 10H 为定时常数。

实际输出值(例如P1口接了彩灯,如果要灯全亮,执行命令:MOV P1,#0FFH。如果要灯全暗,执行命令:MOV P1,#00H)。 这里0FFH和00H是实际输出值。 。 另一个例子是LED使用的字形代码,它也是实际的输出值。

一旦理解了地址和指令的本质,就不难理解为什么程序会跑掉并把数据当作指令来执行。

3、P0口、P2口、P3的第二个功能使用:

刚开始学习的时候,经常对P0口、P2口、P3口的第二个功能的使用感到困惑。 我觉得第二个功能和原来的功能之间需要有一个切换过程,或者需要有一个指令。 事实上,每个端口的功能都是完全自动的,不需要指令来转换。 例如,P3.6和P3.7分别是WR和RD信号。 当微芯片处理器连接到外部 RAM 或具有外部 I/O 端口时,它们用作第二功能,不能用作通用 I/O 端口。 微处理器一执行MOVX指令,就会从P3.6或P3.7发出相应的信号,无需事先指令指令。 事实上,“不能用作通用I/O端口”并不意味着“不能”,而是(用户)“不会”将其用作通用I/O端口。 你完全可以在指令中安排一条SETB P3.7指令,当单片机执行这条指令时,也会使P3.7为高电平,但用户不会这样做,因为这通常会导致系统崩溃(即冻结)。

4、程序执行过程

单片机上电复位后,8051中程序计数器(PC)的值为‘0000’,因此程序总是从‘0000’单元开始执行。 也就是说:系统ROM中必须存在‘0000’这个单元。 ,而'0000'单元中存储的一定是一条指令。

5. 堆栈:

栈是用来存储数据的区域。 这个区域本身并没有什么特别的。 它只是内部 RAM 的一部分。 特殊的是它存储和访问数据的方式,也就是所谓的“先进后出”,而栈有特殊的数据传输指令,即“PUSH”和“POP”。 有一个特殊的单元专门为它们服务,那就是堆栈指针SP。 每当执行 PUSH 指令时,SP(在原值的基础上)自动加 1。每当执行 POP 指令时,SP 会自动减 1(在原值的基础上)。由于 SP 中的值可以通过指令改变,只要在程序开始时改变SP的值,就可以将堆栈设置在指定的内存单元中,例如在程序开始时使用一条MOV SP,#5FH指令,然后在从存储单元60H开始的存储单元中建立堆栈,一般在程序的开头总会有一条设置堆栈指针的指令,因为启动时SP的初始值为07H,这使得堆栈从08H单元开始往回走,08H到1FH的区域是8031的第二位和第三位,经常使用第四个工作寄存器区域,这会造成数据混乱,不同作者写程序时,初始化堆栈说明并不完全相同。 这是作者的习惯问题。 当堆栈区域被设置后,并不意味着该区域就成为了特殊的内存。 它仍然可以像普通内存区域一样使用,但一般程序员不会把它当作普通内存来使用。

6、单片机开发流程

这里所说的开发过程并不是一般书籍中所说的从任务分析开始。 我们假设硬件已经设计并生产出来,下一步就是编写软件。 在编写软件之前,首先要确定一些常量和地址。 事实上,这些常量和地址在设计阶段就已经直接或间接确定了。 例如,当设计一个设备的接线时,它的地址就确定了。 当设备的功能确定后,其控制字也确定了。 然后使用文本编辑器(如EDIT、CCED等)编写软件。 编写完成后,用编译器对源程序文件进行编译并检查是否有错误,直到没有语法错误为止。 除非常简单的程序外,一般采用仿真机来编译软件。 调试直至程序正确运行。 运行正确后即可烧写片子(将程序固化在EPROM中)。 源程序编译后,生成扩展名为HEX的目标文件。 一般程序员都可以识别这种格式的文件,只要加载这个文件就可以写入片子。 这里,为了让大家了解整个流程,这里举个例子:

表1:源程序

组织0000H

LJMP 启动

奥格040H

开始:MOV SP,#5FH; 设置堆栈

循环:无

LJMP 循环; 环形

结尾; 结尾

表2

:040BB

:15F000200431F

表3

02 00 40 FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF FF 。 FF FF FF FF FF FF FF FF FF FF FF FF FF FF 75 81 5F 00 02 00 43

源程序如表1所示。

表2是汇编后得到的HEX文件。

表3是HEX文件转换后的目标文件,也就是最终写入EPROM的文件。 由程序员转换或者可以用HEXBIN等程序转换。 学过手工组装的人应该不难发现表3和表1之间的一一对应关系。值得注意的是从02 00 40开始到75 81的一长串“FF”。这是由于伪指令: ORG 040H 的结果。

7.模拟、模拟机

仿真是微控制器开发过程中非常重要的一个环节。 除了一些非常简单的任务外,通常在产品开发过程中进行模拟。 仿真的主要目的是软件调试。 当然,借助模拟器,也可以进行一些硬件调试。 。

微控制器应用电路板包括微控制器部分和为实现使用目的而设计的应用电路。 仿真就是用模拟器代替应用电路板(称为目标机)的单片机部分,对应用电路部分进行测试和调试。 仿真有两种类型:CPU仿真和ROM仿真。 所谓CPU仿真是指用模拟器代替目标机CPU的方法,模拟器向目标机的应用电路部分提供各种信号和数据进行调试。

这种模拟可以通过单步运行、连续运行等多种方式来运行程序,并且可以观察单片机内部的变化,很容易纠正程序中的错误。

所谓ROM模拟,就是用模拟机来代替目标机的ROM。 当目标机的CPU工作时,它从模拟机中读取程序并执行。 这种仿真实际上是把仿真器当成了EPROM,只不过省去了擦写芯片的麻烦,而且调试方法根本就不多。 通常这是两种不同类型的仿真器,也就是说,一个仿真器不能同时进行CPU仿真和ROM仿真。 如果可能的话,当然最好使用CPU仿真。

单片机

爱吃水果的你们,有没有吃过农村地区的野果子?

2024-1-26 13:01:44

单片机

树莓CB160H.264视频解码和264..视频编码

2024-1-26 14:01:48

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索