Pages

hello

Wednesday, January 26, 2011














                
;--------------------------VARIABLES USED-----------------------------------------

LEFT_WORD EQU 1100B ; when written to port2,will turn robo to left.
RIGHT_WORD EQU 0011B ; when written to port2,will turn robo to right.
FWD_WORD EQU 1010B ; when written to port2,will move robo in forward direction.
REV_WORD EQU 0101B ; when written to port2,will move robo in reverse direction.
STOP_WORD EQU 1111B ; when written to port2,will stop the robo.
SPEED EQU R0 ; used to hold the speed of the robo;
DIRECT1 EQU 30H ; internal RAM location used for genrating PWM.
DIRECT2 EQU 31H ; internal RAM location used for genrating PWM.
TEMP EQU 117D ; used delay generation in PWM.

;---------------------------------------------------------------------------------------------
ORG 000H
SJMP RESET_VECTOR ;

; ------------------------EXTERNALINTERRUPT-------------------------------------
ORG 0003H
SJMP EXT_INT ;
;---------------------------------------------

ORG 032H

RESET_VECTOR: MOV IE, #10000001B ;enable external interrupt
CLR C ;
MOV SPEED, #0001H ; initialize speed with 1
SJMP FIND_SPEED ;
;----------------------------------------------------------------------------------
ORG 060H

EXT_INT: MOV A, P1 ; read port1 to accumulator

TEST_STOP: CJNE A, #11111111B, TEST_LEFT ;
SJMP STOP ;

TEST_LEFT: CJNE A, #11110111B, TEST_RIGHT ;
SJMP LEFT ;

TEST_RIGHT: CJNE A, #11111011B, TEST_REV ;
SJMP RIGHT ;

TEST_REV: CJNE A, #11111101B, TEST_FWD ;
SJMP REV ;

TEST_FWD: CJNE A, #11111110B, TEST_INCSPEED ;
SJMP FWD ;

TEST_INCSPEED: CJNE A, #11111100B, TEST_DECSPEED ;
SJMP INCSPEED ;

TEST_DECSPEED: CJNE A, #11110011B, TEST_STOP ;
SJMP DECSPEED ;
;----------------------------------------------------------------

STOP: MOV P2, #STOP_WORD ; stops the robo
SJMP PWM ;

LEFT: MOV P2, #LEFT_WORD ; turns robo to left
SJMP PWM ;

RIGHT: MOV P2, #RIGHT_WORD ; turns robo to right
SJMP PWM ;

REV: MOV P2, #REV_WORD ; moves robo in reverse direction
SJMP PWM ;

FWD: MOV P2, #FWD_WORD ; moves robo in forward direction
SJMP PWM ;
INCSPEED: INC SPEED ; increase the speed
SJMP FIND_SPEED ;

DECSPEED: DEC SPEED ; decrease the speed
SJMP FIND_SPEED ;
;------------------finds the speed -----------------------------------------------
FIND_SPEED:
CJNE SPEED, #4H, FAIL1 ;
SJMP SPEED4 ;
FAIL1: CJNE SPEED, #3D, FAIL2 ;
SJMP SPEED3 ;
FAIL2: CJNE SPEED, #2D, FAIL3 ;
SJMP SPEED2 ;
FAIL3: CJNE SPEED, #1D, FAIL4 ;
SJMP SPEED1 ;
FAIL4: CJNE SPEED, #0D, FAIL5 ;
MOV SPEED, #1D ;
SJMP FIND_SPEED ;
FAIL5: MOV SPEED, #4D ;
SJMP FIND_SPEED ;

;----------- turns on LEDs to indicate the speed and loads registers with delay -------------

SPEED4: MOV P0, #11110111B ;
SJMP $ ;

SPEED3: MOV DIRECT1, #255D ;
MOV DIRECT2, #2D ;
MOV P0, #1011B ;
SJMP PWM ;

SPEED2: MOV DIRECT1, #130D ;
MOV DIRECT2, #127D ;
MOV P0, #1101B ;
SJMP PWM ;

SPEED1: MOV DIRECT1, #5D ;
MOV DIRECT2, #252D ;
MOV P0, #1110B ;
SJMP PWM ;

;----------------generates PWM on pin P3.0---------------------------------------------------

PWM:
MOV R1, DIRECT1 ;
MOV R2, DIRECT2 ;
CPL P3.0 ;
LOOP1: DJNZ R1, LOOP1 ;
MOV R1, #TEMP ;

LOOP2: DJNZ R1, LOOP2 ;
CPL P3.0 ;
LOOP3: DJNZ R2, LOOP3 ;
MOV R2, #TEMP ;
LOOP4: DJNZ R2, LOOP4 ;
SJMP PWM ;
END
;----------------end of the code--------------------------------------------








No comments:

Post a Comment

Blogger templates

About us