Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

convert bas 89s8252 to hex

Status
Not open for further replies.

hazna

Newbie
Joined
Nov 4, 2011
Messages
1
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,285
please my friends
I want to change this 8051 bass file into a hex file .. but when I try to always error, I use Bascom 8051
Code:
' --------------------------------
' alarm1307.BAS 2-10-06
' Led display with ds1307 rtc chip and max7219-hh:mm:ss
' written by K.S. Sankar www.mostek.biz India
' for MCS ELECTRONICS - Holland

$large
$regfile = "89s8252.dat"
$crystal = 6000000

P0 = 0
P2 = 0
P1 = 0

P3 = &B11111111
P1.3 = 1

' ports
' p3.0-rx not used
' p3.1-tx not used
' p3.2-> sw alarm set/OFF
' p3.3-> sw mode 0=press
' p3.4-> sw set (+)  0=press
' p3.5-> sw alarm snooze  0=press
' p3.6-> i2c bus SCL
' p3.7-> i2c bus SDA
'--------------------
' p1.0-> clock
' p1.1-> din
' p1.2-> /chip select
' p1.3-> sw set (-)  0=press
' p1.4-> buzzer alarm
' p1.5-> led- PM indicator
' p1.6-> led- alarm active indicator
' p1.7 - not used

' P0- NOT USED
' P2- NOT USED

' press p3.3 + p3.4 together for INTI of RTC chip

On Int0 Int0_int
Set Tcon.0
' edge triggered
Enable Interrupts
Enable Int0
'enable the interrupt

Config Timer0 = Timer , Gate = Internal , Mode = 2
' 8 bit auto reload
On Timer0 Timer_0_overflow_int
Load Timer0 , 250
Priority Set Timer0
Enable Interrupts
Enable Timer0
Start Timer0

' define aliases
Sw_alarm_set Alias P3.2
Sw_alarm_snooze Alias P3.5
Sw_mode Alias P3.3
Sw_set Alias P3.4
Sw_set_minus Alias P1.3

Clock Alias P1.0
Din Alias P1.1
Cs Alias P1.2


Buzzer Alias P1.4
Led_pm Alias P1.5
Led_alarm_active Alias P1.6
'------------------------------------------
' config I2C bus
Config Scl = P3.6
' I2C Clock
Config Sda = P3.7
' I2C Data
'-------------------------------------------

Const Ds1307w = &HD0
' Write
Const Ds1307r = &HD1
' Read
Const Sec_addmap = &H00
Const Min_addmap = &H01
Const Hour_addmap = &H02
Const Control_addmap = &H07

Const Alarm_sec_addmap = &H08
Const Alarm_min_addmap = &H09
Const Alarm_hour_addmap = &H0A
Const Alarm_active_addmap = &H0B
Const Brightness_addmap = &H0C


' buzzer ON time in seconds
Const Buz_time = 30
Const Snooze_mins = 5

' declare variables
'-------------------------------------------------------
Dim Num_hour As Byte , Num_min As Byte , Num_sec As Byte
Dim Alarm_num_hour As Byte , Alarm_num_min As Byte
Dim Alarm_num_sec As Byte

Dim Flicker_h As Bit , Flicker_m As Bit , Flicker_s As Bit
Dim Set_mode_count As Byte

Dim Temps As String * 2

Dim Reg_sec As Byte
Dim Reg_min As Byte
Dim Reg_hour As Byte

Dim Alarm_reg_sec As Byte
Dim Alarm_reg_min As Byte
Dim Alarm_reg_hour As Byte
Dim Alarm_toggle As Bit
Alarm_toggle = 0

Dim Snooze As Bit
Snooze = 0

Dim Pm_bit As Bit , Decrease As Bit
Dim Alarm_pm_bit As Bit
Dim Alarm_active As Bit , Alarm_active_byte As Byte
Dim Alarm_set As Bit , Buzzer_count As Byte , Diff As Byte
Dim Brightness As Byte , Bright_word As Word
Brightness = 7
Bright_word = 2560 + 7
Buzzer_count = 0
Alarm_set = 0
Alarm_active = 0
Alarm_active_byte = 0
Pm_bit = 0
Decrease = 0
' default alarm time
Alarm_pm_bit = 0
' am
Alarm_num_hour = 0
Alarm_num_min = 0
Alarm_num_sec = 0
Alarm_reg_hour = 0
Alarm_reg_min = 0
Alarm_reg_sec = 0

