68HC11指令学习

1.微处理器芯片(MPU)

a.对所有的uC部件提供时序和控制信号

b.从存储器读取指令和数据

c.从I/O设备转移数据或转移数据到I/O设备。

d.指令解码

e.执行指令所调用的算术和逻辑操作

f.响应I/O口所产生的控制信号,如复位和中断

2.2.68HC11 MPU----更复杂版

(1)    有5个16位寄存器连接到68HC11的内部地址总线。一个变址寄存器X、一个变址寄存器Y和一个堆栈寄存器SP、PC和DAR。这些寄存器中的每个都由2个8位组成。

例如:PCh是PC的高字节,PCl是PC的低字节。

(2)    有2个8位累加器,ACCA和ACCB,连接到ALU和内部总线。累加器A和累加器B可以作为单独的16位寄存器,称为双倍累加器ACCD。注意68hc11只有2个累加器ACCA和ACCB,但是,当使用ACCD的时候,实际上是串联了累加器A和B.

(3)    一个8位条件码寄存器(CCR)连接到ALU

68HC11分成3个部分进行讨论:

时序和控制、寄存器、以及ALU

时序和控制部分:
控制总线信号

AS信号:

这个输出信号叫做地址选通,

RESET复位的4种方式:

外部复位

加电复位(POR)

计算机正常操作复位(COP)

时钟监视器复位

为了保证MPU稳定,RESET必须保持低电平至少4个E时钟周期

初始化MPU的一些共同的功能有:

(1)    初始化MPU寄存器(例如CCR和SP)

(2)    初始化I/O设备控制寄存器

(3)    执行系统RAM测试

(4)    检查I/O设备的状态

(5)    送信息到输出设备(例如:视频显示、LED和打印机),把系统状态通知操作者,或提醒输入命令

加载指令寄存器(LIR):

中断请求(IRQ)

不可屏蔽中断请求(XIRQ):这是另一个MPU中断输入,但和IRQ有差别,在于它一旦被使能,就不能被禁止。

指令寄存器IR

程序计数器PC

PC通常包含MPU要读取的下一条指令代码的存储器地址。

数据地址寄存器(DAR)

累加器

通用寄存器:

变址寄存器:

3.       一些68HC11的指令

LDAA     存储器地址的数据加载到累加器A,存储器地址是操作代码后面的2个字节

STAA      累加器A的内容保存在存储器地址内,存储器地址为2字节操作数地址

ADDA     由2字节操作数地址指定的存储器地址内的数据和累加器A相加,结果保存在累加器A

SUBA     除了是从累加器A减去数据,其他的和ADDA相同

WAI        代表等待,这个指令可以用来停止执行一个程序,但是并不是唯一的

JMP              跳转,加载2字节操作数地址到PC,从这个新地址取下一条指令

BEQ              如果CPU执行的最后的操作结果是0,则把操作代码后面的字节偏移加到PC,从这个新地址取下一个指令,否则,顺序读取下一个操作代码

一个计算机系统包含硬件、软件、和固件、硬件是物理上组成计算机的电子、机械和磁性设备。从小的微型计算机到大的大型计算机,硬件的数量大有不同,但有一点是相同的,存储器中若没有一个或多个程序,硬件将毫无用处。

       软件是指导计算机系统从开机到关机的所有活动的程序,所有软件可以分为两类:

  1. 应用软件和系统软件。

当程序在ROM中,就经常被称为固件。

累加器:(Accumulator)  用做ALU的输入和输出的寄存器

地址总线(Address  Bus)从MPU运载地址代码到存储器单元的线

算术/逻辑单元(ALU)计算机中在程序执行过程中对数据执行算术和逻辑操作的部分。

汇编编译器Assembler允许计算机把汇编语言转换成机器语言的程序

汇编编译:Assembly把汇编语言源程序转换成机器语言目标程序的过程

汇编语言:Assembly Language允许使用助记符代替二进制或十六进制机器语言指令的编程语言。

字节(Byte) 一个8位数据,许多微处理器的字大小是一个字节

中央处理单元(CPU) 控制单元和ALU的组合

编译器(Compiler)  把完整高级语言程序转换成机器语言目标程序的程序

4.微机的结构和操作

微机(uC)和微处理器(uP)之间的差异。

5.时钟信号:

使用一个单独的系统时钟,称为E时钟,E时钟由68HC11芯片内部产生,内部和外部都可以使用,时钟频率由芯片的EXTAL和XTAL管脚所接的外部时钟器件决定,包括一个晶振和一个电阻/电容的组合。

         提供到EXTAL和XTAL管脚上的频率通常为MPU系统时钟或E时钟的4倍。

6.读和写的时序:

ORG $E100;任意的开始地址,设置XIRQ伪向量
LDAA # $7E

LDAA # $5A;把数值$5A放在ACCA中

