原创 单片极学习笔记 1---散转

2007-6-27 10:48 2952 6 7 分类: MCU/ 嵌入式

点击看大图


 


今天忘了把源程序考过来了,明天不上


顺便求助一下,如何把protel 中的图纸贴到博客里,不要转成图片,不清楚


;**************************************************************************
;程序名:散转程序试验
;说明: 开使后led1亮,按下任何按键,寄存器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

文章评论1条评论)

登录后参与讨论

用户820185 2010-12-24 10:32

用户182381 2009-2-27 19:50

XIEXIE

用户182654 2008-11-29 09:10

先看看再说

用户31937 2007-7-13 09:58

不错的一篇文章学习一下,也欢迎你到我的博客做客,交流技术经验http://nbeda.blogbus.com/
相关推荐阅读
用户42640 2012-03-28 09:28
评论:@小野兽的小草窝 博客中提到的“【博客 大赛】虚焊,你伤不起~~”
这个确实很重要,不起眼的问题会折腾人很久 ...
用户42640 2010-11-05 14:14
怎样用Realview MDK生成bin文件?
怎样用Realview MDK生成bin文件?       使用RVCT的fromelf.exe工具进行转换。也就是说首先将源文件编译链接成*.axf的文件,然后使用fromelf.exe工具将*....
用户42640 2010-10-28 21:35
新塘M051中文技术参考手册
  今天无意中在网上看到的,这个要比研讨会上光盘上提供的那个中文版详细很多,看了一下,就是英文手册的完整翻译版 需要的朋友可以到这里下载:http://www.wang1jin.com/bbs/vie...
用户42640 2010-10-26 16:50
保护三极管基础
这次出现的问题是使用了ULN2003,由于直接用它的输入级接入模块的输入端,因此出现了问题。 由于电缆上存在分布电感和分布电容,因此很容易出现耦合,在ISO7637的实验中,存在高频脉冲250V,20...
用户42640 2010-08-10 09:04
广岛无冤魂
1945年8月6日,美国的B-29“空中堡垒”轰炸机向日本广岛投下代号为”男孩”(Boy)的原子弹,实施了人类首次核轰炸。 总听到有些人(尤其是中国人)说,战争是日本军国主义者全面发动的,日本人民是受...
用户42640 2010-07-15 16:59
RT-Thread学习笔记--- 初步认识RT-Thread
最近对RT-Thread很感兴趣,准备学习一下,硬件使用安富莱开发板2.0。软件使用keil MDK   RT-Thread的目录结构 其中Bsp是针对各个具体的平台,可以认为是用户代码。为了方...
我要评论
1
6
关闭 站长推荐上一条 /2 下一条