' Control

Dim Reg_mode As Byte
Dim Tempb As Byte
Dim Address As Byte

Dim Sec_count As Byte
Dim Clock_word As Word
Dim Sec_flag As Bit

Sec_count = 0
Sec_flag = 0
Clock_word = 0


'-----------------------------------------------------
Declare Sub Fni2cwrite(_slaveadd As Byte , _add As Byte , _num As Byte)
Dim _slaveadd As Byte
Dim _add As Byte
Dim _num As Byte

'Declare Sub Fni2cwriteb(_slaveaddb As Byte , _addb As Byte , _numb As Byte)
'Dim _slaveaddb As Byte
'Dim _addb As Byte
'Dim _numb As Byte

Declare Sub Fn7segh(_ih As Byte)
Dim _ih As Byte

Declare Sub Fn7segm(_im As Byte)
Dim _im As Byte

Declare Sub Fn7segs(_is As Byte)
Dim _is As Byte

Declare Sub Pulse_bit(bit1 As Bit)
Dim Bit1 As Bit

Declare Sub Pulse_word(w1 As Word)
Dim W1 As Word

Declare Sub Disp_digit(d1 As Byte , Num As Byte)
Dim D1 As Byte , Num As Byte

Declare Sub Disp_blank()

Dim I As Byte , Tens As Byte , Units As Byte
Dim J As Word
Dim K As Bit
Dim V As Integer
Dim V1 As Byte , V2 As Byte
Dim Del As Byte
Del = 1

Dim Maxdigits As Byte
Maxdigits = 8


V = &B1000111100001110

' format
' d15 d14 d13 d12  d11 d10 d09 d08   d7 d6 d5 d4 d3 d2 d1 d0
'  x   x   x   x    address------    -------- data ---------

Dim Normal_mode As Word
' 0c00=shut down  0c01=normal
Normal_mode = &B0000110000000001
Dim Code_b As Word
' 09ff
Code_b = &B0000100111111111
' 0a0f led intesity
Dim Scan_limit As Word
' 0b07
Scan_limit = &B0000101100000111
' ALL 8 DIGITS
Dim Disp_test_off As Word
Disp_test_off = &B0000111100000000
Dim Disp_test_on As Word
Disp_test_on = &B0000111100000001
'Display-Test Register
'0f00 =normal 0f01 = test

Call Pulse_word(normal_mode)
Call Pulse_word(&H09ff)
Call Pulse_word(bright_word)
Call Pulse_word(scan_limit)
Call Pulse_word(disp_test_on)
Waitms 100
Call Pulse_word(disp_test_off)
Waitms 100

Gosub Read_ds1307
Gosub Read_alarm

Set_mode_count = 0
' write brightness in rtc chip
Brightness = 7
Bright_word = 2560 + 7
Call Pulse_word(bright_word)
Call Fni2cwrite(ds1307w , Brightness_addmap , Brightness)


'=-=-=-=-=-=-=-=-=-=-=-==-=-=-=-
Main:

Gosub Read_ds1307

If Alarm_set = 0 Then
Call Fn7segh(reg_hour)
Call Fn7segm(reg_min)
Call Fn7segs(reg_sec)
 If Pm_bit = 0 Then
 Led_pm = 0
 Else
 Led_pm = 1
 End If
End If

If Alarm_set = 1 Then
Gosub Read_alarm
Call Fn7segh(alarm_reg_hour)
Call Fn7segm(alarm_reg_min)
Call Fn7segs(alarm_reg_sec)
 If Alarm_pm_bit = 0 Then
 Led_pm = 0
 Else
 Led_pm = 1
 End If
End If

' check for alarm condition
If Alarm_active = 1 Then
 If Reg_hour = Alarm_reg_hour Then
  If Reg_min = Alarm_reg_min Then
   If Reg_sec = Alarm_reg_sec Then
    If Pm_bit = Alarm_pm_bit Then
    Buzzer = 1
    Buzzer_count = 0
    End If
   End If
  End If
 End If
