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
Bookmarks