'**** ARCH BALL CLOCK W/STEPPER MOTORS **** '**** 18X **** symbol minuteStep = 2 symbol hourStep = 10 symbol minuteReverseStep = 118 symbol hourReverseStep = 110 symbol delay = 130 symbol stepCountMinute = b0 symbol stepCountHour = b1 symbol counter = b2 symbol outMinute = b3 symbol outHour = b4 symbol minutes = b5 symbol hours = b6 symbol minutesAdvance = b7 symbol hoursAdvance = b8 symbol secCount = w5 symbol delayCount = b12 symbol swHour = pin1 symbol swMinute = pin0 symbol btnHour = pin6 symbol btnMinute = pin2 symbol pulse = pin7 outMinute = $F0 outHour = $0F minutes = 0 hours = 1 stepCountMinute = 1 stepCountHour = 1 secCount = 0 setint %00000000,%10000000 main: '**** Set Minutes to 0 **** If swMinute = 1 then If btnHour = 1 Then minutes = 0 secCount = 0 'lookup stepCountMinute, (0, $1F, $2F, $4F, $8F), outMinute '*** low torque *** lookup stepCountMinute, (0, $3F, $6F, $CF, $9F), outMinute '*** high torque *** pins = outHour & outMinute stepCountMinute = stepCountMinute + 1 If stepCountMinute = 5 Then stepCountMinute = 1 End if For delayCount = 0 to delay Next delayCount ElseIf btnMinute = 1 Then minutes = 0 secCount = 0 'lookup stepCountMinute, (0, $1F, $8F, $4F, $2F), outMinute '*** low torque *** lookup stepCountMinute, (0, $3F, $9F, $CF, $6F), outMinute '*** high torque *** pins = outHour & outMinute stepCountMinute = stepCountMinute + 1 If stepCountMinute = 5 Then stepCountMinute = 1 End if For delayCount = 0 to delay Next delayCount End If '**** Set Hours to 1 **** ElseIf swHour = 1 then If btnHour = 1 Then hours = 1 secCount = 0 'lookup stepCountHour, (0, $F1, $F2, $F4, $F8), outHour '*** low torque *** lookup stepCountHour, (0, $F3, $F6, $FC, $F9), outHour '*** high torque *** pins = outHour & outMinute stepCountHour = stepCountHour + 1 If stepCountHour = 5 Then stepCounthour = 1 End if For delayCount = 0 to delay Next delayCount ElseIf btnMinute = 1 Then hours = 1 secCount = 0 'lookup stepCountHour, (0, $F1, $F8, $F4, $F2), outHour '*** low torque *** lookup stepCountHour, (0, $F3, $F9, $FC, $F6), outHour '*** high torque *** pins = outHour & outMinute stepCountHour = stepCountHour + 1 If stepCountHour = 5 Then stepCounthour = 1 End if For delayCount = 0 to delay Next delayCount End If '**** Set Minutes / Advance Minutes **** ElseIf btnMinute = 1 OR minutesAdvance = 1 Then minutes = minutes + 1 minutesAdvance = 0 If minutes = 60 Then minutes = 0 For counter = 1 to minuteReverseStep 'lookup stepCountMinute, (0, $1F, $2F, $4F, $8F), outMinute '*** low torque *** lookup stepCountMinute, (0, $3F, $6F, $CF, $9F), outMinute '*** high torque *** pins = outHour & outMinute stepCountMinute = stepCountMinute + 1 If stepCountMinute = 5 Then stepCountMinute = 1 End if For delayCount = 0 to delay Next delayCount Next counter hoursAdvance = 1 Else For counter = 1 to minuteStep 'lookup stepCountMinute, (0, $1F, $8F, $4F, $2F), outMinute '*** low torque *** lookup stepCountMinute, (0, $3F, $9F, $CF, $6F), outMinute '*** high torque *** pins = outHour & outMinute stepCountMinute = stepCountMinute + 1 If stepCountMinute = 5 Then stepCountMinute = 1 End if For delayCount = 0 to delay Next delayCount Next counter End If '**** Set Hours / Advance Hours **** ElseIf btnHour = 1 OR hoursAdvance = 1 Then hours = hours + 1 hoursAdvance = 0 If hours = 13 Then hours = 1 For counter = 1 to hourReverseStep 'lookup stepCountHour, (0, $F1, $F2, $F4, $F8), outHour '*** low torque *** lookup stepCountHour, (0, $F3, $F6, $FC, $F9), outHour '*** high torque *** pins = outHour & outMinute stepCountHour = stepCountHour + 1 If stepCountHour = 5 Then stepCounthour = 1 End if For delayCount = 0 to delay Next delayCount Next counter Else For counter = 1 to hourStep 'lookup stepCountHour, (0, $F1, $F8, $F4, $F2), outHour '*** low torque *** lookup stepCountHour, (0, $F3, $F9, $FC, $F6), outHour '*** high torque *** pins = outHour & outMinute stepCountHour = stepCountHour + 1 If stepCountHour = 5 Then stepCounthour = 1 End if For delayCount = 0 to delay Next delayCount Next counter End If End If Goto main interrupt: secCount = secCount + 1 if secCount = 3600 then secCount = 0 minutesAdvance = 1 End If intwait: if pin7 = 0 then intwait setint %00000000,%10000000 return