End If

If Alarm_active = 0 Then
Buzzer = 0
End If

If Buzzer_count >= Buz_time Then
Buzzer = 0
End If


' look for set key switches
If Sw_mode = 0 Then
' wait for keyrelease
While Sw_mode = 0
  If Sw_set = 0 Then
   ' do a clock init if both keys pressed
  Gosub Clock_init
  Gosub Setzero
  Set_mode_count = 4
  End If
Wend

Waitms 30
Sec_count = 0
' start a second t0 timer
Gosub Swmode
End If

If Sw_set = 0 Then
Waitms 30
Decrease = 0
Gosub Swset
End If

If Sw_set_minus = 0 Then
Waitms 30
Decrease = 1
Gosub Swset
End If


If Set_mode_count > 0 Then
If Sec_count > 4 Then
' more than 4 secs in set operation in idle mode
' so quit
Set_mode_count = 0 : Alarm_set = 0
Flicker_h = 0 : Flicker_m = 0 : Flicker_s = 0
 If Alarm_active = 1 Then
 Call Fn7segh(alarm_reg_hour)
 Call Fn7segm(alarm_reg_min)
 Call Fn7segs(alarm_reg_sec)
 Wait 1
 End If
End If
End If

If Alarm_set = 1 Then
 If Alarm_active = 1 Then
  If Sec_count > 3 Then
  Alarm_set = 0
  Led_alarm_active = 1
  End If
 End If
End If

If Alarm_active = 1 Then
 If Alarm_set = 0 Then
 Led_alarm_active = 1
 End If
End If

If Alarm_active = 0 Then
Led_alarm_active = 0
End If

If Buzzer = 1 Then
 If Sw_alarm_snooze = 0 Then
 Waitms 30
 ' snooze sw pressed
 Snooze = 1
 Buzzer = 0
 ' stop buzzer and
 ' make : colon flicker
 ' increase alarm time by 5 minutes
 Gosub Snooze5
 End If
End If

' check for alarm set switches
If Alarm_active = 0 Then
 If Alarm_toggle = 1 Then
 Waitms 30
 ' in alarm mode
 Alarm_set = 1
 Alarm_active = 1
 Sec_count = 0
 ' write alarm act in ram
 Alarm_active_byte = &B00000001
 Snooze = 0
 Call Fni2cwrite(ds1307w , Alarm_active_addmap , Alarm_active_byte)
 End If
End If


' check for alarm OFF
If Alarm_active = 1 Then
 If Alarm_toggle = 0 Then
 Waitms 30
 ' alarm deactivated
 Alarm_set = 0
 Led_alarm_active = 0
 Alarm_active = 0
 Alarm_active_byte = &B00000000
 Snooze = 0
 Call Fni2cwrite(ds1307w , Alarm_active_addmap , Alarm_active_byte)
 End If
End If


If Alarm_set = 1 Then
 ' flash led alarm to indicate SET mode
 Led_alarm_active = Led_alarm_active Xor 1
 Waitms 10
End If

If Buzzer = 0 Then
 If Sw_alarm_snooze = 0 Then
 Waitms 30
 ' snooze pressed without buzzer ON
 ' dim / bright 7-segment display
 If Brightness = 1 Then
 Brightness = 15
 Else
 Brightness = 1
 End If

 ' write brightness in rtc chip and 7219
 Bright_word = 2560 + Brightness
 Call Pulse_word(bright_word)
 Call Fni2cwrite(ds1307w , Brightness_addmap , Brightness)
 End If
End If

Goto Main
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=

Swmode:
Sec_count = 0
' in set mode now
' look for set sw and shift from hours to min set
' let hours flicker for set++
Incr Set_mode_count
Flicker_h = 0 : Flicker_m = 0 : Flicker_s = 0
' 1= hours set 2= min set 3= sec set

If Set_mode_count = 1 Then
Flicker_h = 1
End If

If Set_mode_count = 2 Then
Flicker_m = 1
End If

If Set_mode_count = 3 Then
Flicker_s = 1
End If

