PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : wie aus bascom *.bas eine bascom lib machen ????



DarkBeast
08.12.2007, 16:33
so ich habe mir hier aus dem forum ein codeschnippsel für das display von pollin mit der bezeichnung "HLM8070" besorgt und etwas umgestrickt. Funktioniert auch wunderbar doch jetzt würde ich das *bas programm dazu gerne als lib verwenden um dann z.B. dieses programm bei bedarf in andere programme einbauen zu können ähnlich wie die anderen displays per LCD-anweisung wie die in bascom schon enthalten ist kann mir irgendwer erklären wie das geht ????

bin allerdings weder in c noch in asm eine leuchte auch meine Bascom kentnisse bewegen sich eher auf anfänger niveau

hier erstmal der code den ich verwende damit auch andere die das teil haben es mit einfachen mitteln einsetzen können



$regfile = "m32def.dat"
$crystal = 16000000

Declare Sub Lcd_m50530_init() 'declare the SUB program
Declare Sub Lcd_m50530_chr(ch As Byte)
Declare Sub Lcd_m50530_command(command As Byte)
Declare Sub Lcd_m50530_gotoxy(lcd_x As Byte , Lcd_y As Byte)
Declare Sub Lcd_m50530_clear()
Declare Sub Lcd_m50530_enable
Declare Sub Lcd_m50530_print()

Lcd_m50530 Alias Portc
Config Lcd_m50530 = Output
_oc1 Alias 4
_oc2 Alias 5
_ex Alias 6

Dim T As Byte ' Zählschleife
Dim Lcd_temp As Byte ' Temp im Unterprogramm
Dim Lcd_parameter As Byte ' wird an LCD gesendet
Dim _x As Byte ' Cursor x Position
Dim _y As Byte ' Cursor y Position
Dim Text As String * 16 ' String zur textübergabe
Dim Xstring As String * 16
Dim Xchar As Byte
Dim I As Byte

'-------------------------
' Begin Hauptprogramm
'-------------------------
_x = 5 : _y = 2
Call Lcd_m50530_init
Do
For I = 1 To 100
Text = Str(i)
Call Lcd_m50530_gotoxy(_x , _y)
Call Lcd_m50530_print()
Waitms 200
If I = 100 Then Call Lcd_m50530_clear
Next
Loop

'-------------------------
' End Hauptprogramm
'-------------------------
'----------------------------------------
Sub Lcd_m50530_init
'----------------------------------------

Lcd_parameter = $d8 'set function mode (SF) 0b11011000
Call Lcd_m50530_command(lcd_parameter) '4bit-Modus einstellen 11 -4/8bit-FONT-2xDUTY-2xRAM

Lcd_parameter = $50 'set entry mode (SE) 0b01010000
Call Lcd_m50530_command(lcd_parameter) 'Cursor selbst setzen

Lcd_parameter = $33 'set display mode (SD) 0b00110011
Call Lcd_m50530_command(lcd_parameter) 'Display ein, Cursor nicht anzeigen

Lcd_parameter = $01 ' 0b00000001 Display löschen
Call Lcd_m50530_command(lcd_parameter)
Waitms 2
End Sub

'----------------------------------------
Sub Lcd_m50530_chr(ch As Byte)
'----------------------------------------
Lcd_temp = Ch
Shift Lcd_temp , Right , 4
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable

Lcd_temp = Ch And $0f
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable
Waitus 20
End Sub

'---------------------------------------
Sub Lcd_m50530_command(command As Byte)
'---------------------------------------
Lcd_temp = Command
Shift Lcd_temp , Right , 4
Reset Lcd_temp._oc1
Reset Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable

Lcd_temp = Command And $0f
Reset Lcd_temp._oc1
Reset Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable
Waitus 20
End Sub
'-----------------------------------------------------
Sub Lcd_m50530_gotoxy(lcd_x As Byte , Lcd_y As Byte)
'-----------------------------------------------------

Select Case Lcd_y
Case 1 : Lcd_parameter = $00
Case 2 : Lcd_parameter = $40
Case 3 : Lcd_parameter = $80
Case 4 : Lcd_parameter = $c0
Case Else : Lcd_parameter = $00
End Select

