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

Back to Subject List

Thread Closed: Became flame-war

???
06/23/06 11:07
Read: times


 
#118934 - LOOK AGAIN ... MODIFIED ...
Responding to: ???'s previous message
    DELAY_HIGH EQU 003H DELAY_LOW EQU 018H FLAG_0 EQU 031H FLAG_1 EQU 032H FLAG_2 EQU 033H FLAG_3 EQU 034H FLAG_4 EQU 035H FLAG_5 EQU 036H FLAG_6 EQU 037H FLAG_7 EQU 038H FLAG_INVALIDKEY EQU 039H FLAG_PUSH EQU 040H NEWKEY EQU 041H
    ORG 000H MOV SP,#050H LJMP START ORG 000BH ACALL INTERRUPT_0 RETI ORG 001BH
INTERRUPT_1:
    PUSH ACC PUSH PSW CLR TR1 MOV PSW,#00H
    ACALL KEYPRESSED; to check whether any key is pressed or not
    JNZ CALCULATE; if key is pressed then jump to calculate to check is the key pressed is valid key or the previous key is kept pressed till now
    JMP ALTER; If no key is pressed then clear the flag which check whether the previous key is kept pressed till now
CALCULATE:
    ACALL KEYPRESSED; again check whether key is pressed or not 
    JZ ALTER; if no key is pressed then jump tp clear the flags and start the TIMER 1 again
    ACALL CONVERT; if the key is pressed then check the key pressed is a valid key or not depending on the flag FLAG_INVALIDKEY
    JBC FLAG_INVALIDKEY,ALTER; if this flag is set then the key is invalid and go to ALTER 
    ACALL TIMER_0; if the key pressed is valid then jump to TIMER 0 for the debounce delay
    POP ACC
    POP PSW
    RETI
ALTER:
    CLR FLAG_PUSH
; clear this flag indicating that the previous key is not being kept pressed and the key which is pressed is now released
AGAIN:
    ACALL TIMER_1; call to timer 1 for again scanning the keys
    POP PSW
    POP ACC
    RETI
INTERRUPT_0:
    PUSH ACC
    PUSH PSW
    MOV PSW,#00H
    CLR TR0
    ACALL KEYPRESSED; chekh whhether the key is pressed or not again
    JZ ALTER_1; if not pressed then jump to ALTER 1 for clearing the flags and call to TIMER 1 agan for scanning the key's
    ACALL CONVERT ; if key is pressed check it is valid or not
    JBC FLAG_INVALIDKEY,ALTER_1; invalid key indication if this flag is set
    JB FLAG_PUSH,COMPARE ; if this flag is found set then it means that the key found to be pressed is the same key previously kept pressed
    SETB FLAG_PUSH; if FLAG_PUSH is not found to be set then it means that the valid key is a new key
    MOV NEWKEY,A; move this newkey value to the flag NEWKEY
    JMP HOME; jump to home
COMPARE:
    CJNE A,NEWKEY,CLEAR; if the FLAG_PUSH is found to be set then control comes to this statement for checking whether the key kept pressed for a long time is the previous one or not
    JMP AGAIN_1; if it is the same key kept pressed then do nothing and again call to TIMER 1 so that scanning of keys can be done again but dont clear the FLAG_PUSH flag this time because the key kept pressed has not indicated to be released till now
HOME:
    JB ACC.0,COOL_0; if these bits are ON then it means
    JB ACC.1,COOL_1; which key is pressed at this moment
    JB ACC.2,COOL_2; and accordingly jump to that 
    JB ACC.3,COOL_3; subroutine
    JB ACC.4,COOL_4
    JB ACC.5,COOL_5
    JB ACC.6,COOL_6
    JB ACC.7,COOL_7
CLEAR:
    CLR FLAG_PUSH; If the key being kept pressed is not the same previous key then it means that the previous key kept pressed has been released and this is the new key which is pressed and it is valid ... so jump to HOME
    JMP HOME
WORLD:
    MOV R0,A; if the key is pressed second time then
    MOV A,P2; make the corresponding LED OFF while all
    ORL A,R0; other LED's are not been effected at all
    XRL A,R0
    MOV P2,A
    JMP STATUS; jump to status to CLEAR the flag which indicated the key is being pressed for the 1st time or 2nd time
UNIVERSE:
    ORL A,P2; If the control comes here then it means that the key being pressed is pressed for the first time and so the corresponding LED is maked ON
    MOV P2,A
    JMP AGAIN_1
ALTER_1:
    CLR FLAG_PUSH
AGAIN_1:
    ACALL TIMER_1
    POP PSW
    POP ACC
    RET
COOL_0:
    JB FLAG_0,WORLD; if this flag is found to be set then it means the key is being pressed previously and so jump to WORLD for making OFF LED that is corresponding to this key
    SETB FLAG_0; set this flag coz the key is pressed fot the 1st time
    JMP UNIVERSE; jump to universe to make the corrersponding LED ON
