散转程序c语言,单片机 散转表程序的使用

原标题:单片机 散转表程序的使用

使用散转表可以尽可能的减少程序的编写,方便。

减少判断次数。

程序名:散转程序试验

;说明: 开使后 1亮,按下任何按键,寄存器r0从零加起,根据r0内容,程序散转到

;相应处执行,以点亮不同的led

;入口: p3.0--p3.3

;出口: P0

;练习日期:2007--06--17 好心情

;修正日期:2007--06--18

;修正内容:将原来用ljmp的部分换为ajmp,将R0结束值改为08

;**************************************************************************

org 0000h

ljmp main

org 0030h

main: mov p0, #07fh ;初始化p0口,led1点亮

mov r0, #00h ;初始化R0,使R0置1

;**********************按键检测********************************************

st: mov P3, #0Fh ;设置P3口,为检测按键做准备,将p3低3位置0

mov a, p3 ;读p3口状态

cjne a, #0fh, F1 ;判断是否有按键按下,若有则跳到F1 处(比较转移,比较a与#0fh的大小

;若不相等,责转移,否则顺序往下执行,如果第一个数大于第二个数,则CY

;清零,否则置1,不影响其它操作位,3字节指令

acall del

ajmp st

;**********************去抖动***********************************************

F1: acall del ;延时

cjne a, #0fh, f2 ;再次判断按键,若按下,则区按键处理程序,否则为干扰

ajmp st

;**********************按键处理*********************************************mov

F2: inc r0 ;r0加1

cjne r0, #08h, F3 ;判断R0是否=8,若等于,则顺序执行并将R0,清0,否则跳转到散转程序

mov r0, #00h ;R0清零

ajmp main

;**********************散转处理*********************************************

F3: mov DPTR, #TAB ;将数据表地址传送到DPTR

mov a, R0 ;将偏移量送入a

clr c ;清零进位位

rlc a ;累加器a内容左移,(相当于*2)

jnc nadd ;若cy为零,则跳转到NADD,否则顺序执行

inc dph ;若cy为1时,DPH+1(因为DPTR为16位地址,a为8位,在此处加一,相当于DPTR低8位

;向高8位进位)修正地址

NADD: jmp @a+DPTR ;散装指令,将a中的无符号数与数据指针DPTR的16位相加,相加之和做为下一条指令的

;地址送入PC中,不改变a和dptr,也不影响标志位,采用变址方式实现无条件转移

;其特点时转移地址可以在程序中加以改变

;***********************数据表************************************************

TAB: nop

nop ;空指令,修正地址

ajmp pb1

ajmp pb2

ajmp pb3

ajmp pb4

ajmp pb5

ajmp pb6

ajmp pb7

;***********************延时***************************************************

del: mov R1, #014h

d1: mov R2, #0FFH

d2: mov r5, #01fh

djnz R5, $

djnz R2, d2

djnz R1, d1

ret

;***********************显示**************************************************

pb1: mov p0, #03fh

acall del

ljmp st

pb2: mov p0, #01fh

acall del

ljmp st

pb3: mov p0, #0fh

acall del

ajmp st

pb4: mov p0, #07h

acall del

ajmp st

pb5: mov p0, #03h

acall del

ajmp st

pb6: mov p0, #01h

acall del

ajmp st

pb7: mov p0, #00h

acall del

ajmp st

end

责任编辑:

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值