Chinaunix首页 | 论坛 | 博客
  • 博客访问: 188472
  • 博文数量: 54
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2018
  • 用 户 组: 普通用户
  • 注册时间: 2013-03-31 23:14
文章存档

2014年(2)

2013年(52)

分类: 嵌入式

2013-05-06 18:46:02

     学习arm9以来,回头看c51就简单多了。中断就操作几个寄存器打开开关,关闭开关。但主程序和中断程序都要调用相同程序时就要考虑压栈,当然这里不说了。还要注意的是哪些需要手动清除的中断。
   写汇编学汇编:
  ORG 0000H
 AJMP  START
 ORG 0003H
 AJMP INT
 ORG  0030H
START: 
      MOV TCON,#01H
 MOV IP,#01H
 MOV IE,#81H
 MOV R2,#1    ;single  
 MOV R3,#0FEH ;k1
 MOV R0,#250       ;T0
 
STEP00:
      CJNE R2,#1,STEP01 ;第一个if分支(中分支)
LCALL DELAY0
      CJNE R2,#1,STEP01
 MOV P1,R3
LCALL DELAY            ;第二个if小分支(判断)
      CJNE R3,#0FFH,STEP10 ;
 MOV R3,#0FEH
STEP10:
      MOV A,R3
 RL A
 MOV R3,A
STEP01:
      NOP    
      LJMP STEP00
INT: ;中断程序
      MOV A,R2
 CPL A
 MOV R2,A
 CJNE R2,#1,INT00   ;中断第一个if
 MOV A,R0
 SUBB A,#50
 MOV R0,A
INT00:  
 CJNE R0,#50,INT01
 MOV R0,#250


INT01: ;…………r0没有变化……………………
 RETI
DELAY:
 MOV A,R0
 MOV R6,A  
DL1:
      MOV R1,#200
DL2:
   NOP
 NOP
 NOP
 NOP
 NOP
 DJNZ R1,DL2
 DJNZ R6,DL1
 RET
DELAY0:
      MOV R4,#25
DL3:
      MOV R5,#10
DL4:
   NOP
 NOP
 NOP
 NOP
 NOP
 DJNZ R5,DL4
 DJNZ R4,DL3
 RET
 END

 c及汇编:
.zip
阅读(1010) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~