ashmanee
Newbie level 1
I am using AN MT8889CE CHIP for an alarm phone dialer.I have initialised it and written the program using its datasheet in microbasic but i don't know if the program is good and if im transmitting the dtmf tones.can anyone check my program for transmitting a '1'?
program DTMF
' Declarations section
'WRITING AND DIALING NUMBER 1 USING MT8889CE
main:
' Main program
'INITIALISATION
'DTMF_R/W-PORTD.0
'DTMF_RS0-PORTD.1
'DTMF_CS-PORTD.2
'DTMF_IRQ-PORTB.4
'ALARM-PORTB.7
'DATA PINS D3-D0-portD.0-PORTD-3
TRISD=$A0
TRISB=$FF
PORTD.1=1 'RSO=1
PORTD.2=1 'CS=1,INACTIVATE MT8889CE
DELAY_ms(100)
TRISB=$F0
PORTB=$00 'write to CRA
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
PORTB=$08 'write to CRA
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
PORTB=$00 'write to CRB
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
PORTB=$04 'write to CRA ENABLE IRQ
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
'READ STATUS REGISTER TO CLEAR IRQ
TRISB=$FF
PORTD.1=1 'RSO=1
PORTD.0=1 'CHOOSE READ
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete READ instruction
RESTART:
PORTD.2=1
IF PORTB.7=1 THEN
TRISB=$F0
PORTB=$0D 'WRITE TO CONTROL REGISTER A
PORTD.0=0 'select WRITE
PORTD.1=1 'RSO=1
PORTD.2=0 'ACTIVATE CS
PORTD.2=1 'DEACTIVATE CS
PORTB=$00 'WRITE TO CONTROL REGISTER B
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
'WRITE TO TX REGISTER
PORTD.1=0 'RSO=0
PORTB=$01 'SENDING A '1' TO MT8889CE
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
TRISB=$FF
PORTD.1=1 'RSO=1
PORTD.2=0 'ACTIVATE CS
END_TONE:
PORTD.0=1 'CHOOSE READ
IF PORTB.0=1 THEN
PORTD.2=1
TRISB=$FF 'CLR IRQ
PORTD.1=1 'RS0=1
PORTD.2=0 'CS ACTIVE
PORTD.0=1 'CHOOSE READ
PORTD.2=1 'INACTIVATE MT8889
else
goto END_TONE
end if
else
goto RESTART
END IF
end.
program DTMF
' Declarations section
'WRITING AND DIALING NUMBER 1 USING MT8889CE
main:
' Main program
'INITIALISATION
'DTMF_R/W-PORTD.0
'DTMF_RS0-PORTD.1
'DTMF_CS-PORTD.2
'DTMF_IRQ-PORTB.4
'ALARM-PORTB.7
'DATA PINS D3-D0-portD.0-PORTD-3
TRISD=$A0
TRISB=$FF
PORTD.1=1 'RSO=1
PORTD.2=1 'CS=1,INACTIVATE MT8889CE
DELAY_ms(100)
TRISB=$F0
PORTB=$00 'write to CRA
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
PORTB=$08 'write to CRA
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
PORTB=$00 'write to CRB
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
PORTB=$04 'write to CRA ENABLE IRQ
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
'READ STATUS REGISTER TO CLEAR IRQ
TRISB=$FF
PORTD.1=1 'RSO=1
PORTD.0=1 'CHOOSE READ
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete READ instruction
RESTART:
PORTD.2=1
IF PORTB.7=1 THEN
TRISB=$F0
PORTB=$0D 'WRITE TO CONTROL REGISTER A
PORTD.0=0 'select WRITE
PORTD.1=1 'RSO=1
PORTD.2=0 'ACTIVATE CS
PORTD.2=1 'DEACTIVATE CS
PORTB=$00 'WRITE TO CONTROL REGISTER B
PORTD.1=1 'RSO=1
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
'WRITE TO TX REGISTER
PORTD.1=0 'RSO=0
PORTB=$01 'SENDING A '1' TO MT8889CE
PORTD.0=0 'CHOOSE WRITE
PORTD.2=0 'CS=1,ACTIVATE MT8889CE
PORTD.2=1 'CS=1,INACTIVATE MT8889CE to complete write instruction
TRISB=$FF
PORTD.1=1 'RSO=1
PORTD.2=0 'ACTIVATE CS
END_TONE:
PORTD.0=1 'CHOOSE READ
IF PORTB.0=1 THEN
PORTD.2=1
TRISB=$FF 'CLR IRQ
PORTD.1=1 'RS0=1
PORTD.2=0 'CS ACTIVE
PORTD.0=1 'CHOOSE READ
PORTD.2=1 'INACTIVATE MT8889
else
goto END_TONE
end if
else
goto RESTART
END IF
end.