my protect for control stepping motor

case 11 and 12 , we cannot read data frome eeprom

case 21 , we cannot write data frome eeprom
case 22 , we cannot write data frome eeprom
case 23 , work fine no problem

I very confuse why case 21 and case22 don't work but case 23 work , code same

Code:
DEFINE LOADER_USED 1
INCLUDE "modedefs.bas"
DEFINE OSC 4   ' Oscillator frequency  4 MHz
ADCON1 = 7
ANSEL = 0
'-------------------------- Ports settings ---------------------------------
TRISA = %00000001
PORTA = %00000001 
TRISB = %00000111  
PORTB = %00000111                                                                 
'-------------------------- Variables ---------------------------
'*****74HC595 DE???KENLER?N? TANIMLA*****
DTA var PORTB.5     '21--14 b7
Latch var PORTB.6  '22--12 b6
CLK var PORTB.7   '23--11  b5                                                                 
Digit_1 var PORTB.4
Digit_2 var PORTB.0

IN_1 var PORTA.3
IN_2 var PORTA.1
IN_3 var PORTA.2
IN_4 var PORTA.4
sw_mode var PORTA.0
sw_up var PORTB.1
sw_down var PORTB.2
sw_Mode_data VAR Byte
sw_up_data var  Byte
sw_down_data VAR Byte
Data_mode VAR Byte

I VAR Byte
M VAR Byte    ' delay for motro step
N  VAR  Byte
T1  VAR  Word
loaddata VAR BYTE
Dataorg VAR Byte			' keep data position
Dataorg_ADDRESS con 0
DATA_MOTOR VAR Byte
DATA_MOTORx VAR Byte
DATA_MOTOR_ADDRESS con 2
VALUE VAR Byte
DATA_save_ADDRESS con 4
DATA_power_ADDRESS con 6
''------------------- Start -------------------------------------------
'-------------------------- Main program -------------------------
pause 200
 M = 10       ' delay for motro step
 N = 0         ' data motor conter
 Read  DATA_MOTOR_ADDRESS,DATA_MOTOR                                                                
 data_motor = data_motor & %01111111   'clar bit 8 to zero
MainProgram:
  If sw_mode = 0 Then 
     GoTo  sw_m
  EndIf  
 CHK_sw:
   GoSub  Show_7seg 
 If sw_up = 0 Then
      pause 150
      GoSub T_Right    'up OPEN
  Else
      If sw_down = 0 Then
          pause 150
          GoSub T_left       'up close
      EndIf
  EndIf
PORTA = %00000001                                                                    
GoTo  MainProgram   ' Return to main program
'++++++ mode ++++++++                                                                   
Mode_option:
T1 = 2300
loop:
If T1 = 0 Then GoTo Select_A
T1 = t1-1
   If sw_mode = 0 Then 
sw_m:
      sw_Mode_data = sw_Mode_data+10
      pause 200     ' delay 3 sec
      T1=2300             'T1 ******
      VALUE = sw_Mode_data
      GoSub Show_7segx
   EndIf  
   If sw_up_data <> 2 Then
       If sw_up = 0 Then 
          pause 150
          sw_up_data = 2
          T1=2300         'T1 ******
          Data_mode = sw_Mode_data + sw_up_data
          VALUE = Data_mode
          GoSub Show_7segx
       EndIf 
   EndIf
   If sw_down_data <> 1 Then 
       If sw_down = 0 Then 
          pause 150
          sw_down_data = 1
          T1=2300           'T1******
          Data_mode = sw_Mode_data + sw_down_data
          VALUE = Data_mode
          GoSub Show_7segx
       EndIf
   EndIf 
   Data_mode = sw_Mode_data + sw_up_data + sw_down_data
   VALUE = Data_mode
   If Data_mode >= 40 Then
      pause 150
      Data_mode = 0
      VALUE = DATA_MOTOR
      sw_Mode_data = 0
      sw_up_data = 0
      sw_down_data = 0
      GoTo CHK_sw
   EndIf
gosub Show_7segx
GoTo loop
Select_A: 
Select case Data_mode       ' mode 10  preset
Case 11                    'Read save data
     If sw_up = 0 Then
         sw_Mode_data = 0
         sw_up_data = 0
         sw_down_data = 0
         Read  DATA_save_ADDRESS,DATA_MOTORx
         If DATA_MOTOR > DATA_MOTORx Then
         'n = 13 - 2  = 11
         N = DATA_MOTOR - DATA_MOTORx                                                                 
         GoSub MOVE_down          'load data                                                       
         EndIf
      Else
         sw_Mode_data = 0
         sw_up_data = 0
         sw_down_data = 0
      EndIf   
Case 12                      'Read power data
      If sw_down =0 Then
         sw_Mode_data = 0
         sw_up_data = 0
         sw_down_data = 0
         Read  DATA_power_ADDRESS, DATA_MOTORx
         If DATA_MOTORx > DATA_MOTOR Then
         'n = 50 - 8  = 48
         N = DATA_MOTORX - DATA_MOTOR                                                                 
         GoSub MOVE_up          'load data
         EndIf
      Else
         sw_Mode_data = 0
         sw_up_data = 0
         sw_down_data = 0
      EndIf
Case 21
     If sw_up = 0 Then
         sw_Mode_data = 0
         sw_up_data = 0 
         sw_down_data = 0
         DATA_MOTOR = DATA_MOTOR +1
        Write DATA_save_ADDRESS , DATA_MOTOR
     Else
         sw_Mode_data = 0
         sw_up_data = 0 
         sw_down_data = 0
     EndIf
Case 22
     If sw_down = 0 Then
         sw_Mode_data = 0
         sw_up_data = 0 
         sw_down_data = 0
         DATA_MOTOR = DATA_MOTOR +1
         Write DATA_power_ADDRESS , DATA_MOTOR
     Else
         sw_Mode_data = 0
         sw_up_data = 0 
         sw_down_data = 0
     EndIf
Case 23      
     If sw_up = 0 And sw_down = 0 Then
         sw_Mode_data = 0
         sw_up_data = 0 
         sw_down_data = 0
         DATA_MOTOR = DATA_MOTOR +1
         Write Dataorg_ADDRESS , DATA_MOTOR
     Else
         sw_Mode_data = 0
         sw_up_data = 0 
         sw_down_data = 0
     EndIf
Case 33
     If sw_up = 0 And sw_down = 0 Then
         sw_Mode_data = 0
         sw_up_data = 0
         sw_down_data = 0
         GoSub Reset_motor
     Else
         sw_Mode_data = 0
         sw_up_data = 0
         sw_down_data = 0
     EndIf
Case else
     sw_Mode_data = 0
     sw_up_data = 0
     sw_down_data = 0
End Select
GoSub Show_7seg
sw_up_data = 0
sw_down_data = 0
GoTo CHK_sw 
'-------------------------- User subroutine_1--------------------------
Show_7seg:
VALUE = DATA_MOTOR

Show_7segx:
For I = 0 To 1		' Loop through 4 digits
		N = VALUE Dig I	' Get digit to display
		GoSub Display1	' Display the digit
		If sw_Mode_data > 1 Then
		   loaddata = loaddata  | %10000000     ' led on setup
        EndIf
        If I = 0 Then
            SHIFTOUT DTA,CLK,1,[loaddata\8]
            High Latch
            Low Digit_1
            High Digit_2
            Low Latch
        Else
            SHIFTOUT DTA,CLK,1,[loaddata\8]
            High Latch
            High Digit_1
            Low Digit_2
            Low Latch 
        EndIf
    Next			' Do next digit
    Return    ' Return from subroutine
Display1:  ' looup data for 7 seg                                               
LookUp N, [$3F,$06,$5B,$4F,$66,$6D,$7D,$07,$7F,$6F],loaddata
Return                                                                   
''-------------------------- User subroutine_2--------------------------
T_Right:                     ' 3 1 2 4     'up OPEN
PORTA =%00001011   '2
pause M
PORTA =%00000111   '4
pause M 
PORTA =%00010101   '6
pause M
PORTA =%00011001   '8
pause M
DATA_MOTOR = DATA_MOTOR+1
If DATA_MOTOR >= 60 Then
    DATA_MOTOR = 60
    WRITE DATA_MOTOR_ADDRESS ,  DATA_MOTOR 
Else
    Write DATA_MOTOR_ADDRESS , DATA_MOTOR
EndIf
Toggle Digit_2                            
Toggle Digit_1
Return
'---------------------
T_left:                 'down CLOSE
PORTA =%00011001   '8
pause M
PORTA =%00010101   '6
pause M
PORTA =%00000111   '4
pause M
PORTA =%00001011   '2
pause M
DATA_MOTOR = DATA_MOTOR - 1
If DATA_MOTOR <= 0 Then
    DATA_MOTOR = 0
    WRITE DATA_MOTOR_ADDRESS ,  DATA_MOTOR 
Else
    Write DATA_MOTOR_ADDRESS ,  DATA_MOTOR 
EndIf
Toggle Digit_2
Toggle Digit_1
Return
'=============================
'Original position 
Reset_motor:  ' move down
N = N + 1
PORTA =%00011001   '8
pause M
PORTA =%00010101   '6
pause M
PORTA =%00000111   '4
pause M
PORTA =%00001011   '2
pause M
If N < 65 Then
    Toggle Digit_1
    GoTo Reset_motor
EndIf
'======================= 
'Variable = EREAD Address 
Read  Dataorg_ADDRESS  , n
DATA_MOTOR = 0      'KEEP DATA FOR SHOW DISPLAY
'=======================
MOVE1:
PORTA =%00001011   '2
pause M
PORTA =%00000111   '4
pause M
PORTA =%00010101   '6
pause M
PORTA =%00011001   '8
pause M
If N <> 0 Then
    N = N - 1
    Toggle Digit_1
    DATA_MOTOR = DATA_MOTOR + 1
    GoTo MOVE1
EndIf
PORTA = %00000001
Write DATA_MOTOR_ADDRESS , DATA_MOTOR 
GoTo CHK_sw
'=====================================
MOVE_down:        'per-set save
MOVE_down1:
PORTA =%00011001   '8
pause M
PORTA =%00010101   '6
pause M
PORTA =%00000111   '4
pause M
PORTA =%00001011   '2
pause M
If N > 0 Then
N = N - 1
Toggle Digit_1
DATA_MOTOR = DATA_MOTOR - 1
GoSub Show_7seg
GoTo MOVE_down1
EndIf
PORTA = %00000001
Write DATA_MOTOR_ADDRESS , DATA_MOTOR 
Return
'===================================
MOVE_up:        'per-set power
MOVE_up1: 
PORTA =%00001011   '2
pause M
PORTA =%00000111   '4
pause M
PORTA =%00010101   '6
pause M
PORTA =%00011001   '8
pause M
If N > 0 Then 
    N = N - 1
    Toggle Digit_1
    DATA_MOTOR = DATA_MOTOR + 1
    GoTo MOVE_up1
EndIf
PORTA = %00000001
Write DATA_MOTOR_ADDRESS , DATA_MOTOR 
Return
end