PDA

View Full Version : pls help me verify my code not work, why???



chai98a
- 17th January 2010, 13:24
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



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

chai98a
- 18th January 2010, 09:19
Ok ,my problem was resolve by we remove If founction out,

code:

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