Hi,
I am using 20Mz
I think the problem is more hardware than software..



code:/
'*************************
'* Alarm system dialer *
'*************************


'//////////////////////////////
'// Pic chip configuration //
'//////////////////////////////

INCLUDE "modedefs.bas" 'Includes supoprt for PicBasic language
@ DEVICE pic16F88,CCPMX_ON

' Setup Crystal oscillator Frequency to be used by PIC chip in MHz
DEFINE OSC 20 'use external 20mhz crystal

ANSEL = 1
CMCON = 7 ' Turn OFF the comparators so pins can be used as digital I/O-pins

'///////////////////////////////////////
'// Screen initialization //
'///////////////////////////////////////


DEFINE LCD_DREG PORTB ' Set LCD Data port
DEFINE LCD_DBIT 4 ' Set starting Data bit (0 or 4) if 4-bit bus
DEFINE LCD_RSREG PORTA ' Set LCD Register Select port
DEFINE LCD_RSBIT 2 ' Set LCD Register Select bit
DEFINE LCD_EREG PORTA ' Set LCD Enable port
DEFINE LCD_EBIT 3 ' Set LCD Enable bit
DEFINE LCD_BITS 4 ' Set LCD bus size (4 or 8 bits)
DEFINE LCD_LINES 2 ' Set number of lines on LCD

DEFINE LCD_COMMANDUS 2500
DEFINE LCD_DATAUS 250
DEFINE CHAR_PACING 2000
pause 2000


'/////////////////////////
'// PIN configuration //
'/////////////////////////

TRISA = %00011000 ' Set PORTA to all input
TRISB = %11111111 ' Set PORTB to all output
PortA = 0


'///////////////////////////////////////////////
'// Variable Declaration and initialization //
'///////////////////////////////////////////////


counter var byte
i var byte
counter=0


'//////////////////////////
'// Program starts here //
'//////////////////////////

Main:
lcdout $FE,1, "Counter:",dec counter
Pause 500

if PortA.4=1 then
counter=counter +1 'Counter at 1 dials phone number
goto Dial
endif

if PortA.4=0 then
counter=0
goto Main
endif

'//////////////////////////
'// End of program here //
'//////////////////////////

Dial:
'Determine which number to dial and dials it

lcdout $FE,1, "Dial:",dec counter
Pause 500

if counter =1 then 'begin counter loop
if PortB.0 = 1 then GOSUB Dial1760 'cel
if PortB.1 = 1 then GOSUB Dial4392 'Ken
if PortB.2 = 1 then GOSUB Dial9130 'Donald
if PortB.3 = 1 then GOSUB Dial758 'Lyne
Else
counter =1
goto Main
endif 'end counter loop

Pause 1000 'pause for 1 seconds
if (counter > 1) or (counter =0) then counter =1

'Keep counter to 1 after dialing, otherwise the program will keep dialing the number
' Will only redial if counter goes back to 0, that is alarm siren off

goto Main



'*************** subroutine here ********************
Dial1760: 'cel
lcdout $FE,1, "dialing1760 ",dec counter
Pause 500
PortA.1 = 1
pause 3000
DTMFOUT PortA.0, [5,1,4,4,4,4,4,4,4,2]
pause 4000 'Pause 4 seconds
DTMFOUT PortA.0, 20000,0, [5]
pause 2000 'Pause 2 seconds
PortA.1 = 0
return

end

/end code