On Sun, 23 Aug 2009 18:49:10 +0200, "Lodewicus Maas" <(E-Mail Removed)>
wrote:
NOTE ==> I added comp.arch.embedded and also set the follow-ups there.
The c.a.e group has significantly more traffic that a.m.8, particularly
since so many usenet providers have dropped all alt groups.
>What is the best way to study programming the AT89S52 ?
Atmel's programmer for this part (which can also be used with their AVR
chips but see[*]) is the AVRISP-2 (for example, at
<http://search.digikey.com/scripts/DkSearch/dksus.dll?Cat=2621667&keywords=avrisp>)
The programmer is run through Atmel's AVR Studio (for their AVR chips).
Other than the chip itself, what else you need kind of depends on what
you have laying around. A minimum system would be a breadboard, power
supply, and clock plus a few passives.
A 5-volt linear regulator (7805) plus a 9 V battery or unregulated 9 V
DC wall wart (plus the usual few passives) is sufficient to power it.
If you need a clock, recommend a canned "clock oscillator" instead of a
crystal; they're simpler to interface, fewer quirks. 24 MHz is common;
29.4912 MHz divides nicely for standard serial baud rates.
But you could also go with an RC oscillator.
>I'm looking at the below - Atmel 89S52 study Experiment Development Demo
>Board - which is also sold on Ebay for around $139 which is a lot of money
>but will definately have a good ROI. I don't want to buy the Board if there
>is better ways of getting grips of the Assembly language programming code.
A recommended "Step 1" is just to toggle a particular I/O pin in an
endless loop. This looks simple but to get there requires getting a
handle on basic architecture (what needs to be done to initialize?),
the chip's registers (how to talk to the I/O pins?), assembling or
compiling to loadable code, loading the code, and getting the chip to
actually run.
Pseudocode
start: initialization stuff
outer_loop: toggle I/O pin
set counter to 0
inner_loop: add 1 to counter
if counter less than loop_max
then goto inner_loop:
else goto outer_loop:
Step 1.1 would be to toggle the I/O pin again, but this time using one
of the chip's built-in timers. Set it to timeout at, say, a 2 Hz rate
and toggle the I/O pin every time the timer fires.
start: initialization
outer_loop if timer_event
then reset timer_event
toggle I/O pin
goto outer_loop:
timer_interrupt_service_routine:
set timer_event
This gets you into how to setup and service an interrupt.
Once you're to that point, everything else is (relatively) easy.
>I was thining of maybe a software simulator or such which can maybe help -
>if something like this exists. There is one on Ebay - PICKIT 1 Demo Board
>(6LEDs) Based On PIC 12F629 - which is only for the 12F629. Is there maybe
>something like this for the AT89XXX Series ?
Software simulators are dangerous unless they are 100% cycle-to-cycle
identical to the behavior of the silicon. They're kind of useful to help
in understanding assembler syntax, stepping through a couple of lines to
see if it's what was expected. But for simulating a whole
microcontroller? No thanks.
>There is a lot of PDF's on the internet, but I need something more practical
>where I can trial-and-error as I go.
The nice thing about a chip and a breadboard is that you can attach
whatever you want to whatever you want (within reason).
For dev boards, the least expensive one out there looks like
<http://microcontrollershop.com/product_info.php?cPath=109_60&products_id=3438>
which is only US$4.90 (yup, less than 5 bucks). They also have a $7
programmer (real serial port required) and $2 regulator.
[*] Regarding the AVR ISP and 89S52 programming. The AVRISP does work on
both but it's complicated by the opposite polarities on the AVRs and
89S52 reset line. If it's used between the two families, it might (at
least on the original serial port AVR ISP) not reset properly for the
first programming cycle when changing to the 'other' chip family. No
worries, just do it again and it should work.
--
Rich Webb Norfolk, VA
|