I changed the format, as I had no idea that mattered. However, it still doesn't work. I know for sure that it is decoding the numbers, because it tells me what number is entered verbally. When I placed that section of the code after the select case for the password entry, it stopped telling me the values which leads me to believe the select case statement doesn't work for the passsword portion. Would it be easier if I didn't convert the data to ascii? Thanks for the help. Here is the code I have now if anyone feels like looking at it. Thanks for all the help.
@ device pic16F876A, hs_osc, wdt_on, lvp_off, protect_off
include "MODEDEFS.BAS"
define OSC 20
adcon1=7
trisa.0 = 1
trisa.1 = 0
trisa.2 = 0
trisb = %11111111
trisc = %00000000
'_________pic to mc145436a assignments______________________
dtmf_ready VAR PORTA.0 'pin 12 (DV)
select_dtmf VAR PORTA.1 'pin 3 (Enamble)
reset VAR PORTA.2 'pin 5 (GT)
DT0 VAR PORTB.4 'pin 2 (D1)
DT1 VAR PORTB.5 'pin 1 (D2)
DT2 VAR PORTB.6 'pin 14 (D4)
DT3 VAR PORTB.3 'pin 13 (D8)
ce var portA.3 'pin from isd chip
'____________________variables____________________ ______
dtmf VAR byte ' Stores most recent DTMF digit
dtmf1 var byte
password var byte [8]
codeword var byte [8]
codeword1 var byte [8]
c var byte
e var byte
'___________________Initial Conditions__________________
start:
High reset
pause 100
high ce
low select_dtmf
c = 0
e = 0
loop:
iF dtmf_ready = 0 Then loop ' Check for DTMF present, if none loop again
welcome:
portc = %00000000
pause 20
gosub play 'play welcome statement
begin:
if dtmf_ready = 0 then begin 'waits for number to be depressed
select_dtmf = 1 ' Enable the data output from the MT8870
Pause 1 ' Pause 1 mS to let data settle
dtmf = 0
IF DT0 = 1 Then 'Check Input port 0
dtmf = dtmf + 1
EndIF
IF DT1 = 1 Then 'Check Input port 1
dtmf = dtmf + 2
EndIF
IF DT2 = 1 Then 'Check Input port 2
dtmf = dtmf + 4
EndIF
IF DT3 = 1 Then 'Check Input port 3
dtmf = dtmf + 8
EndIF
LookUp dtmf,["_1234567890*#"],dtmf
dtmf_wait1:
IF dtmf_ready Then dtmf_wait1 ' Loop here until DTMF signal stops
select_dtmf = 0 ' Disable the MT8870 data output
low reset
high reset
select case c 'places number in an array
case 0
password [0]=dtmf
case 1
password [1]=dtmf
case 2
password [2]=dtmf
case 3
password [3]=dtmf
case 4
password [4]=dtmf
case 5
password [5]=dtmf
case 6
password [6]=dtmf
case 7
password [7]=dtmf
end select
Select case dtmf
case "1"
portc = %10010111
pause 200
low ce
pause 200
High ce
case "2"
portc = %10011001
pause 200
low ce
pause 200
high ce
case "3"
portc = %10011011
pause 200
low ce
pause 200
high ce
case "4"
portc = %10011101
pause 200
low ce
pause 200
high ce
case "5"
portc = %10011111
pause 200
low ce
pause 200
high ce
case "6"
portc = %10100001
pause 200
low ce
pause 200
high ce
case "7"
portc = %10100011
pause 200
low ce
pause 200
high ce
case "8"
portc = %10100101
pause 200
low ce
pause 200
high ce
case "9"
portc = %10100111
pause 200
low ce
pause 200
high ce
case "0"
portc = %10101001
pause 200
low ce
pause 200
high ce
end select
c = c + 1
if c =< 7 then begin
if password [0] = "1" then
goto password1
else
goto user_password
endif
password1:
if password [1] = "2" then
goto password2
else
goto error
endif
password2:
if password [2] = "3" then
goto password3
else
goto error
endif
password3:
if password [3] = "4" then
goto password4
else
goto error
endif
password4:
if password [4] = "5" then
goto password5
else
goto error
endif
password5:
if password [5] = "6" then
goto password6
else
goto error
endif
password6:
if password [6] = "7" then
goto password7
else
goto error
endif
password7:
if password [7] = "8" then
goto play_menu_message
else
goto error
endif
Travin
Bookmarks