文档介绍:第五章EM78系列单片机程序设计
EM78 系列八位微控器特色指令用法
查表指令与用法
EM78 系列八位微控器是利用(1)“call",(2) 改变PC (或“tbl"),(3)“retl k" 三个步骤来查表的。其中“retl k" 是将常数 k 的值传至工作寄存器"A" 中。
步骤(2) 中若利用“mov 0x2,a",或“add 0x2,a" 等等指令来改变PC,则因为此等指令会將 PC (R2) 的位 8、9 清除(在 EM78056 只清除位 8),所以查表的内容只能放在程序每个 PAGE 的較低的 256 个位址。步骤(2) 中若利用“tbl" 指令来改变PC,则因为此指令不会將PC (R2) 的位 8、9 清除,而保留“tbl" 所在位址的位 8、9,所以查表的内容可以放在程序每个 PAGE 中的任何位址。
例:查表
table add 0x02,a ;將相对位置加入 PC 而改变了PC
retl ***@0x19 ;传回常数内容 19h 至"A"
retl ***@0x74 ;传回常数内容 74h 至"A"
retl ***@0x2e ;传回常数内容 2eh 至"A"
retl ***@0x54 ;传回常数内容 54h 至"A"
retl ***@0x4b ;传回常数内容 4bh 至"A"
inc 0x18
mov a,0x18 ;欲查的内容的相对位置放在"A"
call table ;查表
mov 0x10,a ;查表得到的内容移至 R10 中
分 PAGE 的用法
1. 程序跳 PAGE 的用法:
EM78 系列八位微控器將其 Program Memory (ROM) 分成数个 PAGE,每个 PAGE 的长度是 1K (EM78056 除外)。R3 寄存器的位 5 (6) 是"PAGE 选择位",当执行"jmp" 或"call" 指令时,"PAGE 选择位" 会被载入 Program Counter 的位 10 (11),因此当程序超过 1K (EM78056 为 )时,执行"jmp" 或"call" 指令时,"PAGE 选择位" 正确的设定是非常重要的。下面将以 EM78256 为例来说明跳 PAGE 的方法。
例
例:从PAGE 1 跳转到PAGE 0
; PAGE 0, begin at 000h
049 add 0x11,a
050 mov a,***@0x55
051 mov 0x05,a ;port5<-- 0x55
052 bs 0x03,5 ;select PAGE 1
053 jmp lab1 ;PAGE jump
054
; PAGE 1, begin at 400h
447
448 mov a,***@0x3f
449 xor 0x12,a
450 Lab1 bc 0x06,3
451 mov a,0x05
说明:
052: 将 R3 寄存器的位 5 设为"1" (选择 PAGE 1)。
053: Lab1 会被编译为"50",程序跳转至 PAGE 1 中"Lab1" (450) 的位址。
注意:
此例中"052" 和"053" 是用来跳 PAGE 的,假如沒有"052" 这行指令,则程序将跳转至"050" 的位址(在 PAGE 0中),如此將沒有达到預期的目的。
2. 不同 PAGE 子程序呼叫的方法:
如第 1 项所述,当程序超过 1K 時,执行"call" 指令时,"PAGE 选择位" 的设定就必须加以考虑。下面將以 EM78256 为例来说明呼叫不同 PAGE 子程序的方法。
例: 从PAGE 0调用PAGE 1中的子程序
; PAGE 0, begin at 000h
049 add 0x11,a
050 mov a,***@0x55
051 mov 0x05,a ;port5<-- 0x55
052 bs 0x03,5 ;select PAGE 1
053 call Lab2 ;PAGE jump
054 bc 0x03,5 ;restore
055 jbs 0x15,2
056
; PAGE 1, begin at 400h
417
418 mov a,***@0x3f
419 xor 0x12,a
450 Lab2 bc 0x06,3
451 mov a,0x05
45f ret
說明:
052: 將 R3 寄存器的位 5設为"1" (选择 PAGE 1)。
053: Lab2 將会被編译为"50",呼叫 PAGE 1 中"Lab2" 子程序。
054: 將 R3 寄存器的位5 还原为"0"。
注意:
此例中"052" 和"053" 是用来呼叫 PAGE 1 中"Lab2" 的子程序,假