Re: 89C51ED2




">> > Now why does my code always start with an initialisation procedure for
variables
and the 8051 special function registers function I wonder ?

Mine usually starts:

LJMP Startup
.........................
StartUp:
MOV SP,#MainStack
MOV P1,#0FFH
MOV P2,#0FFH
MOV P3,#0FFH

WTF is that supposed to do ?

Graham

Set the stack pointer to where you want it to be- #mainStack
Set ports 1,2 and 3 to 0xFF
How hard is that?
BTW my text code didn't get attached in a previous post. So here are some
segments of it......sorry it's long.........

;12 MHz

;CONSTANTS

;SOUND ADDRESSES

..EQU EMPTYS,H'2000 ;"NO ENERGY" will be replaced with new version

..EQU WARN01,H'4622 ;"WARNING" will now be good shot

..EQU HITSND,H'5D18 ;"YOU ARE HIT"

..EQU GOSND,H'85FC ;"GO"

..EQU GUNSND1,H'96A5 ;GUN SOUND1

..EQU GUNSND2,H'D4D9 ;GUN SOUND2

..EQU GUNSND3,H'E5CF ;GUN SOUND3

..EQU GUNSND4,GUNSND3 ;GUN SOUND4

..EQU GAMEND,H'ADF7 ;"GAME OVER"

..EQU BPS524,H'89 ;@16 MHZ = 61, @12 MHZ = 89, @11.0592=92

..EQU BPS600,H'98 ;@16 MHZ = 75, @12 MHZ = 98, @11.0592=A0

..EQU BPS1600,H'D9 ;@16 MHZ = CC, @12 MHZ =D9, @11.0592=DC

..EQU INT100,H'99 ;@16 MHZ = 77, @12 MHZ = 99,@ 11.0592= A4

..EQU CKFREQ,H'BF ;@16 MHZ = FF, @12 MHZ = BF

..EQU DEFID,H'FF ;INVALID GUN ID

..EQU DEFTCD,H'ff ;15 MINUTES DEFAULT TIME CODE

..EQU DEFGMF,H'00 ;TEAM DEFAULT GAME STYLE

..EQU DEFSTS,H'FF ; DEFAULT UNLIMITED SHOTS

..EQU DEFLVS,H'FF ; DEFAULT UNLIMITED LIVES

..EQU DEFINV,H'02 ;INVINCIBLE FOR 13 TO 18.5 SECONDS

..EQU DEFDEL,H'00 ;1 MINUTE INITIAL DELAY

..EQU SPSTRT,H'19 ;STACK POINTER START LOCATION

;BIT CONSTANTS

..EQU BAKLED,P3.7 ;BACK LEDS

..EQU SCL,P3.6 ;NOVA-RAM CLOCK BIT CPU PIN 16

..EQU SDA,P3.5 ;NOVA-RAM DATA BIT CPU PIN 15

..EQU DATA,P3.4 ;LED DATA BIT CPU PIN 14

..EQU CLCK,P3.5 ;LED DATA BIT CPU PIN 15

..EQU TRGGER,P3.3 ;TRIGGER

..EQU LASER,P3.2 ;LASER

..EQU TXD,P3.1 ;I/R OUTPUT

..EQU DFLAG,PSW.5 ;DOWNLOAD FLAG

..EQU STFLAG,PSW.1 ;START TRIGGER FLAG

..EQU GFLAG,B.7 ;GAME FLAG, 1=GAME OVER, 0=GAME ON

..EQU TFLAG,B.6 ;TRIGGER FLAG, 1=TRIGGER PULLED

..EQU SFLAG,B.5 ;START FLAG, 1=DURING START DELAY

..EQU LFLAG,B.4 ;LOW FLAG, 1=LESS THAN 10 SHOTS LEFT

..EQU EFLAG,B.3 ;EMPTY FLAG, 1=NO ENERGY

..EQU HFLAG,B.2 ;HIT FLAG, 1=BEEN HIT

..EQU OTFLAG,B.1 ;OLD TRIGGER STATUS FLAG

..EQU IFLAG,B.0 ;INVINCIBLE FLAG, 1=INVINCIBLE

..EQU FLAGS,B ;ALL THE ABOVE FLAGS

;BYTE VARIABLES

..EQU TXCNTR,H'08 ;TX BUFFER COUNTER

..EQU TNFREQ,H'09 ;TONE FREQ

..EQU TNLEN,H'0A ;LENGTH OF BEEPS

..EQU FRQCTR,H'0B ;FREQUENCY COUNTER FOR TONE

..EQU BPNUM,H'0C ;NO OF BEEPS

..EQU DELSIX,H'0D ;SIX SECOND DELAY COUNTER

..EQU RXPREV,H'0E ;PREVIOUSLY RECEIVED IR BYTE

..EQU RXLAST,H'0F ;MOST RECENTLY RECEIVED BYTE

..EQU LEDTIM,H'10 ;256 mS LED CLOCK COUNTER

..EQU LEDRFR,H'11 ;REFRESH 256 mS LED CLOCK

..EQU RXCNTR,H'12 ;RX BUFFER COUNTER

..EQU R13,H'13 ;R13

..EQU R14,H'14 ;R14

..EQU R15,H'15 ;R15

..EQU LEDByte,R15

..EQU DELAYL,H'16 ;DELAY LSB

..EQU DELAYM,H'17 ;DELAY MSB

..EQU CTR100,H'18 ;DELAY REGISTER

..EQU GUNID,H'30 ;GUN ID

..EQU GAMESM,H'31 ;GAMES PLAYED MSB

..EQU GAMESL,H'32 ;GAMES PLAYED LSB

..EQU TIMCOD,H'33 ;TIME CODE 6.5 SECONDS

..EQU SHOTS,H'34 ;SHOTS PER RE-ENERGISE

..EQU LIVES,H'35 ;LIVES

..EQU INVRST,H'36 ;INVINCIBLE TIME CODE RESET VALUE

..EQU DLTIME,H'37 ;LED TIMER

..EQU GMFLAG,H'38 ;GAME FLAG $80 = SOLO $ = TEAM

..EQU SHTSDN,H'39 ;SHOTS DOWN COUNTER

..EQU SHOTSM,H'3A ;SHOTS FIRED MSB

..EQU SHOTSL,H'3B ;SHOTS FIRED LSB

..EQU REENGS,H'3C ;RE-ENERGISES NOW GOOD SHOT FLAG

..EQU LIVSDN,H'3D ;LIVES DOWN COUNTER

..EQU INVCTR,H'3E ;INVINCIBLE TIME CODE COUNTER

..EQU GUNSOUND,H'3F ;

..EQU PCON,H'87 ;POWER CONTROL REGISTER


..EQU EECON,H'0D2 ;EEPROM SFR

..EQU AUXR1,H'0A2

..EQU DAC,P1 ;DIGITAL TO ANALOGUE COUNTER

..ORG H'0000

AJMP START ;GOTO START

..DB " V9.3S" ;VERSION NUMBER

..ORG H'000B

AJMP TIMINT ;100 uS REAL TIME INTERRUPT

..ORG H'0013

AJMP TRGINT ;TRIGGER INTERRUPT

..DB "MINIGUN"

..ORG H'0023 ;SERIAL PORT INTERRUPT

JNB TI,NOTTXI

AJMP TXINT ;TX INTERRUPT

NOTTXI: AJMP RXINT ;RX INTERRUPT

;****************************************************************************************************



DoAudio: MOV DAC,R3 ;last value

INC DPTR ;POINT TO NEXT SOUND BYTE

CLR A

MOVC A,@A+DPTR ;GET IT

MOV R3,A ;STORE IT READY FOR NEXT TIME INTERRUPT

JNZ NTimer

MOV DAC,#H'7F ;dac = 1/2 vref out/

SJMP NTimer

;

;

;

TIMINT: PUSH ACC ;SAVE ACCM

PUSH PSW ;SAVE CARRY

CJNE R3,#0,DoAudio

NTIMER: DJNZ CTR100,TIMER ;GENERAL PURPOSE TIMER EVERY 100uS

MOV CTR100,DELAYL ;RELOAD LSB OF TIMER

DEC DELAYM ;DECREMENTS EVERY 100uS * DELAY LSB

TIMER: DJNZ R7,RETINT ;GAME TIMER EVERY 100uS

MOV C,TRGGER ;EVERY 25.6mS

MOV OTFLAG,C ;SAVE POSITION OF TRIGGER FOR DEBOUNCE

JB GFLAG,TIMERC ;GAME OVER, NO LEDS

JB HFLAG,TIMERC ;YOU ARE HIT, NO LEDS

TSTLED: DJNZ LEDTIM,TIMERC ;NOT YET 25.6mS * LED REFRESH, NO LEDS

JNB SFLAG,RANDOM ;LEDS, IF NOT DURING START DELAY, RANDOM

CLR DATA ;DURING START DELAY, TURN ON NEXT LED

LJMP CKLEDS ;CLOCK LEDS ROUND

;

;

;;

START: CLR LASER ;LASER OFF

LCALL RESLED ;RESET LED DISPLAYS & BACK LED

MOV SCON,#H'70 ;MODE 3 WITH PARITY SM2 = 0

ORL PCON,#H'80 ;SMOD=1 ,FE IN SMOD

MOV TMOD,#H'22 ;AUTO RELOAD T1,T0

MOV TH1,#BPS524 ;GUN IR RATE

MOV TH0,#INT100 ;100 MICRO SEC RTC INT 12 MHZ

MOV TCON,#H'50 ;RUN T1 AND T0

SETB IT1 ;TRIGGER INTERRUPT EDGE TRIGGERED

MOV SP,#SPSTRT ;SET STACK POINTER



; NOW READ GUN ID DIP SWITCH

READPORT: MOV A,P0 ;READ PORT

CPL A

MOV B,A

ANL A,#H'0C0

CJNE A,#H'C0,TRYBIT8

AJMP TESTnovreset

TRYBIT8: RLC A

JC TESTMODE ;DO SPEECH TEST

LJMP NOTTEST ;

TESTnovreset:

JB TRGGER,READPORT

LJMP SETNOV



NOTCX: LJMP NOTTEST

;

;;

;

SETNOV: MOV GUNID,#DEFID ;DEFAULT GUN ID

MOV GAMESL,#H'00 ;ZERO

MOV GAMESM,#H'00 ;GAME COUNTER

MOV TIMCOD,#DEFTCD ;DEFAULT TIME CODE

MOV GMFLAG,#DEFGMF ;DEFAULT GAME STYLE

MOV SHOTS,#DEFSTS ;DEFAULT SHOTS

MOV LIVES,#DEFLVS ;DEFAULT LIVES

MOV DLTIME,#DEFDEL

MOV INVRST,#DEFINV


MOV R0,#GUNID

MOV R1,#H'08

LCALL NOVAWT

MOV H'08,#H'46 ;FMS1

MOV H'09,#H'4D

MOV H'0A,#H'53

MOV H'0B,#H'31

MOV R0,#H'08

MOV R1,#H'04

LCALL NOVAWT

LCALL BEEP5

LJMP ASLEEP



WAIT: ORL PCON,#H'01

JB SFLAG,WAIT ;start up delay while sflag=1

JNB GFLAG,AWAKE

LJMP GMOVER

;SAY GO GO GO, RESET ALL GAME PARAMETERS

AWAKE:

lcall reset_display

MOV FLAGS,#H'00 ;CLEAR FLAGS

MOV LEDRFR,#H'01

MOV LEDTIM,LEDRFR ;SET LEDS REFRESH RATE TO FAST

CLR ES ;STOP SERIAL STUFF WHILST SAYING "GO GO GO"

MOV R4,#H'03 ;3 "GO" S

NEXTGO: LCALL GO ;SET UP "GO" SOUND

LCALL WAITSP ;WAIT TIL IT'S DONE

LCALL GODEL ;A LITTLE DELAY

DJNZ R4,NEXTGO ;REPEAT TWICE MORE

JNB STFLAG,CONTIN ;TRIGGER WAS IN WHEN F3'ED SO CONTINUE GAME

; code jumps to NXTGUN and outputs a phrase 'good shot'somewhere here as
trigger is is not 'in'

MOV R0,#H'7F

NXTGUN: CJNE R0,#GUNSOUND,CLEARIT

LJMP TRYNXGUN

CLEARIT: MOV @R0,#H'00

TRYNXGUN: DEC R0

CJNE R0,#H'37,NXTGUN ;CLEAR GUN LOGGING AREA

CONTIN: MOV R3,#H'00 ;CLEAR AUDIO OUTPUT

MOV R7,#H'00

MOV R6,#H'00

MOV R5,TIMCOD ;SET GAME TIME

ETC ETC

;

;

;

GO: MOV DPTR,#GOSND

LJMP AUDIO

;

;

;

AUDIO: CLR A

MOVC A,@A+DPTR

MOV R3,A

RET

;

;

;

WAITSP: MOV A,R3

JNZ WAITSP

RET


.



Relevant Pages

  • Re: Why is my nasm program killing itself?
    ... ORIGIN equ 8048000h ... mov bl, al ... mov eax, 1 ... push edx ...
    (alt.lang.asm)
  • Win x64 Questions
    ... r0d equ eax ... mov ecx,eax ... ; End strlen Function Code; ...
    (alt.lang.asm)
  • Re: 89C51ED2
    ... .EQU EMPTYS,H'2000;"NO ENERGY" will be replaced with new version ... .EQU DEFGMF,H'00;TEAM DEFAULT GAME STYLE ... MOV R3,A;STORE IT READY FOR NEXT TIME INTERRUPT ... JB GFLAG,TIMERC;GAME OVER, NO LEDS ...
    (sci.electronics.design)
  • Re: 89C51ED2
    ... .EQU EMPTYS,H'2000;"NO ENERGY" will be replaced with new version ... MOV R3,A;STORE IT READY FOR NEXT TIME INTERRUPT ... JB GFLAG,TIMERC;GAME OVER, NO LEDS ... LJMP CKLEDS;CLOCK LEDS ROUND ...
    (sci.electronics.design)
  • PIC 16F84A Problems
    ... simply counts up in binary and displays the count on LEDS connected directly ... ;Setup constants ... STATUS equ 03h ... movwf TRISB ...
    (sci.electronics.design)