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

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
05/28/05 19:34
Modified:
  05/28/05 19:37

Read: times


 
Msg Score: +1
 +1 Good Question
#94060 - Keil: getting input
Hi everyone,

Till yesterday, I was writing codes in assembly. Though it gave the ultimate control of the code, developing large projects was cumbersome. Today, I started learning Keil and it is very useful.

I wrote a small routine to scan four push-buttons connected to P0.7 - P0.4.

The code is like this:

sbit UP = 0x87;
sbit DOWN = 0x86;
sbit LEFT = 0x85;
sbit RIGHT = 0x84;

void main(void)
{
    while(1){
      if(scan(UP)) {...};
      else if(scan(DOWN)) {...};
      ...
      }
}
bit scan(bit x){
    if(x==1) return(0);
    while(x==0);
    return(1);
    }

Port 0 is pulled up externally. What I wanted was, only when I release the button after pressing, the action for the key should take place. So, I thought to put the condition in an while loop, and making it to run.

The problem I got was simple: My keypad routine dint scan at all. I replaced while loop with 'if' statement, i.e.

if(x==0) return(1);

This one worked, but the action took place as soon as I pressed the key. At the end I put some delay and managed to have keyboard debouncing action. My previous assemble code for this one was:

scan:JNB P0.7,scanup
    JNB P0.6,scandown
    ...
    SJMP scan

scanup:JNB P0.7,$
(...some codes...)
    RET
scandown:JNB P0.6,$
(...some codes...)
    RET
...

My questions are:

1. I think the problem may be due to the code scanning 'x' in the port latch rather than port pin. (Am I right?)

2. I have declared UP, DOWN as 'sbit' and collecting in scan routine as 'bit'. Can this be done? Caveats?

I thought to have this scan routine replaced by assembly counterpart so I used #pragma ASM/ENDASM but this also in vain.

What is happening? How to effectively use inline assembly functions with C routines in Keil?

Regards,
Vignesh.

List of 22 messages in thread
TopicAuthorDate
Keil: getting input            01/01/70 00:00      
   If it works in ASM it Works in C            01/01/70 00:00      
      Why C?!            01/01/70 00:00      
         Irrelevant            01/01/70 00:00      
         Of Course            01/01/70 00:00      
   key scan            01/01/70 00:00      
      Delay..            01/01/70 00:00      
         Delay            01/01/70 00:00      
         Software Delay Loops            01/01/70 00:00      
            Software Delay Loops            01/01/70 00:00      
   Learning 'C'            01/01/70 00:00      
   to be precise..            01/01/70 00:00      
      Debounce            01/01/70 00:00      
         completely missed it..            01/01/70 00:00      
      to be precise...            01/01/70 00:00      
         Sorry Leo !            01/01/70 00:00      
         Inferences            01/01/70 00:00      
            Right answer, wrong reason            01/01/70 00:00      
               and therefore            01/01/70 00:00      
            Congratulations            01/01/70 00:00      
               to: Raghu Sir            01/01/70 00:00      
      BIts!            01/01/70 00:00      

Back to Subject List