De jó!A memóriakiosztás címei a fordítás után a Report alatt megtalálhatóak...
Már megint megtudtam fontos dolgokat!
Kód: Egész kijelölése
$regfile = "m128def.dat"
$crystal = 14745600
'$crystal = 8000000
'$baud = 38400
'$baud1 = 2400
$hwstack = 128
$swstack = 128
$framesize = 128
$lib "glcdeadogm128x6.lbx"
Config Portg.4 = Output
Led Alias Portg.4 'Active high
'LCD háttédfény
Config Porte.5 = Output 'R OC3A
Blue Alias Porte.5
Config Porte.4 = Output 'G OC3B
Green Alias Porte.4
Config Porte.3 = Output 'B OC3C
Red Alias Porte.3
Config Portf.6 = Output
Portf.6 = 0
Chipselect Alias Portf.6
Config Portf.5 = Output
Portf.5 = 1
Chipreset Alias Portf.5
Chipselect = 1
Waitms 10
Chipselect = 0
Chipreset = 0
Waitms 50
Chipreset = 1
Waitms 50
Config Graphlcd = 128 * 64eadogm , Cs1 = Portb.5 , A0 = Portb.4 , Si = Portb.2 , Sclk = Portb.1 , Rst = Portb.3
'I2C busz konfig
Config Scl = Portd.0
Config Sda = Portd.1
I2cinit
'Háttér bekapcsolása
Red = 1
Waitms 100
Green = 1
Waitms 100
Blue = 0
'24LC512 I2C EEPROM
Dim E_ah As Byte
Dim E_al As Byte
Dim E_dat As Byte 'Epromból kiolvasott teszt adat
Dim Dat As Byte 'Epromba beírt teszt adat
Dim E_addr As Word 'Olvasási cím
Dim E_addw As Word 'Írási cím
Dim Page_size As Byte 'Oldal néret megadása
Dim Sw_dat(128) As Byte
Dim Sw_dat_read(128) As Byte
Dim Ciklus As Word
Dim Ciklus_tomb As Word
Dim Kezdocim_plussz_oldalmeret As Word
'24LC512 EEPROM
Declare Sub E_page_write(byval E_addr As Word , Page_size As Byte)
Declare Sub E_read(byval E_addr As Word , E_dat As Byte)
'24LC512 EEPROM
Const E_ctlw = &B10100110 'Írás
Const E_ctlr = &B10100111 'Olvasás
Initlcd
Cls
Setfont Font8x8sajat
Page_size = 128
E_addw = &H0000
E_addr = E_addw 'Onnan kezdünk olvasni, ahova írtuk az első byte-ot!
'sw_dat buffer feltöltése az oldalméret nagységáig
For Ciklus = 1 To 128
Sw_dat(ciklus) = Ciklus - 1 'Igy 0-127-ig lesz benne az adat érték
Next Ciklus
Lcdat 1 , 1 , Hex(sw_dat(1)) ; Hex(sw_dat(2)) ; Hex(sw_dat(3)) ; Hex(sw_dat(4)) ; Hex(sw_dat(5)) ; Hex(sw_dat(6)) ; Hex(sw_dat(7)) ; Hex(sw_dat(8)) ; Hex(sw_dat(9))
Lcdat 2 , 1 , Hex(sw_dat(120)) ; Hex(sw_dat(121)) ; Hex(sw_dat(122)) ; Hex(sw_dat(123)) ; Hex(sw_dat(124)) ; Hex(sw_dat(125)) ; Hex(sw_dat(126)) ; Hex(sw_dat(127)) ; Hex(sw_dat(128))
Call E_page_write(e_addw , Page_size) 'Beleírjuk a megtelt oldalt az ext.eepromba
Kezdocim_plussz_oldalmeret = E_addr + Page_size
Kezdocim_plussz_oldalmeret = Kezdocim_plussz_oldalmeret - 1
For Ciklus = E_addr To Kezdocim_plussz_oldalmeret 'Itt a Ciklus érték a kiolvasási címet határozza meg!
Call E_read(ciklus , E_dat)
Ciklus_tomb = Ciklus + 1 'Mert a tömb index nem kezdődhet 0-tól (ami az irási kezdő cím amugy)
Sw_dat_read(ciklus_tomb) = E_dat
Next Ciklus
Lcdat 3 , 1 , Hex(sw_dat_read(1)) ; Hex(sw_dat_read(2)) ; Hex(sw_dat_read(3)) ; Hex(sw_dat_read(4)) ; Hex(sw_dat_read(5)) ; Hex(sw_dat_read(6)) ; Hex(sw_dat_read(7)) ; Hex(sw_dat_read(8)) ; Hex(sw_dat_read(9))
Lcdat 4 , 1 , Hex(sw_dat_read(120)) ; Hex(sw_dat_read(121)) ; Hex(sw_dat_read(122)) ; Hex(sw_dat_read(123)) ; Hex(sw_dat_read(124)) ; Hex(sw_dat_read(125)) ; Hex(sw_dat_read(126)) ; Hex(sw_dat_read(127)) ; Hex(sw_dat_read(128))
Do
nop
Loop
End
'///////////////////////////////////////////////////////////////////////////////
Sub E_page_write(byval E_addw As Word , Page_size As Byte)
Local Page_byte As Byte
Local Page_wirite_set As Byte
Page_wirite_set = 1
For Page_byte = 1 To Page_size
If Page_wirite_set = 1 Then ' ha 1, akkor az első beírás jön, ahol meg kell adni a kezdő cimet
I2cinit
E_ah = High(e_addw)
E_al = Low(e_addw)
I2cstart
I2cwbyte E_ctlw
I2cwbyte E_ah
I2cwbyte E_al
Page_wirite_set = 0
End If
I2cwbyte Sw_dat(page_byte) 'Beírodik a ciklusszámlálónak megfelelő byte
If Page_byte = Page_size Then Page_wirite_set = 255 'Ha elértük az utolsó byte-ot a page-ben akkor jöhet a STOP
If Page_wirite_set = 255 Then
I2cstop
E_addw = E_addw + Page_size 'Ha túlléptük az oldalméretet növeljök a címet a teleírt oldal méretével és kilépünk
Page_wirite_set = 1 'Alapbeállításra vissza, mert teleírodott az oldal!
End If
Next Page_byte
End Sub
'///////////////////////////////////////////////////////////////////////////////
Sub E_read(byval E_addr As Word , E_dat As Byte)
I2cinit
E_ah = High(e_addr)
E_al = Low(e_addr)
I2cstart
I2cwbyte E_ctlw
I2cwbyte E_ah
I2cwbyte E_al
I2cstart
I2cwbyte E_ctlr
I2crbyte E_dat , Nack
I2cstop '
End Sub
'///////////////////////////////////////////////////////////////////////////////
$include "font\font8x8sajat.font"
Kód: Egész kijelölése
Chipselect = 1
Waitms 10
Chipselect = 0
Chipreset = 0
Waitms 50
Chipreset = 1
Waitms 50
’Ide még kellene :
Chipselect = 1
Kód: Egész kijelölése
I2cinit
E_ah = High(e_addw)
E_al = Low(e_addw)
I2cstart
I2cwbyte E_ctlw
I2cwbyte E_ah
I2cwbyte E_al
For Page_byte = 1 To Page_size
I2cwbyte Sw_dat(page_byte) 'Beírodik a ciklusszámlálónak megfelelő byte
Next Page_byte
I2cstop
E_addw = E_addw + Page_size 'Ha túlléptük az oldalméretet növeljök a címet a teleírt oldal méretével és kilépünk