If Set_mode_count > 3 Then
Set_mode_count = 0 : Alarm_set = 0
Flicker_h = 0 : Flicker_m = 0 : Flicker_s = 0
End If
Return
' =-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-=

Swset:
' incr hh/mm/ or sec
Sec_count = 0
' reset our idle timer
If Set_mode_count = 1 Then
Gosub Set_hours
End If

If Set_mode_count = 2 Then
Gosub Set_minutes
End If

If Set_mode_count = 3 Then
Gosub Set_seconds
End If

' adjust brightness
If Set_mode_count = 0 Then

 If Decrease = 0 Then
 Incr Brightness
  If Brightness >= 15 Then
  Brightness = 15
  ' show limit reached by flshing colon leds
  Call Disp_digit(7 , 15)
  Call Disp_digit(8 , 15)
  Waitms 2
  End If
 Else
 Decr Brightness
  If Brightness = 0 Then
  Brightness = 1
  ' show limit reached by flshing colon leds
  Call Disp_digit(7 , 15)
  Call Disp_digit(8 , 15)
  Waitms 2
  End If
 End If
Bright_word = 2560 + Brightness
Call Pulse_word(bright_word)
Call Fni2cwrite(ds1307w , Brightness_addmap , Brightness)
End If

Return
'-=-=-=-=-=-=-=-=-=-=-=-=-=
Read_ds1307:
'-=-=-=-=-=-=-=-=-=-=-=-=-=

' Read Clock Data
Address = Sec_addmap
I2cstart
' Generate start
I2cwbyte Ds1307w
' Slave adsress
I2cwbyte Address
' Address of SECONDS REG
I2cstop
' Generate Stop
I2cstart
' Repeated start
I2cwbyte Ds1307r
' Slave address (read)
I2crbyte Reg_sec , Ack
I2crbyte Reg_min , Ack
I2crbyte Reg_hour , Nack
I2cstop
' Generate Stop
' check for am/pm
If Reg_hour.5 = 1 Then
Pm_bit = 1
Else
Pm_bit = 0
End If
 'reg_hour.6=1(12 hrmode) =0(24 hourmode)
'=-=-=-=-=-=-=-=-=-=-=-
Reg_hour = Reg_hour And &B00011111
' remove 12/24 set and am/pm bits
' set numeric variables
Num_hour = Makedec(reg_hour)
Num_min = Makedec(reg_min)
Num_sec = Makedec(reg_sec)

' read brightness level
I2cstart
' Generate start
I2cwbyte Ds1307w
' Slave adsress
I2cwbyte Brightness_addmap
I2cstop
' Generate Stop
I2cstart
' Repeated start
I2cwbyte Ds1307r
' Slave address (read)
I2crbyte Brightness , Nack
I2cstop
Brightness = Makedec(brightness)
Bright_word = 2560 + Brightness
Return

'---------------------------------------------

Clock_init:
' double key stroke
Address = Sec_addmap
Tempb = Reg_sec And &B01111111
' start Oscillator Enable bit 7 of seconds put 0
I2cstart
I2cwbyte Ds1307w
I2cwbyte Address
I2cwbyte Tempb
I2cstop
' Generate Stop

Address = Hour_addmap
Reg_hour.6 = 1
' 12-Hour Mode
Reg_hour.5 = 0
' am mode
I2cstart
I2cwbyte Ds1307w
I2cwbyte Address
I2cwbyte Reg_hour
I2cstop
' Generate Stop

Address = Control_addmap
' control address map

Tempb = &B10010000
' 1 Hz SQW Output
I2cstart
I2cwbyte Ds1307w
I2cwbyte Address
I2cwbyte Tempb
I2cstop
Return

'-------------------------------------------------
Setzero:
'=-=-=-=
' set time to 11:59:50 am for testing
Pm_bit = 0
Num_hour = 11
Reg_hour = Makebcd(num_hour)
Reg_hour.5 = 0
' above force am mode 0=am 1=pm
Reg_hour.6 = 1
' force 12 hour
Num_min = 59
Num_sec = 50

Call Fni2cwriteb(ds1307w , Hour_addmap , Reg_hour)
Call Fni2cwrite(ds1307w , Min_addmap , Num_min)
Call Fni2cwrite(ds1307w , Sec_addmap , Num_sec)

