[/CODE]
;................................................. ...........
;..................DEFINE......................... ...........
LIST P=PIC18F2550
include <p18f2550.inc>
; __CONFIG....
CONFIG WDT=OFF ; disable watchdog timer
; CONFIG MCLRE = ON ; MCLEAR Pin on
; CONFIG DEBUG = OFF ; Enable Debug Mode
; CONFIG LVP = OFF ; Low-Voltage programming disabled (necessary for debugging)
; CONFIG FOSC = INTOSCIO_EC ;Internal oscillator, port function on RA6
; REGISTER
W_TEMP EQU 0x08
STATUS_TEMP EQU 0x09
BSR_TEMP EQU 0x0A
COUNT1 EQU 0x0B
COUNT2 EQU 0x0C
COUNT EQU 0x0D
;================================================= ===========
ORG 0x00
GOTO SETUP
ORG 0x08
GOTO INTERUPT
ORG 0x12
;================================================= ===========
INTERUPT:
BCF INTCON,TMR0IF ; clear flag
MOVWF W_TEMP ; W_TEMP is in virtual bank
MOVFF STATUS, STATUS_TEMP ; STATUS_TEMP located anywhere
MOVFF BSR, BSR_TEMP ; BSR_TMEP located anywhere
;......................MAIN INT..............................
INCFSZ COUNT,1
GOTO ENDINT
BTG PORTA,2
;................................................. ...........
ENDINT:
MOVFF BSR_TEMP, BSR ; Restore BSR
MOVF W_TEMP, W ; Restore WREG
MOVFF STATUS_TEMP, STATUS ; Restore STATUS
RETFIE
;================================================= ===========
SETUP
;........SET UP PORT IS INPUT OR OUTPUT..................
MOVLW 0x00
MOVWF TRISA
CLRF PORTA
;................SET UP TIMER0 ...........................
;MOVLW b'00000000' ;USE INTERNAL CLK AND DIV 2
;MOVWF T0CON
;MOVLW 0x00
;MOVWF TMR0H
;MOVWF TMR0L ;65000
CALL INIT_TIMER0
;................SET UP INT ..............................
;MOVLW b'10100000'
;MOVWF INTCON
;....START TIMER0
;BSF T0CON,7
CLRF COUNT
;================================================= ===========
LOOP
GOTO LOOP
;================================================= ===========
;================================================= ===========
;........................SUB FUNCTION..........................
;FUNCTION DELAY
DELAY
DELAY2
DECFSZ COUNT1,1
GOTO DELAY2
DECFSZ COUNT2,1
GOTO DELAY2
MOVLW 0F0h
MOVWF COUNT1
MOVWF COUNT2
RETURN
;================================================= ===========
;TURN LED ON/OFF
LEDON
; turn the led on
MOVLW 01h
MOVWF PORTA
RETURN
LEDOFF
; turn the led off
MOVLW 00h
MOVWF PORTA
RETURN
LEDTOG
; turn the led ON/OFF
MOVLW 01h
XORWF PORTA,0
MOVWF PORTA
RETURN
;================================================= ===========
INIT_TIMER0
BSF RCON,IPEN ;enable priority interrupts.
BCF INTCON2,TMR0IP
BSF INTCON,TMR0IF
BSF INTCON,TMR0IE
BSF INTCON,GIEH ;set the global interrupt enable bits
BSF INTCON,GIEL
CLRF T0CON
MOVLW 0x3c
MOVWF TMR0H
MOVLW 0xAF
MOVWF TMR0L
BSF T0CON,TMR0ON
RETURN
;================================================= ===========
END
[/CODE]
NHỜ MỌI NGƯỜI COI DÙM EM!
|