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,从这个新地址取下一个指令,否则,顺序读取下一个操作代码
一个计算机系统包含硬件、软件、和固件、硬件是物理上组成计算机的电子、机械和磁性设备。从小的微型计算机到大的大型计算机,硬件的数量大有不同,但有一点是相同的,存储器中若没有一个或多个程序,硬件将毫无用处。
软件是指导计算机系统从开机到关机的所有活动的程序,所有软件可以分为两类:
- 应用软件和系统软件。
当程序在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