' -----
Alarm_num_hour = 12
Alarm_num_min = 00
Alarm_num_sec = 01
Alarm_active_byte = &B00000000
Alarm_active = 0

Alarm_reg_hour = Makebcd(alarm_num_hour)
Alarm_reg_min = Makebcd(alarm_num_min)
Alarm_reg_sec = Makebcd(alarm_num_sec)

Alarm_reg_hour.6 = 1
' 12-Hour Mode
Alarm_reg_hour.5 = 1
' pm mode

' alarm= 12:00:01 pm
Call Fni2cwriteb(ds1307w , Alarm_hour_addmap , Alarm_reg_hour)
Call Fni2cwrite(ds1307w , Alarm_min_addmap , Alarm_num_min)
Call Fni2cwrite(ds1307w , Alarm_sec_addmap , Alarm_num_sec)
Call Fni2cwrite(ds1307w , Alarm_active_addmap , Alarm_active_byte)
' set min brightness
Brightness = 1
Bright_word = 2560 + Brightness
Call Pulse_word(bright_word)
Call Fni2cwrite(ds1307w , Brightness_addmap , Brightness)
Return

' =-=-=-=-=-=-=-
Set_seconds:
' set sec to 0
'=-=-=-=
If Alarm_set = 1 Then
Gosub Alarm_set_seconds
End If

If Decrease = 1 Then
Decrease = 0
Num_sec = 00
Else
Num_sec = 54
End If

Reg_sec = Makebcd(num_sec)
Call Fni2cwriteb(ds1307w , Sec_addmap , Reg_sec)
Gosub Read_ds1307
Waitms 5
Return

' =-=-=-=-=-=-=-==-=-=-=-=
Alarm_set_seconds:
' set sec to 0
'=-=-=-=
If Decrease = 1 Then
Decrease = 0
Alarm_num_sec = 00
Else
Alarm_num_sec = 54
End If

Alarm_reg_sec = Makebcd(alarm_num_sec)
Call Fni2cwriteb(ds1307w , Alarm_sec_addmap , Alarm_reg_sec)
Gosub Read_alarm
Waitms 5
Return

' =-=-=-=-=-=-=-
Set_minutes:
' set mins
'=-=-=-=
If Alarm_set = 1 Then
Gosub Alarm_set_minutes
Return
End If

Num_min = Makedec(reg_min)

If Decrease = 0 Then
 Incr Num_min
  If Num_min > 59 Then
  Num_min = 0
  Reg_min = 0
  End If
Else
 Decr Num_min
  If Num_min = 255 Then
  Num_min = 59
  Reg_min = 59
  End If
End If

Call Fni2cwrite(ds1307w , Min_addmap , Num_min)
Gosub Read_ds1307
Call Fn7segm(reg_min)
Waitms 5
Decrease = 0
Return


' =-=-=-=-=-=-=-
Alarm_set_minutes:
'=-=-=-=-=-=-=-=
Alarm_num_min = Makedec(alarm_reg_min)

If Decrease = 0 Then
 Incr Alarm_num_min
  If Alarm_num_min > 59 Then
  Alarm_num_min = 0
  Alarm_reg_min = 0
  End If
Else
 Decr Alarm_num_min
  If Alarm_num_min = 255 Then
  Alarm_num_min = 59
  Alarm_reg_min = 59
  End If
End If

Call Fni2cwrite(ds1307w , Alarm_min_addmap , Alarm_num_min)
Gosub Read_alarm
Call Fn7segm(alarm_reg_min)
Waitms 5
Decrease = 0
Return

' =-=-=-=-=-=-=-
Set_hours:
'=-=-=-=-=-=-=-=
If Alarm_set = 1 Then
Gosub Alarm_set_hours
Return
End If

If Decrease = 0 Then
Incr Num_hour
  If Num_hour > 12 Then
  Num_hour = 1
  End If
Else
Decr Num_hour
  If Num_hour = 0 Then
  Num_hour = 12
  End If
End If

If Decrease = 0 Then
 If Num_hour = 12 Then
 Pm_bit = Pm_bit Xor 1
 End If
