;****************************************************** ;* TM0_INT.ASM ;* 1秒鐘計時中斷,PORTC外接LED全亮後從0遞增 ;****************************************************** list p=16F877 #include ; VAL_US equ .249 ; 1ms delay 給定初值 VAL_MS equ .250 ; 呼叫1ms Delay之次數 count equ 0x20 ; 1ms delay 變數位址 count_ms equ 0x21 ; 呼叫1ms Delay之變數位址. number equ 0x22 ; ;****** 程式開始 ********************* org 0x00 ; reset vector nop ; Reserve for MPLAB-ICD goto start org 0x04 goto isr start: clrw clrf PCLATH banksel TRISC ; Select to bank1 clrf TRISC ; PORTC = Output banksel PORTC ; Select to bank0 clrf PORTC ; Clear PORTC banksel OPTION_REG movlw b'00000011' movwf OPTION_REG bsf INTCON,GIE bsf INTCON,T0IE banksel TMR0 movlw .6 movwf TMR0 movwf number inc: incf PORTC,f call delay_250ms goto inc isr: incfsz number goto isr_end movlw .6 movwf number movlw B'11111111' movwf PORTC call delay_250ms isr_end: movlw .6 movwf TMR0 bcf INTCON,T0IF retfie ;-------- 250 ms delay routine ---------- delay_250ms: movlw VAL_MS movwf count_ms loop_ms call delay_1ms decfsz count_ms,f goto loop_ms return ; ;-------- 1 ms delay routine ----------- delay_1ms: nop movlw VAL_US movwf count dec_loop nop decfsz count,f goto dec_loop return ; end