Hallo
Obwohl die Arrays mit dem Index 1 starten, ein Byte besteht auch bei Bascom aus Bit0 bis Bit7:
Temp = Bildspeicher(spalte)
If Temp.
1 = 1 Then Set Portd.2 Else Reset Portd.2
Ich bin leider auch ziemlich ratlos. Scheinbar ist nur der Port C betroffen. Das einzige was mir dazu einfällt: JTAG ist nicht ausgeschaltet. Das würde allerdings nur PC2-5 betreffen. Wird an den "fehlerhaften" Pins etwas ausgegeben?
http://www.google.de/search?q=JTAG+i...+ausgeschaltet
Version 2:
Code:
$regfile = "m16def.dat"
$crystal = 16000000
$hwstack = 40
$swstack = 16
$framesize = 32
Config Porta = &B11100000 ' PA7-PA5 sind Ausgang (Spalten 7-9)
Config Portb = &B00111111 ' PB5-PB0 (Spalten 1-6)
Config Portc = &B11111111 ' PC7-PC0 (Zeilen 0-7)
Config Portd = &B00000111 ' PA2-PA0 (Zeilen 8-10)
Declare Sub Set_pixel(byval X As Byte , Byval Y As Byte) ' Nullpunkt ist oben links als 0,0?
Declare Sub Reset_pixel(byval X As Byte , Byval Y As Byte) ' x von 0 bis 8, y von 0 bis 10
Dim Bildspeicher(11) As Word , Spalte As Byte , Temp As Word , Zaehler As Word
Dim X As Byte , Y As Byte
Zaehler = 0
Spalte = 1 ' Spalte ist Index im Array und startet deshalb mit 1!
Do
' Anfang der späteren ISR
' alle Spalten aus
Portb = Pinb And &B11000000 ' PB5-PB0 ausschalten
Porta = Pina And &B00011111 ' PA7-PA5 ausschalten
' Zeilenpins der aktuellen Spalte setzen
' Zeile 0 bis 7 ist PC0 bis 7, Zeile 8 bis 10 ist PD0 bis 2
Temp = Bildspeicher(spalte)
Portc = Temp And 255 ' Bits 0 bis 7 an PortC.0 bis .7 ausgeben
Temp = Temp / 256 ' Bits 8-10 werden Bits 2-0
Portd = Temp And 7 ' Bits 7-3 ausblenden und Bits 2-0 an Port D ausgeben
' aktuelle Spalte einschalten
Select Case Spalte
Case 1 : Set Portb.4
Case 2 : Set Portb.3
Case 3 : Set Portb.2
Case 4 : Set Portb.1
Case 5 : Set Portb.0
Case 6 : Set Porta.7
Case 7 : Set Porta.6
Case 8 : Set Porta.5
Case 9 : Set Portb.5
End Select
If Spalte < 9 Then Spalte = Spalte + 1 Else Spalte = 1
' Ende der späteren ISR
Waitus 100
Select Case Zaehler
Case 1000 : For X = 0 To 8 ' diagonale
Set_pixel X , X
Next X
Case 2000 : For X = 0 To 10 ' waagrecht
Set_pixel X , 0
Set_pixel X , 8
Next X
Case 3000 : For Y = 0 To 8 ' senkrecht
Set_pixel 0 , Y
Set_pixel 10 , Y
Next X
Case 4000 : For X = 1 To 11 ' alle an
Bildspeicher(x) = &B11111111111
Next X
Case 5000 : For X = 1 To 9 ' Bitmuster
Bildspeicher(x) = &B11111111100
Next X
Case 6000 : For X = 1 To 9 ' alle aus
Bildspeicher(x) = 0
Next X
Zaehler = 0
End Select
Zaehler = Zaehler + 1
Loop
End
Sub Set_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 1 ' Bascom startet Arrays mit 1
End Sub
Sub Reset_pixel(byval X As Byte , Byval Y As Byte)
Bildspeicher(x + 1).y = 0
End Sub
'(
' Wird nicht verwendet und soll nur die Zeilenbelegung zeigen.
Durch die aufsteigenden Bits kann man die Bytes schneller ausgeben.
Sub Zeilensetzen
Temp = Bildspeicher(spalte)
If Temp.0 = 1 Then Set Portc.0 Else Reset Portc.0
If Temp.1 = 1 Then Set Portc.1 Else Reset Portc.1
If Temp.2 = 1 Then Set Portc.2 Else Reset Portc.2
If Temp.3 = 1 Then Set Portc.3 Else Reset Portc.3
If Temp.4 = 1 Then Set Portc.4 Else Reset Portc.4
If Temp.5 = 1 Then Set Portc.5 Else Reset Portc.5
If Temp.6 = 1 Then Set Portc.6 Else Reset Portc.6
If Temp.7 = 1 Then Set Portc.7 Else Reset Portc.7
If Temp.8 = 1 Then Set Portd.0 Else Reset Portd.0
If Temp.9 = 1 Then Set Portd.1 Else Reset Portd.1
If Temp.10 = 1 Then Set Portd.2 Else Reset Portd.2
End Sub
')
(ungetestet)
Lesezeichen