For at skrive til et LCD-display har jeg lavet noget adresse- og datadekodning på P0 og P2. Ligemeget hvad jeg skriver ud til adressen F0xx er alle portben høje, men der er aktivitet på ALE.
Som jeg har forstået det, skal der ikke indstilles til externe data ved hjælp af nogle ben på IC-en! Hvad skal jeg gøre for at læse/skrive data vha en extern adresse?
The ADuC831 provides 62 kBytes of Flash/EE program memory
to run user code. The user can choose to run code from this
internal memory or run code from an external program memory.
If the user applies power or resets the device while the EA pin is
pulled low, the part will execute code from the external program
space, otherwise the part defaults to code execution from its
internal 62 kBytes of Flash/EE program memory. Unlike the
ADuC812, where code execution can overflow from the internal
code space to external code space once the PC becomes greater
than 1FFFH, the ADuC831 does not support the rollover from
F7FFH in internal code space to F800H in external code space.
Instead the 2048 bytes between F800H and FFFFH will appear
as NOP instructions to user code.
Du skal enten køre dit display med alm. I/O pins, eller bruge extern flash også.
Jeg vil foreslå du bruger I/O pins til at kontrollere displayet, hvis du har lyst, har jeg kode der må passe rimelig godt, den kører i al fald på aduc848 og 836
"Kasper" skrev i en meddelelse news:474ef270$0$90273$ snipped-for-privacy@news.sunsite.dk...
Det var dog irriterende! Så vil jeg vælge at bruge portene i stedet, jeg har eller snøret al hardvaren til dekodningen op på protoboard, men det kan da pilles af igen.
Og jatak, du må gerne sende mig din kode; man siger vel aldrig nej til gratis hjælp.
"Kurt G" skrev i en meddelelse news:474e8bda$0$90275$ snipped-for-privacy@news.sunsite.dk...
Jo, det tror jeg det er.
Sådan kan det jo gå.
Det lyder underligt. Har du sat en latch på port 0 ? Hvordan måler du denne spænding (voltmeter/scop) ?
Sådan mener jeg også det er.
Jeg mener at 8051's arkitektur gør at hvis du addresserer extern RAM, skal du bruge:
(koden her kopierer fra et sted i ekstern RAM til et andet) void io2ram(xdata U8 *dst, xdata U8 *src, U16 size) { while(size--) { *dst++ = *src++; } } Det der er vigtigt her er at du bruger xdata. (jeg kan ikke huske hvordan man gør det med Keil) Du kan læse om de forskellige områder her:
formatting link
Dokumentationen kommer fra SDCC, der er en gratis compiler til 8051. Jeg har selv haft meget glæde af denne compiler, da den er gratis og laver noget fornuftig kode. - du kan evt læse dens dokumentation igennem.
ElectronDepot website is not affiliated with any of the manufacturers or service providers discussed here.
All logos and trade names are the property of their respective owners.