ORG $E000;指定起始地址
LDAA COOLANT_TEMP;读取冷却剂温度
SUBA #CT_OFFSET;减去补偿
STAA STORE_TEMP;保存以备后用

CLRA ;把ACCA清除为$00
LDAA #$5C;把$5C加载到ACCA

累加器A(ACCA)
程序计数器(PC)
累加器B(ACCB)
可以用这2个8位寄存器组成一个16位寄存器D(ACCD)
变址寄存器X
变址寄存器Y
堆栈指针
程序计数器

条件代码寄存器CCR

ORG $E000
CLRA 

;//////////////////////////////////////////////////////////////////////////////////////
PAGE0 EQU 0
STACK EQU $FF
PROGSEG EQU $0100

 ORG PAGE0
RAM   RMB 4
MAXRESULT RMB 1
COUNT  RMB 1
FIRST FCB $5C, $67, $00, $31, $B3, $A5, $20, $80

 ORG PROGSEG
 LDS #STACK;初始化堆栈

CLRA ;把ACCA请除为$00

LDAA #$5C;把$5C加载到ACCA

INCB :ACCB递增

CLRA

INCB

XGDY:ACCD和IY交换

DEY:1Y递减


unsigned int Swap, VarD, VarY;
unsigned char VarA, VarB;

void main(void)
{
 VarA = 0;
 ++VarB;
 Swap = VarY;
 VarY = VarD;
 VarD = Swap;
 --VarY;
}


LDAA #$5C是源代码,操作码LDAA是Load ACCA指令,但没有说明加载的内容,操作数#$5C指定了加载的内容,前缀数据符号#表示是立即寻址---源代码
,操作数是实际的数据。

LDY #$B704,把数值$B074加载到IY中,同样前缀#表示源代码形式的立即寻址模式。

例子程序:使用立即寻址的指令

 ORG $E000;起始地址
 LDAA #$5C;加载$5C到ACCA
 ADDA #$02;ACCA加$02
 LDAB #$17;$17加载到ACCB
 ABA  ;累加器B的内容和累加器A的内容相加,结果放在累加器A,累加器B 的内容不变。这个指令影响H条件代码位,所以适合用在BCD算术操作中。
 LDD  #$1234;$12->ACCA
      ;$34->ACCB
      BRA *;程序终止
     
     
     
 ldab #94;十进制数94 = 0x5e = 0x5c + 2
 stab _VarA
 
 直接寻址和扩展寻址模式
 寻址范围:
 
  ORG  $E000;起始地址
  LDAA $1B  ;直接模式
  STAA $6D00 ;必须用扩展模式
  LDAB $001C ;尽管可以用直接模式,但还是用扩展模式
  STAB $6D01  ;必须用扩展模式
  BRA  *;停止程序运行
  
  强制扩展寻址
  可以使用大于号(>)来强制使用扩展寻址。
  ORG  $E000
  LDAB $0005 ;汇编器使用直接寻址
  LDAB >$0005 ;强制使用扩展寻址
  
  访问输入/输出端口
  
C 语言实现相同的操作
 unsigned char LoadA, StoreA, LoadB, StoreB;
 void main(void)
 {  
  StoreA = LoadA;
  StoreB = LoadB;
 }
 变址寻址模式
 
 间接寻址
 本模式的关键是CPU用变址寄存器间接指向数据,变址寄存器指向的是数据的地址,
 不是实际的数据。
 
 
 ORG  $E000;起始地址
 LDAA $00,X;变址模式加载
 ADDA $01,X;变址模式相加
 STAA $20,Y;变址模式保持
 ABY  ;固有模式
   ;修改IY的指令
 INY  ;IY递增
 STAA $30,Y
 
 
 基本操作
 数据处理
 数据处理指令分成三部分:
 数据移动、数据修改、移位和循环
 
 ORG设置地址计数器
 DB 定义字节
 DW定义字
 EQU 等于
 DS定义空间
 
 
 
 ORG  $FFOO;演示模拟的开始地址
 *----------------------------------------------------------------------
 *主程序开始
 LDS  #$FF
 LDX  #$1122
 LDY  #$3344
 LDAB #$55
 LDAA #$1C
 *使能XIRQ中断
 TPA  读取原来的中断
 

 
pasmhc11-dxs-l myprog.lst myprog.s

LDAA #$55;取数指令
ADDA $0100;加法指令

1.ASCT绝对段


2.BSCT基段
它是一个可重新定位的段
基段通常用于存放直接寻址方式访问的变量
基段所处的地址区域为0--255

3.CSCT空白公共段

ACCA 累加器A
ACCB 累加器B
IX  变址寄存器X
PC  程序计数器
SP  堆栈指针
1   1   H       I        N    Z   V   C
       半进位 中断屏蔽  符号
 状态寄存器CCR

原文地址:https://www.cnblogs.com/tao560532/p/2572063.html