'******************************************************************* ' Program Name : timer_clock_disp ' Start Date 21st.Mar.2010 ' Author Yoshio KATO ' Description : Used MCU ATtiny2313 ' : System Clock 12.8MHz External OSC ' : Used 7 segments LED display ' : Recieve time data from timer_clock unit '******************************************************************* $regfile = "attiny2313.dat" $crystal = 12800000 $baud = 38400 Dim Hour As Byte Dim Minute As Byte Dim Segdata(10) As Byte Dim Digit As Byte Dim Wk As Byte Dim Rx As Byte 'rec data Const Digit1 = 3 Const Digit2 = 4 Const Digit3 = 5 Const Digit4 = 6 Main: Stop Ac Enable Urxc On Urxc Rec_dt Enable Interrupts Config Portb = Output Config Portd = &HF8 'Output Portd = &H11111111 'PD0,PD1,PD2 pull up '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 'all segment off Portb = &HFF Set Portd.digit1 Set Portd.digit2 Set Portd.digit3 Set Portd.digit4 'time data clear Minute = 0 Hour = 0 'ever loop Do Wk = Minute Mod 10 Digit = Digit1 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Minute / 10 Digit = Digit2 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Hour Mod 10 Digit = Digit3 Gosub Dispdata 'Portb = Segdata(wk + 1) Wk = Hour / 10 Digit = Digit4 Gosub Dispdata 'Portb = Segdata(wk + 1) Loop End '******************************************************************* ' Out 7 segments data to PORTD ' Select digit by digit data '******************************************************************* Dispdata: Set Portd.digit1 'off digit1 Set Portd.digit2 'off digit2 Set Portd.digit3 'off digit3 Set Portd.digit4 'off digit4 Waitus 100 'wait 100us Portb = Segdata(wk + 1) 'out data Reset Portd.digit 'digit on Waitms 5 'wait5 Return '******************************************************************* ' Serial communication interrupt ' if recieved data grater than &h80,it's hour data '******************************************************************* Rec_dt: Rx = Udr 'get rec data If Rx >= &H80 Then 'Is MSB "1"? Hour = Rx And &H7F 'mask MSB and set hour Else Minute = Rx 'set minute End If Return