03-30-2018, 06:08 PM
$Device = m168 ' used device
$Stack = 32 ' stack depth
$Clock = 12 ' used crystal
$Timer0 = Timer, Prescale = 256 ' use timer0
Declare Interrupt Ovf0() ' timer0 interrupt
Dim Counter As Byte ' define counter
Dim i As Integer ' define i number counter
Dim segment_number(9) As Byte ' define segment_number
segment_number = (&h3F, &h06, &h5B, &h4F, &h66, &h6D, &h7D, &h07, &h7F, &h6F)
DDRB = &h07 ' display select pins output
DDRD = &hFF ' segment display output
Enable Interrupts ' enable global interrupts
Enable Timer0
Start Timer0 ' start timer0
Do ' main loop
For i=0 To 480 ' increase segment number
WaitMs 50
Next i
Loop
Interrupt Ovf0(), Save 1
Timer0=&hd12f ' 1ms interrupt
Counter = Counter + 1 ' increase counter
If Counter > 2 Then ' reset counter
Counter = 0
End If
Reset PORTB.0 ' turn off all segments
Reset PORTB.1
Reset PORTB.2
Select Case Counter '
Case 0
PORTD = segment_number((128 mod 1000) / 100) ' display first digit
Set PORTB.0 ' turn on first segment
Case 1
PORTD = segment_number((i mod 100) / 10) ' display second digit
Set PORTB.1 ' turn on second segment
Case 2
PORTD = segment_number((i mod 10)) ' display third digit
Set PORTB.2 ' turn on third segment
End Select
End Interrupt
Stavio sam kod prema gore navedenim primjeru i u proteusus display je stalno prazan nista se ne dogadja...timer0 je podeseni na 1000uS tj 1mS ali simulacija ne radi sa ovim kodom...mora da sam negdje pogrijesio sa timerom....
$Stack = 32 ' stack depth
$Clock = 12 ' used crystal
$Timer0 = Timer, Prescale = 256 ' use timer0
Declare Interrupt Ovf0() ' timer0 interrupt
Dim Counter As Byte ' define counter
Dim i As Integer ' define i number counter
Dim segment_number(9) As Byte ' define segment_number
segment_number = (&h3F, &h06, &h5B, &h4F, &h66, &h6D, &h7D, &h07, &h7F, &h6F)
DDRB = &h07 ' display select pins output
DDRD = &hFF ' segment display output
Enable Interrupts ' enable global interrupts
Enable Timer0
Start Timer0 ' start timer0
Do ' main loop
For i=0 To 480 ' increase segment number
WaitMs 50
Next i
Loop
Interrupt Ovf0(), Save 1
Timer0=&hd12f ' 1ms interrupt
Counter = Counter + 1 ' increase counter
If Counter > 2 Then ' reset counter
Counter = 0
End If
Reset PORTB.0 ' turn off all segments
Reset PORTB.1
Reset PORTB.2
Select Case Counter '
Case 0
PORTD = segment_number((128 mod 1000) / 100) ' display first digit
Set PORTB.0 ' turn on first segment
Case 1
PORTD = segment_number((i mod 100) / 10) ' display second digit
Set PORTB.1 ' turn on second segment
Case 2
PORTD = segment_number((i mod 10)) ' display third digit
Set PORTB.2 ' turn on third segment
End Select
End Interrupt
Stavio sam kod prema gore navedenim primjeru i u proteusus display je stalno prazan nista se ne dogadja...timer0 je podeseni na 1000uS tj 1mS ali simulacija ne radi sa ovim kodom...mora da sam negdje pogrijesio sa timerom....