Пробвай това:
#include <16F84.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz)
#FUSES NOPUT //No Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#use delay(clock=4000000)
#BYTE PORTB=6
#BIT out1=PORTB.0
#BIT out2=PORTB.1
#define hi output_high
#define low output_low
#define some_time 100
int val1=1000;// for example
int val2=1500;
int count1,count2;
char keybuf,;
void Key_procedure(void)
{
if (PORTA = keybuf) {return;}
keybuf = PORTA;
//delay 20ms//
if (input(pin_a0)) {val1 = val1 +10;}
if (input(pin_a1)) {val1 = val1 -10;}
if (input(pin_a2)) {val2 = val2 +10;}
if (input(pin_a3)) {val2 = val2 -10;}
}
void main()
{
keybuf = 0;
count1=val1;count2=val2;
set_tris_b(0xfc); // PORTB 0,1 will be outputs
while(1)//main loop
{
if(count1){count1--;}else{count1=val1;out1=!out1;}
if(count2){count2--;}else{count2=val2;out2=!out2;}
Key_procedure();
}
}
Тези редове дето аз сам ги добавил, не съм сигурен дали се пишат така, защото не работя с този компилатор (и даже не знам кой е

). Т.е. провери синтаксиса и го коригирай ако е нужно.
Проблема ти е, че проца много бързо преминава през процедурата за клавиатурата и при едно натискане на бутон, ще натрупа няколко пъти стойността, а може и да преълни съответния val.