KEYPAD and Interrupt on Changing PORTB


Results 1 to 3 of 3

Threaded View

  1. #1
    Join Date
    Nov 2005
    Location
    Tehran, Iran
    Posts
    28

    Unhappy KEYPAD and Interrupt on Changing PORTB

    hi

    i want to implement a keypad using PicBasic PRO, and i want to use the interrupt on change of PORTB. i am using 16F877 and i can't use "polling routine" in this project with , also i can't use any Keypad IC (like 74C922).

    i wrote a program and i attach its PROTEUS file its schematic.

    Code:
    '****************************************************************
    '*  Name    : PORTB_CHANGE.BAS                                  *
    '*  Author  : Mostafa Taghavi Kani                              *
    '*  Notice  : Copyright (c) 2006 Embedded Technology            *
    '*          : All Rights Reserved                               *
    '*  Date    : 2006/12/14                                        *
    '*  Version : 1.0                                               *
    '*  Notes   :                                                   *
    '****************************************************************
    
    define  OSC 4
    'PIC 16F877
    
    DEFINE LCD_DREG PORTA
    DEFINE LCD_DBIT 0
    DEFINE LCD_RSREG PORTA
    DEFINE LCD_RSBIT 4
    DEFINE LCD_EREG PORTE
    DEFINE LCD_EBIT 0
    DEFINE LCD_BITS 4
    DEFINE LCD_LINES 2
    
    GIE     VAR  INTCON.7
    PEIE    VAR  INTCON.6
    T0IE    VAR  INTCON.5
    INTE    VAR  INTCON.4
    RBIE    VAR  INTCON.3
    T0IF    VAR  INTCON.2
    INTF    VAR  INTCON.1
    RBIF    VAR  INTCON.0
    
    RBPU    VAR  OPTION_REG.7
    INTEDG  VAR  OPTION_REG.6
    T0CS    VAR  OPTION_REG.5
    T0SE    VAR  OPTION_REG.7
    PSA     VAR  OPTION_REG.3
    PS2     VAR  OPTION_REG.2
    PS1     VAR  OPTION_REG.1
    PS0     VAR  OPTION_REG.0
    
    i       VAR  BYTE
    x       VAR  BYTE
    ROW     VAR  BYTE
    COL     VAR  BYTE
    J       VAR  BYTE
    R       VAR  BIT
    C       VAR  BIT
    
    TRISB=%11110000 : 'PORTB=%11111111
    TRISD=%00000000
    i=0
    
    INTCON = %10001000
    RBPU=0
    
    ON INTERRUPT GOTO TEST
    
    MAIN:
        IF I==0 THEN
            LCDOUT $FE,1,"PRESS ANY KEY!"
        ELSE
            LCDOUT $FE,1,"(ROW,COLUMN)=","(",#R,",",#C,")"
        ENDIF
    
        PORTB=(PORTB & %11110010)
        PAUSE 20
        PORTB=(PORTB & %11110100)
        PAUSE 20
        PORTB=(PORTB & %11111000)
        PAUSE 20
        GOTO MAIN
    
    DISABLE
    TEST:
        @ MOVF PORTB,W  'IMPORTANT:reads PORTB and moves the value to W register!!! 
        ROW=(PORTB & %11110000)
        COL=(PORTB & %00001110)
        SELECT CASE ROW
               CASE %00010000
                    R=1
               CASE %00100000
                    R=2
               CASE %01000000
                    R=3
               CASE %10000000                
                    R=4
        END SELECT
        
        SELECT CASE COL
               CASE %00000010
                    C=1
               CASE %00000100
                    C=2
               CASE %00001000
                    C=3
        END SELECT
        i=i+1
        RBIF=0
        RESUME
    ENABLE
    END
    thanks in advance,
    with best regards.
    Attached Images Attached Images  
    Attached Files Attached Files
    Last edited by Mostafa; - 17th December 2006 at 15:36.

Similar Threads

  1. DT instant interrupts with mister_e keypad
    By Tomexx in forum mel PIC BASIC Pro
    Replies: 5
    Last Post: - 26th November 2008, 20:02
  2. Using Sleep
    By elec_mech in forum mel PIC BASIC Pro
    Replies: 2
    Last Post: - 17th August 2008, 04:05
  3. I Need Help.. I want to generate controlled pulses
    By alabbadi in forum PBP Wish List
    Replies: 7
    Last Post: - 18th November 2007, 10:42
  4. How can i use Interrupt in my program??
    By alabbadi in forum mel PIC BASIC Pro
    Replies: 1
    Last Post: - 17th November 2007, 13:28
  5. Can anyone help a beginner in a struggle?
    By douglasjam in forum mel PIC BASIC
    Replies: 1
    Last Post: - 5th May 2005, 23:29

Members who have read this thread : 0

You do not have permission to view the list of names.

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts