PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Einige Fragen zu Bascom



Hannebambel
21.02.2005, 17:21
Also 1.
Wie funktionieren die datalines ?
data: &HFF....
Werden die nacheinander abgefragt bis zur nächsten sprungmarke?

2. Wie benutzt man (beim mega 8) den pin T0 um den timer zu starten und zu stoppen das hat doch etwas mit interrupt zu tun oder?
Und kann man den pin mit debounce entprellen oder muss das mit nem externen rc gemacht werden?

3. Wie lange braucht der mega bis er einen ausgelösten interrupt ausführt (mit register sichern und so weiter) und bis er wieder zum Hauptprogramm zurückkehrt.

4.Kann die serielle uart daten puffern bis sie abgeholt werden (ohne belastung der Prozessorzeit)

ich weiß fragen über fragen und ich danke euch schonmal für die kompetenten antworten.

uwegw
21.02.2005, 17:56
fang ich mal von hinten an ;)


4.Kann die serielle uart daten puffern bis sie abgeholt werden (ohne belastung der Prozessorzeit)
im mega gibts nen empfangsbuffer von einem byte, dh das jeweils letzte zeichen liegt dort, bis es ausgelesen wurde.
tipp: es gibt nen interrupt, der in diesem fall ausgelöstz wird. damit kansnt du dann schnellstmöglichst die daten abspeichern...


3. Wie lange braucht der mega bis er einen ausgelösten interrupt ausführt (mit register sichern und so weiter) und bis er wieder zum Hauptprogramm zurückkehrt.
ich hab kein ahnung wie effizient bascom den code hinkriegt. es dürfte aber nicht viel mehr als 100 takte dauern schätz ich mal...

2. weiß ich nicht, weil ich mich mit den timern noch nicht näher beschäftig habe

1. weiß ich auch nicht...

darwin.nuernberg
21.02.2005, 19:43
Also Generell galt in Basic dass DATAs nur sequenziell abgerufen werden konnten. Aber eben nur ein Datablock pro Proramm.

Bascom scheint hier anders zu arbeiten.
Mittels dem Restore Befehl und der Sprungmarke wird auf den Anfang eines DATA Satzes gesprungen / gewechselt.

Somit ist es möglich mehrere Data Blöcke unterschiedlicher Typen zu definieren.

Durch das Restore wird aber immer zum ersten Eintrag des Satzes gesprungen (sonst dürfte der Befehl nicht restore heissen).


ALSO:
Mit Restore Dta4 wir der Zeiger auf den ersten Eintrag nach der Sprungmarke Dta4: gesetzt.


(Habe ich nicht geprüft, aber die Hilfe gibt das so her.)





Action

Instruct the compiler to store the data in the DATA lines following the $DATA directive, in code memory.



Syntax

$DATA



Remarks

The AVR has built-in EEPROM. With the WRITEEEPROM and READEEPROM statements, you can write and read to the EEPROM.
To store information in the EEPROM, you can add DATA lines to your program that hold the data that must be stored in the EEPROM.
A separate file is generated with the EEP extension. This file can be used to program the EEPROM.

The compiler must know which DATA must go into the code memory or the EEP file and therefore two compiler directives were added.

$EEPROM and $DATA.

$EEPROM tells the compiler that the DATA lines following the compiler directive, must be stored in the EEP file.
To switch back to the default behavior of the DATA lines, you must use the $DATA directive.

The READ statement that is used to read the DATA info may only be used with normal DATA lines. It does not work with DATA stored in EEPROM.


See also

$EEPROM , READEEPROM , WRITEEEPROM

ASM

NONE

Example

'-------------------------------------------------------------
' READDATA.BAS
' Copyright 1999-2002 MCS Electronics
'-------------------------------------------------------------

Dim A As Integer , B1 As Byte , Count As Byte
Dim S As String * 15
Dim L As Long
Restore Dta1 'point to stored data
For Count = 1 To 3 'for number of data items
Read B1 : Print Count ; " " ; B1
Next