Else
 If Num_hour = 11 Then
 Pm_bit = Pm_bit Xor 1
 End If
End If


Reg_hour = Makebcd(num_hour)
Reg_hour.6 = 1
' set 12 hr mode

If Pm_bit = 1 Then
Reg_hour.5 = 1
' pm
Else
Reg_hour.5 = 0
' am
End If

Call Fni2cwriteb(ds1307w , Hour_addmap , Reg_hour)
Gosub Read_ds1307
Call Fn7segh(reg_hour)
Waitms 5
Decrease = 0
Return

' =-=-=-=-=-=-=-
Alarm_set_hours:
' set alarm hours
'=-=-=-==-=-=-=-=

If Decrease = 0 Then
Incr Alarm_num_hour
  If Alarm_num_hour > 12 Then
  Alarm_num_hour = 1
  End If
Else
Decr Alarm_num_hour
  If Alarm_num_hour = 0 Then
  Alarm_num_hour = 12
  End If
End If

If Decrease = 0 Then
 If Alarm_num_hour = 12 Then
 Alarm_pm_bit = Alarm_pm_bit Xor 1
 End If
Else
 If Alarm_num_hour = 11 Then
 Alarm_pm_bit = Alarm_pm_bit Xor 1
 End If
End If


Alarm_reg_hour = Makebcd(alarm_num_hour)
Alarm_reg_hour.6 = 1
' set 12 hr mode

If Alarm_pm_bit = 1 Then
Alarm_reg_hour.5 = 1
' pm
Else
Alarm_reg_hour.5 = 0
' am
End If

Call Fni2cwriteb(ds1307w , Alarm_hour_addmap , Alarm_reg_hour)
Gosub Read_alarm
Call Fn7segh(alarm_reg_hour)
Decrease = 0
Return

' =-=-=-=-=-=-=-
' functions below
'=-=-=-=-=-= function below---- - -- -
Sub Fn7segh(_ih As Byte)
Tempb = Makedec(_ih)
Units = Tempb Mod 10
Tens = Tempb / 10
Call Disp_digit(5 , Units)
Call Disp_digit(6 , Tens)

Call Disp_digit(7 , 1)
Call Disp_digit(8 , 1)

If Flicker_h = 1 Then
' if in set mode make display flicker
Waitms 5
' turn it on again
Call Disp_digit(5 , 15)
Call Disp_digit(6 , 15)
Waitms 5
End If

If Snooze = 1 Then
' if in snooze mode make : flicker
Waitms 2
' turn it on again
Call Disp_digit(7 , 15)
Call Disp_digit(8 , 15)
Waitms 2
End If

End Sub
'-=-=-=-=-=-=-=-=

Sub Fn7segm(_im As Byte)
Tempb = Makedec(_im)
Units = Tempb Mod 10
Tens = Tempb / 10
Call Disp_digit(3 , Units)
Call Disp_digit(4 , Tens)
If Flicker_m = 1 Then
' if in set mode make display flicker
Waitms 5
' turn it on again
Call Disp_digit(3 , 15)
Call Disp_digit(4 , 15)
Waitms 5
End If
End Sub

'-=-=-=-=-=-=-=-=
Sub Fn7segs(_is As Byte)
Tempb = Makedec(_is)
Units = Tempb Mod 10
Tens = Tempb / 10
Call Disp_digit(1 , Units)
Call Disp_digit(2 , Tens)
If Flicker_s = 1 Then
' if in set mode make display flicker
Waitms 5
' turn it on again
Call Disp_digit(1 , 15)
Call Disp_digit(2 , 15)
Waitms 5
End If
End Sub
'-=-=-=-=-=-=-=-=

Sub Fni2cwrite(_slaveadd As Byte , _add As Byte , _num As Byte)
Dim _bcdnumber As Byte
_bcdnumber = Makebcd(_num )
I2cstart
I2cwbyte _slaveadd
I2cwbyte _add
I2cwbyte _bcdnumber
I2cstop
End Sub
'-=-=-=-=-=-=-=-=
Sub Fni2cwriteb(_slaveaddb As Byte , _addb As Byte , _numb As Byte)
I2cstart
I2cwbyte _slaveaddb
I2cwbyte _addb
I2cwbyte _numb
I2cstop
End Sub

