Hallo
Obwohl die Arrays mit dem Index 1 starten, ein Byte besteht auch bei Bascom aus Bit0 bis Bit7:
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?Temp = Bildspeicher(spalte)
If Temp.1 = 1 Then Set Portd.2 Else Reset Portd.2
http://www.google.de/search?q=JTAG+i...+ausgeschaltet
Version 2:
(ungetestet)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 ')







Zitieren


Lesezeichen