| ??? 02/20/10 14:51 Read: times |
#173357 - document what happens to ACC. Responding to: ???'s previous message |
Writing ASM code is a lot more finicky than using a High Level Language.
So it is wise to document: 1. what you pass to a function 2. what is returned by the function 3. what the function actually performs 4. what side-effects are there. e.g. is ACC or other Registers altered Only you know what your delay function does. Trace the program flow with a pencil and paper. It looks as if you may execute SUB2, but when you come back you may start doing SUB3 or SUB4. You may possibly want to:
CJNE A,#'1',NOT1
AJMP SUB1 ;go do this but not come back here
NOT1: CJNE A,#'2',NOT1
AJMP SUB2 ;go do this but not come back here
NOT2:
I also note that you are writing a bit high to turn on a transistor. As a general rule, 8051's use active-low logic. Most 8051's cannot source current only sink current. You may also notice that you have 'similar' code. If you can re-use code, it only needs debugging once.
CJNE A,#'1',NOT1
MOV A,#(1<<0)
AJMP SUBX ;go do this but not come back here
NOT1: CJNE A,#'2',NOT1
MOV A,#(1<<1)
AJMP SUBX ;go do this but not come back here
NOT2:
...
; pass bit mask in ACC
; possibly destroy ACC
;
SUBX:
MOV P2, A ;TURN ON PORT2 with masc in ACC
ACALL DELAY
MOV P2, #00h
RET
David. |
| Topic | Author | Date |
| Question on asm code | 01/01/70 00:00 | |
| 2 things | 01/01/70 00:00 | |
| some change | 01/01/70 00:00 | |
| even simpler | 01/01/70 00:00 | |
| thanks for the simplified | 01/01/70 00:00 | |
| yes, and even simpler | 01/01/70 00:00 | |
| code and comments | 01/01/70 00:00 | |
| ;; ?? | 01/01/70 00:00 | |
| thanks for the explanation | 01/01/70 00:00 | |
| Short? | 01/01/70 00:00 | |
| need some helps | 01/01/70 00:00 | |
| Your circuit should work | 01/01/70 00:00 | |
| Getting Rid Of Power On Relay Energize | 01/01/70 00:00 | |
Thank You All | 01/01/70 00:00 | |
| document what happens to ACC. | 01/01/70 00:00 | |
| noticed and questions | 01/01/70 00:00 |



