Dear Sirs,
I am a 2nd year Instrumentation student. I am very keen
on studying microcontrollers n so I bought a kit for $9/-.
The kit has a Philips P89V51RD2BN chip, a 12.0 Mhz Xtal
and a Max 232 chip in the Serial circuitry. P0, P1 n P2
are taken to VCC thru 4.7K res. banks.
My aim for this holiday session is to load a program on to
the chip. I have Philips "Flash Magic" and have got Flash
to communicate with the chip i.e. it read the chip signature.
I have very limited sources for studying assembly
programming and so I have not yet got down to writing
programs myself. I have 2 ready programs taken from
Myke Predko's book "Programming n Customizing 8051 MC".
Program 1 is a State Machine program written for a
DS80C320 chip (I understand that this chip is just a faster
version of the 80C51 but I'm not sure if I could just load
this program onto my chip and see it run). I request you
to alter this program for my chip (P89V51RD2BN) if
necessary and also re-write the Dlay to give me 5sec delays.
I've written in a delay from my limited understanding
but it's not slow enough.
Program 2 is a pseudo random generator for Christmas
lights written for a DS87C520 chip. Again cud u please
alter the program if necessary for my chip.
Once I get these programs running on my chip I will
have achieved my initial holiday target, I then intend
to get into assembly programming, hopefully I will
soon be writing efficient programs myself.
I am using UMPS (an IDE) but they have not included
the Philips chips in their library hence I could not
check this out for myself. Would you know of a "free"
demo IDE for the Philips chips (P89V51RD2BN included).
Also is there any material I can use to study assembly
for Microcontrollers (everything seems to be written for
the 80x86 series).
Many thanks.
Hope to hear from you soon,
Lionel Craig D'Silva
PS - Attached are the two programs
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; PROG1 - State Machines
;
; This Application Demonstrates how a set of traffic lights could
; be controlled in the 8051 using a State Machine and Table Jumps.
;
; This program will run in the UMPS simulator for a DS80C320.
;
; Myke Predko
; 98.02.18
;
; Hardware Notes:
; This program is only meant to run on the Simulator
; It could be modified to run in hardware by making "Dlay" more than
; a dummy routine
;
; North/South Lights
; NSGreen - P1.0
; NSYellow - P1.1
; NSRed - P1.2
;
; East/West Lights
; EWGreen - P1.4
; EWYellow - P1.5
; EWRed - P1.6
; Variable Declarations
State EQU 020h ; The Current State Variable
StateDir EQU 004h ; The Direction Bit - Bit 4 of 020h
; Bit States
; Bit 4: _EW/NS - This Bit is Set for NS, Reset for East/West
; Low Nybble: Current Light State
; R0 is used as an Index Pointer to Array
; R1 is used as the Source Location for the Control Store Table
Array EQU 0B0h ; Define Array in Scratchpad RAM
; Mainline
org 0 ; Execution Starts Here
mov State,#0 ; Start with E/W "Red"
mov P1,#0BBh ; Turn on the Red Lights
mov DPTR,#LightTable ; Have the DPTR Point to the
Loop: ; Loop Back Here for Each Light State
acall NextLight
sjmp Loop
NextLight: ; Now, Turn Off the Current Light and Turn
; The Next One
mov A,State ; Get the State x2
rl A
anl A,#0DFh ; Clear the _EW/NS Flag
jmp @A+DPTR ; Jump to the Appropriate Response
LightTable:
sjmp GreenLight ; Currently Have a Red Light, Go to Green
sjmp YellowLight ; Currently Have a Green Light, Go to Yellow
sjmp RedLight ; Currently Have a Yellow Light, Go to Red
GreenLight: ; Turn the Light to Green
mov A,#0EBh ; Are We turning on the E/W Light
jnb StateDir,GL_EW
mov A,#0BEh ; No - Do the North South
GL_EW:
mov P1,A ; Now, Turn on the Light
mov R0,#6 ; Delay for a Green Light Period
acall Dlay
inc State ; Increment to the Next State
ret
YellowLight: ; Turn the Light to Yellow
mov A,#0DBh ; Are We turning on the E/W Light
jnb StateDir,YL_EW
mov A,#0BDh ; No - Do the North South
YL_EW:
mov P1,A ; Now, Turn on the Light
mov R0,#6 ; Delay for a Yellow Light Period
acall Dlay
inc State ; Increment to the Next State
ret
RedLight: ; Turn the Light to Red
mov P1,#0BBh ; Turn Everything to Red
mov R0,#6 ; Delay for a Red Light Period
acall Dlay
mov A,#0F0h ; Reset back to Green for the Next Light
anl State,A
cpl StateDir ; Change Which Light is Active
ret
Dlay: ; Delay a Set amount of Time for Each Light
mov R0,#6
mov R2,#255
DlayLoop:
djnz R0,DlayLoop
djnz R2,DlayLoop
ret
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
; PROG2 - Psuedo-Random LED Display
;
; This Application Displays a psuedo Random 16 Bit Number
; Generated by a single Tap CRC at Bit 10 (XOR'd with Bit 15).
;
; The LSB is Bit 10 ^ Bit 15
; = ( !Bit 10 & Bit 15 ) | ( Bit 10 & !Bit 15 )
;
; This algorithm will give about 61K Different Patterns
;
; A Quarter Second Delay is placed between Every New LED Pattern.
;
; This display is suitable for Doing Christmas Lights.
;
; Myke Predko
; 98.02.22
;
; Hardware Notes:
; 80C520 Running at 4 MHz
; P1.0-7 Connected to LEDs
; P3.0-7 Connected to LEDs
; Variable Declarations
; Just "A" is used for this program.
; Mainline
org 0 ; Execution Starts Here
Loop: ; Loop Here Forever
mov C,P3.2 ; Get the Bits to AND Together
cpl PSW.7 ; Invert Bit 13
anl C,P3.7 ; AND it with Bit 15
mov ACC.0,C ; Save it for Later
mov C,P3.7 ; Now, Get Bit13 * !Bit15
cpl PSW.7
anl C,P3.2
orl C,ACC.0 ; OR Both Values Together in Carry
mov A,P1 ; Now, Update the 16 LED Display
rlc A
mov P1,A
mov A,P3
rlc A
mov P3,A
acall Dlay ; Leave Like this for 500 msec
sjmp Loop ; Loop Around Again
Dlay: ; Delay 263 msec
clr A
mov B,#0 ; Longest Delay Possible
DlayLoop: ; Loop Here for 500 msec
djnz ACC,DlayLoop ; Inside Loop
djnz B,DlayLoop
ret
I am a 2nd year Instrumentation student. I am very keen
on studying microcontrollers n so I bought a kit for $9/-.
The kit has a Philips P89V51RD2BN chip, a 12.0 Mhz Xtal
and a Max 232 chip in the Serial circuitry. P0, P1 n P2
are taken to VCC thru 4.7K res. banks.
My aim for this holiday session is to load a program on to
the chip. I have Philips "Flash Magic" and have got Flash
to communicate with the chip i.e. it read the chip signature.
I have very limited sources for studying assembly
programming and so I have not yet got down to writing
programs myself. I have 2 ready programs taken from
Myke Predko's book "Programming n Customizing 8051 MC".
Program 1 is a State Machine program written for a
DS80C320 chip (I understand that this chip is just a faster
version of the 80C51 but I'm not sure if I could just load
this program onto my chip and see it run). I request you
to alter this program for my chip (P89V51RD2BN) if
necessary and also re-write the Dlay to give me 5sec delays.
I've written in a delay from my limited understanding
but it's not slow enough.
Program 2 is a pseudo random generator for Christmas
lights written for a DS87C520 chip. Again cud u please
alter the program if necessary for my chip.
Once I get these programs running on my chip I will
have achieved my initial holiday target, I then intend
to get into assembly programming, hopefully I will
soon be writing efficient programs myself.
I am using UMPS (an IDE) but they have not included
the Philips chips in their library hence I could not
check this out for myself. Would you know of a "free"
demo IDE for the Philips chips (P89V51RD2BN included).
Also is there any material I can use to study assembly
for Microcontrollers (everything seems to be written for
the 80x86 series).
Many thanks.
Hope to hear from you soon,
Lionel Craig D'Silva
PS - Attached are the two programs
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
; PROG1 - State Machines
;
; This Application Demonstrates how a set of traffic lights could
; be controlled in the 8051 using a State Machine and Table Jumps.
;
; This program will run in the UMPS simulator for a DS80C320.
;
; Myke Predko
; 98.02.18
;
; Hardware Notes:
; This program is only meant to run on the Simulator
; It could be modified to run in hardware by making "Dlay" more than
; a dummy routine
;
; North/South Lights
; NSGreen - P1.0
; NSYellow - P1.1
; NSRed - P1.2
;
; East/West Lights
; EWGreen - P1.4
; EWYellow - P1.5
; EWRed - P1.6
; Variable Declarations
State EQU 020h ; The Current State Variable
StateDir EQU 004h ; The Direction Bit - Bit 4 of 020h
; Bit States
; Bit 4: _EW/NS - This Bit is Set for NS, Reset for East/West
; Low Nybble: Current Light State
; R0 is used as an Index Pointer to Array
; R1 is used as the Source Location for the Control Store Table
Array EQU 0B0h ; Define Array in Scratchpad RAM
; Mainline
org 0 ; Execution Starts Here
mov State,#0 ; Start with E/W "Red"
mov P1,#0BBh ; Turn on the Red Lights
mov DPTR,#LightTable ; Have the DPTR Point to the
Loop: ; Loop Back Here for Each Light State
acall NextLight
sjmp Loop
NextLight: ; Now, Turn Off the Current Light and Turn
; The Next One
mov A,State ; Get the State x2
rl A
anl A,#0DFh ; Clear the _EW/NS Flag
jmp @A+DPTR ; Jump to the Appropriate Response
LightTable:
sjmp GreenLight ; Currently Have a Red Light, Go to Green
sjmp YellowLight ; Currently Have a Green Light, Go to Yellow
sjmp RedLight ; Currently Have a Yellow Light, Go to Red
GreenLight: ; Turn the Light to Green
mov A,#0EBh ; Are We turning on the E/W Light
jnb StateDir,GL_EW
mov A,#0BEh ; No - Do the North South
GL_EW:
mov P1,A ; Now, Turn on the Light
mov R0,#6 ; Delay for a Green Light Period
acall Dlay
inc State ; Increment to the Next State
ret
YellowLight: ; Turn the Light to Yellow
mov A,#0DBh ; Are We turning on the E/W Light
jnb StateDir,YL_EW
mov A,#0BDh ; No - Do the North South
YL_EW:
mov P1,A ; Now, Turn on the Light
mov R0,#6 ; Delay for a Yellow Light Period
acall Dlay
inc State ; Increment to the Next State
ret
RedLight: ; Turn the Light to Red
mov P1,#0BBh ; Turn Everything to Red
mov R0,#6 ; Delay for a Red Light Period
acall Dlay
mov A,#0F0h ; Reset back to Green for the Next Light
anl State,A
cpl StateDir ; Change Which Light is Active
ret
Dlay: ; Delay a Set amount of Time for Each Light
mov R0,#6
mov R2,#255
DlayLoop:
djnz R0,DlayLoop
djnz R2,DlayLoop
ret
-----------------------------------------------------------------------------------------------
-----------------------------------------------------------------------------------------------
; PROG2 - Psuedo-Random LED Display
;
; This Application Displays a psuedo Random 16 Bit Number
; Generated by a single Tap CRC at Bit 10 (XOR'd with Bit 15).
;
; The LSB is Bit 10 ^ Bit 15
; = ( !Bit 10 & Bit 15 ) | ( Bit 10 & !Bit 15 )
;
; This algorithm will give about 61K Different Patterns
;
; A Quarter Second Delay is placed between Every New LED Pattern.
;
; This display is suitable for Doing Christmas Lights.
;
; Myke Predko
; 98.02.22
;
; Hardware Notes:
; 80C520 Running at 4 MHz
; P1.0-7 Connected to LEDs
; P3.0-7 Connected to LEDs
; Variable Declarations
; Just "A" is used for this program.
; Mainline
org 0 ; Execution Starts Here
Loop: ; Loop Here Forever
mov C,P3.2 ; Get the Bits to AND Together
cpl PSW.7 ; Invert Bit 13
anl C,P3.7 ; AND it with Bit 15
mov ACC.0,C ; Save it for Later
mov C,P3.7 ; Now, Get Bit13 * !Bit15
cpl PSW.7
anl C,P3.2
orl C,ACC.0 ; OR Both Values Together in Carry
mov A,P1 ; Now, Update the 16 LED Display
rlc A
mov P1,A
mov A,P3
rlc A
mov P3,A
acall Dlay ; Leave Like this for 500 msec
sjmp Loop ; Loop Around Again
Dlay: ; Delay 263 msec
clr A
mov B,#0 ; Longest Delay Possible
DlayLoop: ; Loop Here for 500 msec
djnz ACC,DlayLoop ; Inside Loop
djnz B,DlayLoop
ret