Plz Help!!!! Explain Me If Possible...

Thread Starter

varunt

Joined Apr 14, 2008
6
HI.. CAN U EXPLAIN ME THE FOLLOWING PROGRAM...



*#cpu 8051 Tiny
*
* DDS MICRO-C 8031/51 Startup Code & Runtime library for TINY model
*
* Copyright 1991-1999 Dave Dunfield
* All rights reserved.
*
ORG $0000 $0800 CODE Starts here (Normally in ROM)
LJMP START

ORG $0003
LJMP SERVICE_EX0

ORG $000B
LJMP SERVICE_TIMER0_INTERRUPT


* Fixed memory locations for alternate access to the R0-R7 register bank.
* If you are NOT useing BANK 0, these equates must be adjusted.
?R0 EQU 0 Used for "POP" from stack
?R1 EQU ?R0+1 Used to load index indirectly
?R2 EQU ?R0+2 "" "" "" ""
?R3 EQU ?R0+3 Used by some runtime lib functions
?R4 EQU ?R0+4
?R5 EQU ?R0+5
?R6 EQU ?R0+6
?R7 EQU ?R0+7
*
* Startup code entry point
*
* If you are NOT using interrupts, you can reclaim 50 bytes
* of code space by removing the following TWO lines.
* AJMP *+$0032 Skip interrupt vectors
* DS $0032-2 Reserve space for interrupt vectors
*
START EQU *
MOV SP,#?stk-1 Set up initial stack
ORL TMOD,#%00000001 set timer 0 to be counter 16 bit
SETB IE.7 $AF EA
SETB IE.1 $A9 ET0 Enable timer 0 interrupt
SETB TCON.4 start timer 0


LCALL main Execute program
SJMP * JUMP HERE

* EXIT to MON51 by calling the 'timer1' interrupt vector ($001B).
* This causes MON51 to think that a single-step operation has just
* completed, and therefore it saves the user registers, and performs
* a context switch back to the monitor.
*
* When using 2K addressing (CC51: -Z option, ASM51: -A option) this LCALL
* may fail "Out of range" because it gets translated to ACALL, and $001B
* may not be in the same 2K block as your program. Since 2K devices cannot
* support a debugger, change the ORG to $0000, and ...<continue below>...
*
* If you are NOT using MON51 (or MONICA which works the same), you will
* need to change this to whatever action you desire when main() returns.
* Suggestions: 1:freeze (SJMP *) 2:Restart (SJMP *&$FF00)
exit LCALL $001B Call Timer-1 interrupt
SJMP exit Incase he go's again

**************************** My code *********************************

SERVICE_TIMER0_INTERRUPT EQU *
PUSH ACC
PUSH PSW
MOV TH0,#$FF reload timer 0 for ms
MOV TL0,#$00
INC tick

MOV A,tick
CJNE A,#100,RIGHT
MOV tick,#0

RIGHT
CLR C
SUBB A,speedright
JC ON_RIGHT
CLR P1.0
SJMP LEFT

ON_RIGHT
SETB P1.0

LEFT
MOV A,tick
CLR C
SUBB A,speedleft
JC ON_LEFT
CLR P1.1
SJMP EXIT_I

ON_LEFT
SETB P1.1

EXIT_I
POP PSW
POP ACC
RETI

SERVICE_EX0 EQU *
INC cputick
RETI


$SE:1
*#map1 Segment 1, initialized variables
$SE:2
*#map2 Segment 2, internal "register" variables
ORG $0008 Internal ram ALWAYS starts here

tick DS 1
speedright DS 1
speedleft DS 1
cputick DS 1
 

Thread Starter

varunt

Joined Apr 14, 2008
6
Plz Help!!
Hey,

Can U Plz Tell Me The Use Of "$" And "#" Symbol While Programing In 89c2051.

And Can U Let Me Know The Use Of Instructions "ds" And "org"

While Reffering A Program, I M Getting Stuck At Following Instruction :

Org $3000
 

Papabravo

Joined Feb 24, 2006
22,116
# - the number sign - means that a literal constant follows
$ - the dollar sign - indicates that the radix of the constant is 16. So what follows will be a hexadecimal constant.

ds - this pseudo instruction reserves bytes of storage. How many is determined by the constant to the right of the ds operation.
org - sets the value of the Program Counter.
 
Top