'******************************************************************* ' Program Name : gps_clock_disp ' Start Date 22nd.Mar.2010 ' Author Yoshio KATO ' Description : Used MCU ATtiny2313 ' ;recieve the time data from GPS unit ' : System Clock 12.8MHz External OSC ' : Used 7 segments LED display '******************************************************************* $regfile = "attiny2313.dat" $crystal = 12800000 $baud = 9600 Dim Month As Byte Dim Day As Byte Dim Hour As Byte Dim Minute As Byte Dim Second As Byte Dim Digit As Byte Dim Wk As Byte Dim Temp As Byte Dim Segdata(10) As Byte Dim Digit_select(10) As Byte Config Portb = &HFF Main: Stop Ac Config Portd = &HFF ' Enable Urxc On Urxc Rec_dt 'Nosave Enable Interrupts '7segment data Segdata(1) = &HC0 '0 a,b,c,d,e,f Segdata(2) = &HF9 '1 b,c Segdata(3) = &HA4 '2 a,b,d,e,g Segdata(4) = &HB0 '3 a,b,c,d,g Segdata(5) = &H99 '4 b,c,f,g Segdata(6) = &H92 '5 a,c,d,f,g Segdata(7) = &H82 '6 a,c,d,e,f,g Segdata(8) = &HD8 '7 a,b,c,f Segdata(9) = &H80 '8 a,b,c,d,e,f,g Segdata(10) = &H90 '9 a,b,c,d,f,g 'digit select data Digit_select(1) = &HE0 'one secon Digit_select(2) = &HE4 'ten second Digit_select(3) = &HE8 'one minute Digit_select(4) = &HEC 'ten minute Digit_select(5) = &HF0 'one hour Digit_select(6) = &HF4 'ten hour Digit_select(7) = &HF8 'one day Digit_select(8) = &HFC 'ten day Digit_select(9) = &HDC 'one month Digit_select(10) = &HBC 'ten month Do Wk = Second Mod 10 Digit = 1 Gosub Dispdata Wk = Second / 10 Digit = 2 Gosub Dispdata Wk = Minute Mod 10 Digit = 3 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Minute / 10 Digit = 4 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Hour Mod 10 Digit = 5 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Hour / 10 Digit = 6 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Day Mod 10 Digit = 7 Gosub Dispdata Wk = Day / 10 If Wk = 0 Then 'zero suppress of ten day Waitms 2 Else Digit = 8 Gosub Dispdata End If Wk = Month Mod 10 Digit = 9 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Month / 10 If Wk = 0 Then 'zero suppress of ten month Waitms 2 Else Digit = 10 Gosub Dispdata End If Loop End '******************************************************************* ' Serial communication interrupt ' if recieved data grater than &h80,it's hour data '******************************************************************* Dispdata: Portb = &HFF Portd = &HFF Set Portb.7 Portb = Segdata(wk + 1) 'second LED off Waitus 120 If Digit = 8 Then Reset Portb.7 Else Portd = Digit_select(digit) End If Waitms 2 Return '******************************************************************* ' Serial communication interrupt ' data discriminater are follows ' Month: 000* **** (1-12) ' Day : 001* **** (1-31) ' Hour : 010* **** (0-23) ' Minute:10** **** (0-59) ' Second:11** **** (0-59) '******************************************************************* Rec_dt: Wk = Udr Temp = Wk Temp = Temp And &HC0 Select Case Temp Case &H00 : Temp = Wk Temp = Temp And &H20 If Temp = 0 Then Month = Wk And &H0F Else Day = Wk And &H1F End If Case &H40 : Hour = Wk And &H1F Case &H80 : Minute = Wk And &H3F Case &HC0 : Second = Wk And &H3F End Select Return