[sdiy] Keyboard with PIC microcontroller

Stefano Chiappa kernel255.mailinglis at libero.it
Sun Sep 4 17:14:51 CEST 2005


Thank you very much for the help!
Unfortunately I'm using the old 16f84 PIC, which caused me to add a 
logic decoder to select the "rows" of the keyboard...perhaps I should 
use a newer component with more I/O pins to control the keyboard without 
additionally components and having a smaller PCB.
Stefano

Fredrik Carlqvist wrote:

>Hi!
>
>Just an addition: If you are using one of the larger PIC derivatives
>(16F877A etc.) with RAM in banks 2 or 3, you also need to set the IRP
>bit (bit 7) in the STATUS register. It selects banks for the FSR
>register. Set it to 1 if you are accessing bank 2 or bank 3, otherwise
>reset it to 0. 
>
>Good luck with the project!
> 
>
>Fredrik C
>
>
>  
>
>>-----Original Message-----
>>From: owner-synth-diy at dropmix.xs4all.nl 
>>[mailto:owner-synth-diy at dropmix.xs4all.nl] On Behalf Of 
>>simon.oo.o at xs4all.nl
>>Sent: den 26 augusti 2005 09:18
>>To: synth-diy at dropmix.xs4all.nl
>>Subject: Re: [sdiy] Keyboard with PIC microcontroller
>>
>>Hi Stefano,
>>
>>kernel255\.mailinglis zei:
>>    
>>
>>>Hi all,
>>>I have developed a small circuit to read keys of a keyboard 
>>>      
>>>
>>with a PIC
>>    
>>
>>>microcontroller. I have already developed the hardware, but 
>>>      
>>>
>>I have some
>>    
>>
>>>problem in developing the software with Assembler. I 
>>>      
>>>
>>checked the PIC's CPU
>>    
>>
>>>instructions and I haven't found any instruction to do 
>>>      
>>>
>>indirect addressing
>>    
>>
>>>or indexed addressing; I explain it by a simple C example:
>>>
>>>#define BufferSize 5
>>>
>>>char buffer[BufferSize],data,i;
>>>char *bufferPtr = buffer;
>>>
>>>for(i=0;i<BufferSize;i++)
>>>{
>>>    data = *(bufferPtr+i);
>>>    /* ... do something on data ... */
>>>}
>>>
>>>What I'm not able to do with PIC Assembler is to have a 
>>>      
>>>
>>pointer to memory,
>>    
>>
>>>increment it, and read or write the memory location pointed by it. I
>>>searched for a special register to do stuff like these (as 
>>>      
>>>
>>append for
>>    
>>
>>>other CPUs) but I haven't found it.
>>>      
>>>
>>The index register in a PIC is called FSR.
>>The data it points to can be read and written via INDF.
>>
>>Example:
>>
>>   movlw  bufstart     ; bufstart defined as start address of buffer
>>   movwf  FSR          ; SFR now points to start of buffer
>>   movlw  d'5'
>>   movwf  count
>>Loop:
>>   movfw  INDF         ; get next byte
>>   call   Putchar      ; (or something)
>>   incf   FSR          ; increase pointer
>>   decfsz count
>>   goto   Loop
>>
>>
>>Vriendelijke groet,
>>
>>Simon Brouwer
>>--> nl.openoffice.org <--
>>
>>
>>    
>>
>
>  
>




More information about the Synth-diy mailing list