Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
06/01/06 13:55
Modified:
  06/01/06 14:34

Read: times


 
#117505 - formatted
Responding to: ???'s previous message
It is also a good practice to use symbols - just as constants in high level language (HLL - e.g. C).

Also it is a good idea to preserve the register area (at least 0-7 for register bank 0) for future use.
Also, address 8 is the first byte which would be

A hardware problem: you write your output value into P3 where you read from your input value, that would collide. You also need some strobe to let the PC know the output value is written. Anyway, I'd recommend you later to connect the PC via serial port.

You also made the (common) error of forgetting the '#' several times (underlined).


Some of the changes, highlighted. Not tested nor comments corrected, that's up to you. Do you have a '51 simulator?

	

        DSEG  AT  30h    ;this tells the compiler to start placing data from 30h
NrValues    EQU  8       ;const nrvalues=8;
OldValues:  DS   NrValues       ;reserve space for OldValues
RPin:       DS   1       ;reserve space for RPin (a counter)
AStore:     DS   1       ;reserve space where A will be stored temporarily

        CSEG             ;now we tell the compiler that we are going to write code
        ORG 0
	MOV P3,#255	;Making P3 Output Port

	MOV OldValues+0,#255	;Initilising memory locations for storing output 
	MOV OldValues+1,#255	;from the 8 latches
	MOV OldValues+2,#255	;and loading them with initial values
	MOV OldValues+3,#255	;which indicate all signals are low
	MOV OldValues+4,#255
	MOV OldValues+5,#255
	MOV OldValues+6,#255
	MOV OldValues+7,#255
;three nested loops needed: one for the bits, one for the 8 bytes, one which repeats the all infinitely
LOOP:
	MOV R0,#OldValues+7  ;location R0 is Rlatch
POLL:
        MOV A,R0
        ADD A,#-OldValues   ;calculate latch Nr
        MOV P1,A            ;set the latch Nr for the decoder
        MOV RPin,#8	;there are 8 bits in a byte
	MOV A,P3
	ANL A,@R0	;ANDing A with the locations 8 to 1 which will store CPL of P3
CHKPIN:	RLC A		;Get the Pins thatwent form LOW to HIGH
	JC WRITE
GETBAK:	DJNZ RPin,CHKPIN
	MOV A,P3	;Since the output is latched, it has not changed since last time
	CPL A
	MOV @R0,A	;Moving the data of the respective latches to the respective registers
; following line not needed if it is initialised at the beginning of the loop
;	MOV 10,#8	;ReInitialising Rpin value as 8 for next loop
;following line replaced by 2 lines as R0 won't point into 1..8 any more
;	DJNZ R0,POLL
        DEC   R0
        CJNE R0,#OldValues-1,POLL
;again no need
;	MOV R0,#8	;ReInitilising value of Rlatch as 8 for next loop
     JMP LOOP       ;repeat infinitely this loop

WRITE:	
        MOV AStore,A	;storing the value of A in 20 for further use
	MOV A,R0
	ADD A,R0	;Adding contents of R0 to A seven more times
	ADD A,R0	;I read that using MUL always clears the flag
	ADD A,R0	;And I dont want to do that
	ADD A,R0
	ADD A,R0
	ADD A,R0
	ADD A,R0
	ADD A,10
	MOV P3,A
	MOV A,AStore	;Returning A its original Value
	JMP GETBAK
	END

JW

List of 43 messages in thread
TopicAuthorDate
Another standard problm in Assembly Lang            01/01/70 00:00      
   many ways            01/01/70 00:00      
      lookup table?            01/01/70 00:00      
         yup            01/01/70 00:00      
            hummmm            01/01/70 00:00      
   algorithm!            01/01/70 00:00      
   OK            01/01/70 00:00      
      forget the lookup table            01/01/70 00:00      
         no language dependency            01/01/70 00:00      
            abstraction            01/01/70 00:00      
            Direct Test            01/01/70 00:00      
               did you take it at Grossmont?            01/01/70 00:00      
               Wrong mark            01/01/70 00:00      
   just wonder            01/01/70 00:00      
      homework            01/01/70 00:00      
         No not homework            01/01/70 00:00      
         Bit 3?            01/01/70 00:00      
            Depends            01/01/70 00:00      
               reverse bit numbering            01/01/70 00:00      
                  reverse bit numbering: mirror            01/01/70 00:00      
               It's logical...            01/01/70 00:00      
            Thks            01/01/70 00:00      
               Unconventional            01/01/70 00:00      
                  Yes, now I know            01/01/70 00:00      
                     oops            01/01/70 00:00      
                     Radix notation            01/01/70 00:00      
   Why "Standard"?            01/01/70 00:00      
      give it in C            01/01/70 00:00      
         Finally Some Code            01/01/70 00:00      
            formatted            01/01/70 00:00      
               Much nicer            01/01/70 00:00      
                  OH boy            01/01/70 00:00      
                     No I havent            01/01/70 00:00      
               edited            01/01/70 00:00      
                  No Prob            01/01/70 00:00      
               Yes.            01/01/70 00:00      
                  try & ask            01/01/70 00:00      
                     OK            01/01/70 00:00      
                     Many Questions            01/01/70 00:00      
                        Q&A            01/01/70 00:00      
                           Man! That just made my day!            01/01/70 00:00      
               Revised Code            01/01/70 00:00      
   hi abhishek!!!            01/01/70 00:00      

Back to Subject List