COOL_1:
    JB FLAG_1,WORLD
    SETB FLAG_1
    JMP UNIVERSE
COOL_2:
    JB FLAG_2,WORLD
    SETB FLAG_2
    JMP UNIVERSE
COOL_3:
    JB FLAG_3,WORLD
    SETB FLAG_3
    JMP UNIVERSE
COOL_4:
    JB FLAG_4,WORLD
    SETB FLAG_4
    JMP UNIVERSE
COOL_5:
    JB FLAG_5,WORLD
    SETB FLAG_5
    JMP UNIVERSE
COOL_6:
    JB FLAG_6,WORLD
    SETB FLAG_6
    JMP UNIVERSE
COOL_7:
    JB FLAG_7,WORLD
    SETB FLAG_7
    JMP UNIVERSE
STATUS:
    JBC FLAG_0,AGAIN_1; flag is cleared to make it fresh key
    JBC FLAG_1,AGAIN_1
    JBC FLAG_2,AGAIN_1
    JBC FLAG_3,AGAIN_1
    JBC FLAG_4,AGAIN_1
    JBC FLAG_5,AGAIN_1
    JBC FLAG_6,AGAIN_1
    JBC FLAG_7,AGAIN_1
KEYPRESSED:
    MOV A,P1; as the PORT 1 is made as an input PORT so all the bits are high ... the key pressed bit will be low so the value is transfered to ACCUMULATOR for further processing
    CPL A; the value in ACC is complimented coz all the bits in PORT 1 are high as it is an input port
    RET
START:
    MOV IE,#08AH
    MOV TMOD,#011H
    MOV P1,#0FFH; make PORT 1 as an input port
    MOV P2,#00H
    MOV R0,#00H
    MOV R7,#00H
    CLR FLAG_0
    CLR FLAG_1
    CLR FLAG_2
    CLR FLAG_3
    CLR FLAG_4
    CLR FLAG_5
    CLR FLAG_6
    CLR FLAG_7
    ACALL TIMER_1
KEY:
    MOV A,P1
    CPL A
    JMP KEY
TIMER_0:
    MOV TL0,#DELAY_LOW
    MOV TH0,#DELAY_HIGH
    SETB TR0
    RET
TIMER_1:
    MOV TL1,#0E0H
    MOV TH1,#0B1H
    SETB TR1
    RET
CONVERT:
    CLR FLAG_INVALIDKEY; this subrountine check the validity of the key that is pressed ... and indicates it by the flag FLAG_INALIDKEY
    CJNE A,#01H,SECOND RET
SECOND:
    CJNE A,#02H,THIRD RET
THIRD:
    CJNE A,#04H,FOURTH RET
FOURTH:
    CJNE A,#08H,FIVE RET
FIVE:
    CJNE A,#010H,SIX RET
SIX:
    CJNE A,#020H,SEVEN RET
SEVEN:
    CJNE A,#040H,EIGHT RET
EIGHT:
    CJNE A,#080H,BAD RET
BAD:
    SETB FLAG_INVALIDKEY RET
;************************************************************************************************** END

List of 32 messages in thread
TopicAuthorDate
switch and LED interface problem            01/01/70 00:00      
   Duplicate thread            01/01/70 00:00      
      DIFFERENT            01/01/70 00:00      
         Still unformatted and NO comments            01/01/70 00:00      
   Mr. Andy Neil            01/01/70 00:00      
      Help            01/01/70 00:00      
      Seniors, not baby sitters            01/01/70 00:00      
         Tell it to the Teddy Bear...            01/01/70 00:00      
         comments are added ... have a look again            01/01/70 00:00      
            Formatting!            01/01/70 00:00      
            LOOK AGAIN ... MODIFIED ...            01/01/70 00:00      
               This is hopeless!            01/01/70 00:00      
                  FINAL MODIFIES CODE ... have a look            01/01/70 00:00      
                     why do you check for keys a few microsec            01/01/70 00:00      
                     Debounce scheme cannot be identified            01/01/70 00:00      
                     I had 15 minutes waiting for someone and            01/01/70 00:00      
      no way            01/01/70 00:00      
         i dont know            01/01/70 00:00      
            He responded this morning            01/01/70 00:00      
               He wiil strike again on Monday            01/01/70 00:00      
   Spaghetti code            01/01/70 00:00      
      Before (re)writing            01/01/70 00:00      
      Again            01/01/70 00:00      
      and he comkplains about the tomato sauce            01/01/70 00:00      
   What about this?            01/01/70 00:00      
   HELOOOOOOOOOO !!!...            01/01/70 00:00      
      Why are you shouting??            01/01/70 00:00      
      Pot calling kettle - Come in Kettle!            01/01/70 00:00      
      TANSTAAFL            01/01/70 00:00      
      Consensus            01/01/70 00:00      
   ????????????????????            01/01/70 00:00      
   hitting in dark            01/01/70 00:00      

Back to Subject List