Created
January 12, 2012 08:02
-
-
Save mactkg/1599325 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
; PIC test program | |
; | |
list p=16f84 | |
; | |
; define config fuses | |
; | |
include "p16f84.inc" | |
__CONFIG _HS_OSC & _PWRTE_ON & _WDT_OFF | |
DELAYT EQU 02H | |
; | |
LED0 EQU 00 | |
LED1 EQU 01 | |
M0 EQU 03 | |
M1 EQU 02 | |
SW0 EQU 00 | |
SW1 EQU 01 | |
S0 EQU 02 | |
S1 EQU 03 | |
S2 EQU 04 | |
S3 EQU 05 | |
; | |
TIMEF0 EQU 0CH | |
TIMEF1 EQU 0DH | |
TIMEF2 EQU 0EH | |
CNT EQU 12H | |
REG_A EQU 10H | |
REG_B EQU 11H | |
WHICH EQU 13H | |
; | |
; | |
;********* Program Memory Programming *********** | |
; | |
ORG 00 | |
GOTO INIT | |
ORG 04 | |
GOTO INTR | |
ORG 10H | |
INIT | |
BSF STATUS,RP0 ;Select page 1 | |
MOVLW 000H ;Set Input/Output | |
MOVWF PORTA ;SET PORT A | |
MOVWF INTCON | |
MOVLW 0ffh | |
MOVWF PORTB | |
BCF STATUS,RP0 ;SELECT PAGE 0 | |
START | |
MOVLW 000H | |
MOVWF PORTA | |
MOVLW 0FFH ; Set 1 | |
MOVWF REG_B | |
;add CLRF CNT before JUMP!!!!!1 | |
LOOP | |
BTFSC PORTB, S0 ;1 = BLACK | |
CALL BNNN | |
BTFSS PORTB, S0 ;0 = WHITE | |
CALL WNNN | |
; BCF PORTA,M0 | |
; BCF PORTA,M1 | |
GOTO LOOP | |
BNNN | |
BTFSC PORTB, S1 | |
GOTO BBNN | |
GOTO BWNN | |
BBNN | |
BTFSC PORTB, S2 | |
GOTO BBBN | |
GOTO BBWN | |
BWNN | |
BTFSC PORTB, S2 | |
GOTO BWBN | |
GOTO BWWN | |
BBBN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL WARNING ;BBBB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL FORWARD ;BBBW | |
RETURN | |
BBWN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL FORWARD ;BBWB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL FORWARD ;BBWW | |
RETURN | |
BWBN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL FORWARD ;BWBB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL WARNING ;BWBW | |
RETURN | |
BWWN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL WARNING ;BWWB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL LEFT_LOW ;BWWW | |
RETURN | |
; | |
WNNN | |
BTFSC PORTB, S1 | |
GOTO WBNN | |
GOTO WWNN | |
WBNN | |
BTFSC PORTB, S2 | |
GOTO WBBN | |
GOTO WBWN | |
WWNN | |
BTFSC PORTB, S2 | |
GOTO WWBN | |
GOTO WWWN | |
WBBN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL FORWARD ;WBBB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL FORWARD ;WBBW | |
RETURN | |
WBWN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL FORWARD ;WBWB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL FORWARD ;WBWW | |
RETURN | |
WWBN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL FORWARD ;WWBB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL FORWARD ;WWBW | |
RETURN | |
WWWN | |
CLRF CNT | |
BTFSC PORTB, S3 | |
CALL RIGHT_LOW ;WWWB | |
CLRF CNT | |
BTFSS PORTB, S3 | |
CALL WARNING ;WWWW | |
RETURN | |
; | |
LEFT_HIGH ;1 | |
BSF PORTA,M0 | |
BSF PORTA,M1 | |
CALL DELAY | |
BCF PORTA,M0 | |
CALL DELAY | |
DECFSZ CNT,1 | |
GOTO LEFT_HIGH | |
BCF PORTA,LED0 | |
BSF PORTA,LED1 | |
RETURN | |
LEFT_LOW ;2 | |
BSF PORTA,M0 | |
BSF PORTA,M1 | |
CALL DELAY | |
BCF PORTA,M0 | |
CALL DELAY | |
CALL DELAY | |
DECFSZ CNT,1 | |
GOTO LEFT_LOW | |
BCF PORTA,LED0 | |
BSF PORTA,LED1 | |
RETURN | |
RIGHT_HIGH ;3 | |
BSF PORTA,M0 | |
BSF PORTA,M1 | |
CALL DELAY | |
BCF PORTA,M1 | |
CALL DELAY | |
DECFSZ CNT,1 | |
GOTO RIGHT_HIGH | |
BSF PORTA,LED0 | |
BCF PORTA,LED1 | |
RETURN | |
RIGHT_LOW ;4 | |
BSF PORTA,M0 | |
BSF PORTA,M1 | |
CALL DELAY | |
BCF PORTA,M1 | |
CALL DELAY | |
CALL DELAY | |
DECFSZ CNT,1 | |
GOTO RIGHT_LOW | |
BSF PORTA,LED0 | |
BCF PORTA,LED1 | |
RETURN | |
FORWARD ;5 | |
BSF PORTA, M0 | |
BSF PORTA, M1 | |
BSF PORTA,LED0 | |
BSF PORTA,LED1 | |
RETURN | |
WARNING | |
BCF PORTA, M0 | |
BCF PORTA, M1 | |
CALL DELAY | |
GOTO WARNING2 | |
WARNING2 | |
BTFSS PORTA, LED0 | |
CALL T_LEFT | |
BTFSS PORTA, LED1 | |
CALL T_RIGHT | |
CALL DELAY | |
RETURN | |
; | |
T_LEFT | |
BCF PORTA,M0 | |
BSF PORTA,M1 | |
CALL DELAY | |
CALL DELAY | |
CALL DELAY | |
CALL DELAY | |
RETURN | |
T_RIGHT | |
BSF PORTA,M0 | |
BCF PORTA,M1 | |
CALL DELAY | |
CALL DELAY | |
CALL DELAY | |
CALL DELAY | |
RETURN | |
; | |
DELAY | |
MOVLW DELAYT ;DELAYT -> working registor | |
MOVWF TIMEF0 ;move the value of working registor to TIMEF0 | |
LOOP0 | |
CLRF TIMEF1 ;flag down! | |
;LOOP1 | |
; CLRF TIMEF2 ;flag down! | |
LOOP2 | |
MOVF PORTB,0 ;move the value of PORTB to working registor (0 -> working registor(W), 1 -> the first HIKISUU) | |
ANDWF REG_B,1 ;the value of PORTB(W) take AND with REG_B and through value to REG_B | |
;DECFSZ TIMEF2,1 ;if(TIMEF2-- != 0){ | |
;GOTO LOOP2 ; Loop more! | |
;DECFSZ TIMEF1,1 ;if(TIMEF1-- != 0){ | |
;GOTO LOOP2 ; Loop more! | |
DECFSZ TIMEF0,1 ;if(TIMEF0-- != 0){ | |
GOTO LOOP2 ; Loop more! | |
RETURN ; Bye! | |
; | |
INTR | |
RETURN | |
END |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment