Re: 89C51ED2



On Sep 6, 6:26 pm, "TT_Man" <Some...@xxxxxxxxxxxx> wrote:
">> > 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.........

My remarks inserted below


;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

I would want to check the levels on this with a scope. Reading from a
port pin on a signal that goes slowly through the 0/1 boundary may
make timing issues.


.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

Are you certain that all of your interrupts don't use up so much time
that the TI or RI can happen a second time while you are processing
the interrupt? Do you handle the case of getting both?

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

Does the main code or another interrupt touch R3?


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

Big trouble? That call is before you set the stack. The SP starts
out as 8. Does this explain any problems?


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

Why not a JB ACC.7 here? I don't see anything else done with ACC.


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 ... 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)
  • 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)

Loading