'=-=-=-=-=-=-=-=-=-=-=-
Sub Pulse_bit(bit1 As Bit)
Din = Bit1
Clock = 1
Clock = 0
Din = 0
End Sub
'=-=-==-==-=-=-=-=-=-=-=-=
Sub Pulse_word(w1 As Word)
Cs = 0
Dim _i As Byte , _k As Bit
For _i = 1 To 16
J = W1 And &B1000000000000000
If J = &B1000000000000000 Then : _k = 1 : Else : _k = 0 : End If
Call Pulse_bit(_k)
Shift W1 , Left , 1
Next _i
Cs = 1
End Sub
'-=-=-=-=-==-=-=-=-=-=-=-=-=-==-=-=--=-=-=--==
Sub Disp_digit(d1 As Byte , Num As Byte)
W1 = D1 * 256
W1 = W1 + Num
Call Pulse_word(w1)
End Sub
'=-=-=-=-=-=-=-==-=-=-=-
Sub Disp_blank()
Dim _j As Byte
For _j = 1 To Maxdigits
Call Disp_digit(_j , 15)
Next _j
End Sub

' int subroutine -----------------
Timer_0_overflow_int:
Incr Clock_word

If Clock_word > 2000 Then
Clock_word = 0
Sec_flag = 1
Incr Sec_count
Incr Buzzer_count
End If
Return

'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-==-=-==-
Read_alarm:
' Read alarm Data
Address = Alarm_sec_addmap
I2cstart
I2cwbyte Ds1307w
I2cwbyte Address
I2cstop
I2cstart
I2cwbyte Ds1307r
' Slave address (read)
I2crbyte Alarm_reg_sec , Ack
I2crbyte Alarm_reg_min , Ack
I2crbyte Alarm_reg_hour , Ack
I2crbyte Alarm_active_byte , Nack
I2cstop
' Generate Stop
' check for am/pm
'Alarm_active = 1
If Alarm_active_byte = 1 Then
Alarm_active = 1
Else
Alarm_active = 0
End If

If Alarm_reg_hour.5 = 1 Then
Alarm_pm_bit = 1
Else
Alarm_pm_bit = 0
End If


Alarm_reg_hour = Alarm_reg_hour And &B00011111
' remove 12/24 set and am/pm bits
' set numeric variables
Alarm_num_hour = Makedec(alarm_reg_hour)
Alarm_num_min = Makedec(alarm_reg_min)
Alarm_num_sec = Makedec(alarm_reg_sec)

Return
'-=-=-=-=-=-=-=-=-=-=-=-=-=--
Snooze5:
'increment alarm time by (snooze_mins) minutes
Gosub Read_alarm
Alarm_num_min = Makedec(alarm_reg_min)
Alarm_num_min = Alarm_num_min + Snooze_mins

  If Alarm_num_min > 59 Then
  Diff = Alarm_num_min - 60
  Alarm_num_min = Diff
  Alarm_reg_min = Makebcd(alarm_num_min)
  ' inc hrs

  Incr Alarm_num_hour
   If Alarm_num_hour > 12 Then
   Alarm_num_hour = 1
   End If

   If Alarm_num_hour = 12 Then
   Alarm_pm_bit = Alarm_pm_bit Xor 1
   End If
  End If

Alarm_reg_hour = Makebcd(alarm_num_hour)
Alarm_reg_hour.6 = 1
' Set 12 Hr Mode

If Alarm_pm_bit = 1 Then
Alarm_reg_hour.5 = 1
' pm
Else
Alarm_reg_hour.5 = 0
' am
End If

Call Fni2cwriteb(ds1307w , Alarm_hour_addmap , Alarm_reg_hour)
Call Fni2cwrite(ds1307w , Alarm_min_addmap , Alarm_num_min)
Gosub Read_alarm
Return
'=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Rem The Interrupt Handler For The Int0 Interrupt
Int0_int:
Alarm_toggle = Alarm_toggle Xor 1
' p3.2
Return
End
' end of program 3742 bytes long
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top