Lcd_parameter = Lcd_parameter + Lcd_x
Decr Lcd_parameter
Lcd_temp = Lcd_parameter
Shift Lcd_temp , Right , 4
Set Lcd_temp._oc1
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable

Lcd_temp = Lcd_parameter And $0f
Set Lcd_temp._oc1
Set Lcd_temp._oc2
Lcd_m50530 = Lcd_temp
Call Lcd_m50530_enable
Waitus 20
End Sub

'----------------------------------------
Sub Lcd_m50530_clear
'----------------------------------------
Lcd_parameter = $01 ' 0b00000001 Display löschen
Call Lcd_m50530_command(lcd_parameter)
Waitms 2
End Sub

'----------------------------------------
Sub Lcd_m50530_enable
'----------------------------------------
Set Lcd_m50530._ex
Waitus 1
Reset Lcd_m50530._ex
End Sub

'----------------------------------------
Sub Lcd_m50530_print()
'----------------------------------------
For T = 1 To Len(text)
Xstring = Mid(text , T , 1)
Xchar = Asc(xstring)
Call Lcd_m50530_chr(xchar)
Next

End Sub

stefan_Z
08.12.2007, 17:00
Also aus Basco-Listings braucht man keine LIB zu machen, denn man kann sie ja auch einfach so mit ins Hauptprogramm mit reinsetzen - der Ergebnis (also die Codegröße) bleibt da sowieso gleich.
LIBs sind in Assembler geschrieben - was auch Sinn macht, denn so hat man nur die Basic-Befehle vor Augen und muss sich um den Rest nicht kümmern.

Wenn du Teile des Codes verpacken und einfach nutzen willst, leg die SUBs oder FUNCTIONS an. Das ist weniger schwer als es erstmal aussieht und sehr praktisch.

DarkBeast
08.12.2007, 17:53
naja hatte eigentlich gedacht es findet sich jemand der den code so umbaut das das ding nachher mit den normalen LCD-befehlen von bascom zu benutzen ist also auch die pinconfig und alles inclusive locate usw.

naja man kann halt nicht alles haben

wäre halt schön gewesen da das display recht gross und vor allem billig zu haben ist

PicNick
08.12.2007, 18:05
... es findet sich jemand der den code so umbaut ..

Geht schon, is aber Arbeit *schwitz*

DarkBeast
08.12.2007, 18:10
würds ja selber versuchen *denk* allerdings jetzt zusätzlich noch zu bascom asm oder c ist mir ehrlichgesagt zu kompliziert werd wohl sobald ich bascom kapiert habe mal mit c anfangen und dann irgendwann in ferner zukunft auch mit asm aber alles auf einmal ist etwas viel *gg* bin ja froh wenn ich bascom irgendwann mal checke

PicNick
08.12.2007, 18:17
Verständlich.
However, wenn du mal Lust hast, eine Literaturempfehlung :-) :
https://www.roboternetz.de/wissen/index.php/Assembler_Einf%C3%BChrung_f%C3%BCr_Bascom-User

https://www.roboternetz.de/wissen/index.php/Bascom_Libraries

DarkBeast
08.12.2007, 18:19
*gg* immer gern will ja was lenen aber das meiste daraus kenn ich schon *denk* auch hab ich das buch eines ge´wssen herrn rowalt hier war auch recht informativ *habdamitangefangen* naja und im mom buddel ich mich halt durch die bascom hilfe ist ja gespickt mit beispielen zu so zimlich fast jedem problem *gg*

stefan_Z
08.12.2007, 18:36
Aber ob du jetzt

LCD "Hallo Welt"
oder

Mein_LCD(String-Variable)
schreibst ist doch egal, oder?

DarkBeast
08.12.2007, 19:10
das schon aber z.B die port configuration oder die angabe wohin mit den daten usw wäre halt einfacher naja erstmal bastel ich jetzt daran wie ich aus dem befehl "Lcd_m50530 Alias Portc Config Lcd_m50530 = Output" so abändere das nicht immer der ganze port blockiert ist sondern ich die anderen pins noch einzel nutzen kann. bisher wird immer der ganze port benutzt obwohl ich ja nur 4 datenleitungen brauche da ich aber rn-control nutze liegen dann ja die anderen ports z.B. i2c als belegt und nicht mehr nutzbar oder irre ich da ??