ME Labs, Inc.
719-520-5323
 
Home:
  Developer Resources:

Programming Clues
    Sample Programs
   
    PICBASIC PRO™
Compiler Manual
    PICBASIC™ Compiler
Manual
    Serin2/Serout2 Modes
    ASCII Character Set
    Number Conversion
    Floating Point
Routines
    PBP Debug Monitor
    Articles and Tutorials

Hardware Clues
    Parts / Vendor List
    PICPROTO™ Boards
    LAB-X1 Docs
    LAB-X2 Docs
    LAB-X20 Docs
    LAB-X3 Docs
    LAB-X4 Docs
    LAB-XUSB Docs
    LAB-XT Docs
     
 

ME Labs, Inc. | 1-719-520-5323 | Example Program - HSERXT.pbp

PICBASIC PRO program to send and receive from the hardware serial port.
' Name        : HSERXT.pbp
' Compiler    : PICBASIC PRO Compiler 2.6
' Assembler   : PM or MPASM
' Target PIC  : PIC16F877-20
' Hardware    : LAB-XT Experimenter Board
' Oscillator  : 20MHz external
' Keywords    : DCD, HSERIN, HSEROUT, LCDOUT, LOOKUP, NCD
' Description : PICBASIC PRO program to send and receive from
' the hardware serial port.
'

' MeLabs PIC programmer should not be connected to the ICSP header
' when running this code. It may interfere with the operation
' of the keypad.  

Define LOADER_USED 1  ' Only required for melabs Loader

Define OSC 20         ' Match the crystal on the board

' Define LCD registers and bits
Define LCD_DREG  PORTD
Define LCD_DBIT  4
Define LCD_RSREG PORTE
Define LCD_RSBIT 0
Define LCD_EREG  PORTE
Define LCD_EBIT  1

char      Var Byte     ' Storage for serial character
col       Var Byte     ' Keypad column
row       Var Byte     ' Keypad row
key       Var Byte     ' Key value
disp_key  Var Byte     ' Key ASCII code

   ADCON1 = 7          ' Set PORTA and PORTE to digital
   Pause 500	       ' Wait for LCD to startup
   OPTION_REG.7 = 0    ' Enable PORTB pullups
   key = 0             ' Initialize vars

   LCDOut $fe, 1       ' Initialize and clear display

mainloop: 
   HSerin 1, tlabel, [char]' Get a char from serial port
   LCDOut char             ' Send char to display

tlabel:
   GoSub getkey            ' Get a keypress if any
   IF (key != $FF) Then
      HSerout [disp_key]   ' Send key out serial port
   EndIF
   GoTo mainloop           ' Do it all over again
        
' Subroutine to get a key from keypad
getkey:
   ' Check for keypress
   For row = 0 TO 3     ' Loop for 4 rows in keypad
     PORTB = 0          ' All output pins low
     TRISB = ~(DCD row) ' Set one row pin to output
    '@ NOP		' Fudge for 18F452
     col = PORTB >> 4	' Read column pins

     IF col != $0F Then	' Check if key is pressed
        HPwm 1,127,7500	' Begin speaker tick
        GoTo gotkey 	' If any keydown, exit
     EndIF
   Next row		' Repeat for the next row
	
   key = $FF		' No keys down, set key to $FF
   Return      		' Return to main loop
	
gotkey: 		' Change row and column to key number 0 - 15
   Pause 15             ' Debounce
   HPwm 1,0,0		' End speaker tick
	
   ' Wait for all keys up
   PORTB = 0               ' All output pins low
   TRISB = $F0             ' Least significant 4 pins out, top 4 pins in
   IF ((PORTB >> 4) != $0F) Then gotkey	 ' If any keys down, loop
   key = (row * 4) + (NCD (col^$0F)) - 1 ' Combine row and column into numeric value
	
   ' Translate key to display label:
   ' 1  2  3  A
   ' 4  5  6  B
   ' 7  8  9  C
   ' *  0  #  D
   LookUp key,["123A456B789C*0#D"],disp_key
   Return		' Return to main loop
   
   End

           

Download the program file.