| 3.11 累加器虽然作为一个16位寄存器出现,但它是16位还是8位取决于状态寄存器的位5(也就是M位,内存/累加器选择)的状态。 在8位模式(M=1)下可访问的低8位被指定为A,隐藏但是可交换的高8位被指定为B,当处于完全的16位累加器模态(M=0),累加器被指定为C。3.12 X,Y 变址寄存器X和Y变址寄存器是8位或16位是可选择的。当状态寄存器的位4(... |
|
| 状态寄存器的位7,6,3,2,1,0(nvdizc)功能和6502的状态寄存器位相同。 不再需要用B暂停位来检测BRK了,取而代之的是用一个新的硬件向量来像IRQ的方法那样指示代码流程到操作系统的ROM处理器。然而,在模拟模式(E=1)下BRK和B就像在6502中一样工作。 3.21 模拟位E:隐藏位模拟状态位E表示处理器是在6502模拟模式或原本的65816模式,设... |
|
| 65816原本模式中增加了两个新的指令用于设置和复位状态寄存器的位。这两个指令是SEP(设置处理器状态位)和REP(复位处理器状态位) 他们都使用单一的操作数来指定哪些位将要被设置或复位。举例来说,要设定状态寄存器的位4为1,以获得8位变址寄存器:SEP #%00010000 ;设置位4 或清除位4来使用16位的XY变址寄存器:REP #%0001... |
|
|
65816模拟模式设计模型
位:
23
15
7
0
累加器(B)
(C)
累加器(A)
数据存储寄存器(DBR)
X变址寄存器
Y变址寄存器
0 0... |
|
| 上面的6502模拟模式设计模型显示了65816一些有趣的特征。即使在不能使用16位变址寄存器的模拟模式下,你仍然能做下面的事情: 重新定位直接页面。 使用堆栈寻址方式。 交换A累加器和隐藏的B累加器。 程序和数据存储寄存器可以被改变。 使用新增的指令。 从原本模式向模拟模式转变时会损失或者改变的东西有:使用16位用户寄存器的能力。状态寄存... |
|
| 通电后,堆栈被放到页面1,直接页面(零页面)被放到页面0。在模拟模式(E=1)下,堆栈被初试化到页面1,零页面被初试化到页面0,以模拟6502的默认状态。 重新定位直接页面(以前称为零页面)是通过使用PLD:直接页面出栈指令来实现的。LDA #$5900 ;累加器直接读入16位数据 PHA ;累加器入16位栈。 PLD ;把数据... |
|
| 65816的原本模式支持所有的6502和65C02的寻址方式和操作码。在原本模式和模拟模式下都支持九个其他的新的寻址方式。然而,在65816原本模式和6502模拟模式在寻址上有一些值得注意的不同。 在模拟模式下,使用零页面变址寻址时,对超过了$FF的(基地址+变址)进行寻址,将不会有页面的折回循环出现。而在65816原本模式下变址可以是16位,因此如果(基地址+变址)超过了本页面,也会生... |
|
|
新增寻址方式
例 子
程序指针相对长程寻址
BRL $1234
堆栈相对寻址
LDA 15,S
堆栈相对间接,Y变址寻址
LDA (9,S),Y
区段移动
MVP 0,0
绝对长程寻址
LDA $123456
绝对变址X长程寻址
LDA $123456,X
绝对变址间接寻址
JMP ($1234,X) ... |
|
| 程序指针相对长程寻址: BRL #$44程序指针相对长程寻址把转移指令的范围从标准的-127/+128扩展到64k(+32767/-32768)。这样,BRL转移指令的操作数就是16位的。这种寻址方式在写重新定位代码的时候会有很大用处。 堆栈相对寻址: LDA 7,S堆栈相对寻址把堆栈指针作为基地址,然后加上用户提供的单字节操作数作为偏移量。S指明... |
|
| 65816的中断有一些奇怪的事情是你应该考虑的。如果你打算写65816原本模式下的代码,你应该考虑到你的中断程序如何被处理。如果你写过在原本模式下的IRQ程序,那么你需要考虑的东西可以少一些。然而,如果你正在写使用16位累加器和/或16位变址寄存器的65816原本模式下的程序,并且你是使用模拟模式下的核心IRQ,那么你必须写一些代码来处理错误。在6502模拟模式下,IRQ先将程序指针的高端字节压栈... |
|
|
硬件向量
65816原本模式
6502模拟模式
IRQ
$FFEE-$FFEF
IRQ/BRK
$FFFE-$FFFF
RESET
$FFFC-$FFFD
NMI
$FFEA-$FFEB
NMI
$FFFA-$FFFB
ABORT
$FFE8-$FFE9
ABORT
$FFF8-$F... |
|
|
65816指令集
语法约定
addr
2字节地址
addr/const
2字节值:是一个地址或一个常数
const
1-2字节的常数
destbk
字符串将被移动到的64K存储段
dp
1字节直接页面(对6502是零页面)偏移量
label
代码标签和指令放在相同的64K存储段内
long
3字... |
|
|
COP 可使用协同处理器
COP通过一个独立的COP硬件向量引起一个软件中断。该硬件向量位于$FFF$-$FFF5。在6502模拟模式下: 程序指针增加2并压入堆栈。 状态寄存器压入堆栈。 中断状态位被设置。 程序指针从硬件向量载入。 十进制标志被清除。
在原本模式中:
程序指针存储寄存器压入堆栈。
程序指针增加2并压入堆栈。
状态寄存器压栈。
中断状态标志被设置。
... |
|
|
区段移动指令
MVP:正向移动(目标地址>源地址)MVN:负向移动(目标地址<源地址)
这是65816的新指令。MVN和MVP可以在没有用户干预的情况下移动内存的数据。
这两个指令都是必需的,这样才能确保数据在进行负方向移动时不会覆盖自身。
移动的源地址从X寄存器中取得,目标地址从Y寄存器中取得。移动数据的长度(16位)从累加器中取得,而不需要理会m标志的值。这个长度... |
|
|
SEP:设置状态位
SEP是一个新的65816指令。当被执行时,它会设置被单字节直接值指定的位。
这是设置X和M状态寄存器位的唯一方法。
举例来说,要设定状态寄存器位5:
SEP #%00100000 ;设置位5或要清除多个位:
SEP #%10110000; 设置位7,位5和位4任何组合都是可以的。
要复位一个位,参考REP。
会受影响的标志:nvmxdizc
... |
|
|
操作码
助记符
寻址方式
指令长度
周期
备注
00
BRK
堆栈/中断寻址
2**
7
9
01
ORA
直接页面变址X间接寻址
2
6
1,2
02
COP
堆栈/中断寻址
2**
7
9
03
ORA
堆栈相对寻址
2
4
1
04
TSB
直接... |
|
|
操作码
助记符
寻址方式
指令长度
周期
备注
80
BRA
程序指针相对寻址
2
3
8
81
STA
直接页面变址X间接寻址
2
6
1,2
82
BRL
程序指针相对长程寻址
3
4
83
STA
堆栈相对寻址
2
4
1
84
... |
|
|
*
1 如果m=0(16位内存/累加器)则增加1
**
操作码是1个字节,但是压入堆栈的程序指针的值是2个字节,因为有可选的签名字节
+
如果x=0(16位变址寄存器)则增加1个字节
1
如果m=0(16位内存/累加器)则增加的1个周期
2
如果直接页面(零页面)寄存器的地位不是0(DL<>0)则增加一个周期
3 ... |
|
| 65816集成电路引脚
W65C816
VP
1
40
RES
RDY
2
39
VDA
ABORT
3
38
M/X
IRQ
4
37
o2 (IN)
ML
5
36
BE
... |
|
| 1、用PICSTART PLUS能否烧录PIC16C55A和PIC16C57C? 答:能,制作一特殊适配座即可,即:将芯片第26脚不接入原烧写座。 2、用PIC16F87X能否代替PIC16C7X? 答:完全可以,但配置位应注意,LVP=OFF,DEBUG=OFF即可。 3、MPLAB-ICD能否仿真... |
|
| PIC单片机在执行SLEEP指令后进入睡眠省电模式。进入SLEEP模式后,主振荡停止,如果看门狗在烧写时打开了,看门狗定时器将被清并保持运行。I/O口,周边模块和内部RAM将保持原来状态,所以如果要求睡眠后有很低功耗,应该在进入SLEEP前把IO口置为高阻抗的输入状态,不用的模块也要关闭。另有些周边模块与主时钟有关,如在异步模式下的USART,将不工作。 &nbs... |
|
| 最近搞了的项目是OTP的,由于没有开发片,浪费比较大。今天想到一个好办法(不知其它同仁是否这么做的?不要笑啊) 就是同一个OTP的片子可以分区写,当然要程序小才行方法如下, 第一次在开始地址空出适量的FFFFFFF来,如果第二次要写就从这儿跳转就象中断向量一样,这样第二次的程序可以写到后面空余的... |
|
| 硬件: 使用5根I/O口线(如PORTC的0-4)外接电阻网络实现简易D/A转换, 再加一个电容滤波。软件: 目前我使用的程序正在某产品中应用,鉴于商业原因无法在此贴出 ,请谅解!但程序原理同网上的大同小异,你了解了... |
|
| 这款全功能高性能的PICC ME16 C编译器是专为Microchip的PIC16C57,PIC16C67,PIC16F77和PIC16F877这四款高性能单片机而设计的。软件包含在一张CD-ROM上,并配有12页的全中文快速使用指南。PICC ME16编译器可以与Microchip MPLAB-IDE (集成开发环境)配合工作。MPLAB IDE 是一个桌面集成开发环境和开发工具组,用于单片机的... |
|
| 我想用PIC508 做AT89C51的看门狗电路,代替MAX813。就我所知已有采用这种用法的。在某通信产品中,因为需要总线的扩展,确实用51比较合适,但由于该系统大部分时间是休眠的,而且要求休眠功耗极低,而仅仅让51单片机休眠是远远不能满足这个功耗要求的。所以,最后的设计思想是,用508控制51系统的电源开关,关断51系统后,508进入睡眠状态(可以打开内部WDT定时唤醒)... |
|
| 先谈硬件: 对于PIC,它的优点有诸如抗干扰性能好,双向I/O口驱动电流大等优点,甚至内部有上电复位电路,上电延时电路,内建RC振荡器,看门狗定时器,A/D变换电路,功耗低等。硬件上吸引人的地方确实比较多,而且正是由于这些点点滴滴使得它的抗干扰性能比51好,这好像是公认的。当然它也有一个致命的弱点--不能外扩程序存储器和数据存储器,对于程序比较大而且是... |
|
| 、《PIC系列单片机原理和程序设计》 窦振中 编著 出版日期:1998年10月第1版 2000年9月第4次印刷 书号:ISBBN-7-81012-797-7 定价:29.00 内容简介 本书介绍当前在十分繁荣的单片机世界中异军突起的一种单片机---Microchip公司的PIC系列单片机。这个系列单片机具有以下体现微控... |
|
| AVR000: AVR微控制器的注册及位名定义 (2000-08-28)本应用指南包含一些文件,它们允许用户在写汇编程序时使用该数据手册中的注册及位名。AVR032:用于IAR ICCA90编译器的链接器命令文件 (2000-08-30)本应用指南描述了如何完成一个链接器命令文件,它与IAR ICCA90 C编译器一起用于AVR微控制器。AVR034:C及汇编代码与IAR嵌入式工作台混合用于AVR... |
|
| 分别用ICCAVR,IARAVR,CVAVR对一段程序进行了测试比较。最后发现IARAVR的编译代码最短。 结果分别是:ICCAVR 546word CVAVR&nb... |
|
| Features• High-performance, Low-power AVR® 8-bit Microcontroller• Advanced RISC Architecture– 130 Powerful Instructio... |
|