' {$STAMP BS2} ' {$PBASIC 2.5} Spkr PIN 10 ' DTMF output on pin 10 #SELECT $STAMP #CASE BS2, BS2E TmAdj CON $100 ' x 1.0 (time adjust) FrAdj CON $100 ' x 1.0 (freq adjust) #CASE BS2SX TmAdj CON $280 ' x 2.5 FrAdj CON $066 ' x 0.4 #CASE BS2P TmAdj CON $3C5 ' x 3.77 FrAdj CON $044 ' x 0.265 #CASE BS2PE TmAdj CON $100 ' x 1.0 FrAdj CON $0A9 ' x 0.662 #CASE BS2PX TmAdj CON $607 ' x 6.03 FrAdj CON $2A ' x 0.166 #ENDSELECT eeLoc VAR Byte ' EEPROM address of stored number eeByte VAR Byte ' Byte containing two DTMF digits dtDig VAR eeByte.NIB1 ' Digit to dial phone VAR Nib ' Pick a phone # hiLo VAR Bit ' Bit to select upper and lower nib cntA VAR Byte repeatA VAR Byte Parallax DATA $19,$16,$62,$48,$33,$3F ' Phone: 1-916-624-8333 ParallaxFax DATA $19,$16,$62,$48,$00,$3F ' Phone: 1-916-624-8003 Information DATA $15,$20,$55,$51,$21,$2F ' Phone: 1-520-555-1212 Main: 'FOR phone = 0 TO 2 ' retrieve address ' LOOKUP phone, [Parallax, ParallaxFax, Information], eeLoc ' GOSUB Dial_Number ' PAUSE 2000 'NEXT GOSUB Buzzer END Dial_Number: DO READ eeLoc, eeByte ' Retrieve byte from EEPROM eeLoc = eeLoc + 1 ' point to next pair of digits FOR hiLo = 0 TO 1 ' Dial upper and lower digits IF (dtDig = $F) THEN EXIT ' Hex $F is end-of-number flag DTMFOUT Spkr, ' dial digit 150 */ TmAdj, 25, [dtDig] ' 150 ms on, 25 ms off eeByte = eeByte << 4 ' Shift in next digit NEXT LOOP UNTIL (dtDig = $F) RETURN Buzzer: FOR repeatA = 0 TO 5 PAUSE 20000 OUTPUT 10 FOR cntA = 0 TO 10 OUT10=1 PAUSE 300 OUT10=0 PAUSE 1000 NEXT NEXT RETURN