Restore Dta2 'point to stored data
For Count = 1 To 2 'for number of data items
Read A : Print Count ; " " ; A
Next

Restore Dta3
Read S : Print S
Read S : Print S


Restore Dta4
Read L : Print L 'long type

End


Dta1:
Data &B10 , &HFF , 10
Dta2:
Data 1000% , -1%

Dta3:
Data "Hello" , "World"
'Note that integer values (>255 or <0) must end with the %-sign
'also note that the data type must match the variable type that is
'used for the READ statement

Dta4:
Data 123456789&
'Note that LONG values must end with the &-sign
'Also note that the data type must match the variable type that is used
'for the READ statement

Frank
21.02.2005, 20:43
Was den seriellen Buffer betrifft, da gibts es in Basom auch Funktionen die Buffer für die Ein- und Ausgabe anlegen. Die Buffergröße legst du selbst fest. In vielen ANwendungen ist es sehr empfehlenswert diese zu nutzen.

z.B. Beispiel:
Config Serialin = Buffered , Size = 160


Gruß
Frank

patti16
21.02.2005, 20:51
aber woher weiß ich genau wie groß ich die machen soll??

gruß
patrick

Hannebambel
21.02.2005, 22:22
Aha also man schreibt die datalines ins eeprom macht das bascom automatisch?

was den buffer betrifft ich lege den also fest und kann daten reinschreiben und irgendwann abrufen ohne wertvolle prozessorzeit beim beschreiben zu verschwenden?

gibt es eigentlich einen befehl der alle ausgangsports auf low setzt?

jetzt weiß ich aber ímmernoch nicht wie das mit dem timer funktioniert.

uwegw
22.02.2005, 15:09
was den buffer betrifft ich lege den also fest und kann daten reinschreiben und irgendwann abrufen ohne wertvolle prozessorzeit beim beschreiben zu verschwenden?

nein, das schreiben in den buffer wird von bascom wahrscheinlich in einen interupt gepackt. somit brauchst du halt zwischendurch immer nen paar takte dafür...
was hast du vor? ist deine anwendung sooo zeitkritisch? dannn würd ich schon fast von bascom zu assembler wechseln...


gibt es eigentlich einen befehl der alle ausgangsports auf low setzt?
also alle pins eines port ist klar... und das müsstest du dann nen paar mal machen um sämtliche ports zu schalten...
zeit dafür: in asm würd die ganze aktion fünf takte brauchen bei vier ports am avr...



aber woher weiß ich genau wie groß ich die machen soll?

ist doch klar: so groß dass alle daten reinpassen die ankommen könnten, bis der buffer das nächste mal ausgelesen wird....

Hannebambel
22.02.2005, 17:20
wirklich zeitkritisch ist sie warscheinlich nicht ist nur son erstes uC projekt und ich kann die zeit noch nicht so einschätzen. aber ich glaub für meinen fall wird es allemal genügen.

wie brennt man die datalines ins eeprom? kann man das bei bascom einstellen oder macht er das automatisch?

Ich hab mir das mit den timern mal in der hilfe angeschaut, aber wirklich schlau bin ich daraus nicht geworden also wenn jemand weiß wie das funktioniert...

Hannebambel
23.02.2005, 15:50
und gleich noch was werden die datalines vom flash speicher aus adressiert bzw habe ich die vollen 512 byte zur verfügung oder fressen die Sprungmarken auch speicher?

Hannebambel
24.02.2005, 09:08
Wie kann man hex daten spiegeln (in bascom) z.b. 7f und gespiegelt ef
bzw 10110011 gespiegelt 11001101

PitTY
24.02.2005, 15:37
Dein Bsp. ist kein Spiegel! der Spiegel von &H7f ist &H80

7f: 01111111
80: 10000000

Erreichst du zb. durch: spiegel = 255 - wert

Hannebambel
24.02.2005, 17:36
das ist invertiert nicht gespiegelt