×
单片机 > 单片机程序设计 > 详情

负跳变沿触发中断(汇编程序)

发布时间:2020-05-29 发布时间:
|
 ;了解8051的timer0中断的程序写法,用中断法产生定时,是灯明一下,暗一下,如果出现外部中断的时候,在进入外部中断服务程序

COUNT EQU  9217    ;对于11.0592的晶振来说,延时10ms
LED1    EQU  P1.1
LED2    EQU  P1.3    ;作为外部中断0的显示来用 
;
               ORG    0000H
               LJMP    RESET        ;跳转到初始化程序中
               ORG   0003H  ;           INT0(外部中断0)
               LJMP  INT_ET0      ;跳转到外部中断0服务程序中去 (此程序中断就是从这进入的)  
               ORG  000BH ;TIMER0(定时器/计数器T0)
               LJMP INT_TIMER0 ;跳转到定时器/计数器中断服务程序中去
               // ORG  0013H ;外部中断1   
               // RETI   ;中断的返回指令
               // ORG  001BH ;TIMER1(定时器/计数器T1)
               // RETI
               // ORG  0023H ;串行口中断
               // RETI
;
               ORG  0030H
RESET:   MOV  R0,#00H
               DJNZ R0,$  ;刚开始,先进行少量的延时,是各种工作寄存器准备好
  
              SETB LED1
              SETB LED2
  
;设置定时器中断 
             MOV  TMOD,#00000001B
             MOV  TH0,#HIGH(65536-COUNT)
             MOV     TL0,#LOW(65536-COUNT)
             //MOV  TH0,#(65536-COUNT)/256;取高八位数据
             // MOV  TL0,#255   ;取底五位(为最大了)
             CLR  TF0   ;先把溢出标志位清零
             SETB TR0   ;开始计时
             SETB ET0   ;ET0为定时器/计数器T0溢出中断允许位
;设置外部中断0
             SETB IT0   ;设置外部中断0为跳变言触发方式
             CLR  IE0
             SETB EX0                                                                                                                                             
             SETB EA
             MOV  IP,#00000001B;设置PX0为高优先级中断(外部中断0) 
             MOV  R1,#00H  ;作为定时器累加器使用

LOOP: SJMP LOOP   ;在此等待
;
;IE0=1

INT_ET0://CLR  LED2
            CPL  TR0
            //CPL  LED1
            ACALL DELAY
            CLR  IE0
            CPL  LED2
            RETI

;TF0=1  
INT_TIMER0:
            INC  R2  ;使R1自增一
            CLR  TF0   ;CLEAR TF0 AGAIN
            MOV  TH0,#(65536-COUNT)/256;取高八位数据
            MOV  TL0,#255   ;取底五位(为最大了)

           CJNE R2,#10,L0 ;不相等则转移指令,这个数可以进行调节
           CPL  LED1    ;取反指令
           MOV  R2, #00H
L0:      RETI

;延时子程序,12M晶振延时约R4
DELAY:     ;大约值:2us*256*256*2=260ms,也可以认为为250ms
           PUSH PSW    ;现场保护指令(有时可以不加)
           MOV R4,#4   
L3:      MOV R2 ,#00H
L1:      MOV R3 ,#00H
L2:      DJNZ R3 ,L2    ;最内层循环:(256次)2个周期指令(R3减一,如果比1大,则转向L2) 
           DJNZ R2 ,L1    ; 中层循环:256次
           DJNZ R4 ,L3    ;外层循环:2次
 
          POP PSW
          RET

          END



『本文转载自网络,版权归原作者所有,如有侵权请联系删除』

热门文章 更多
浅谈AVR中定时器几种工作模式