基于PIC12C508 DTMF拔号程序编写分享.doc
-
资源ID:4944607
资源大小:62KB
全文页数:16页
- 资源格式: DOC
下载积分:10金币
友情提示
2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
|
基于PIC12C508 DTMF拔号程序编写分享.doc
基于PIC12C508 DTMF拔号程序编写分享pIC12C508 DTMF拔号程序;|Name:MAIN.ASM|;|Description:DTMF-RS232converter(forusewithPCNummerViser)|;|DetectsDTMFandringing,andtransmitstoastd.|;|RS232port,at2400baud.|;|;+-+;|Platform:PIC12C508(A)(usinginternal4MHzRC-oscillator)|;|Uses:90-342W/512Wprogram-mem(allswitchessetto0/1)|;|6B/25Bdata-mem|;|Assembler:MPASM2.20(MPLAB4.00.00)|;|Comments:-|;+=+TITLEDTMFtoRS232converterPROCESSOR12C508_CONFIG_CP_OFF">INCLUDERADIXDEC_IDLOCSh0104OTPSET1;Usefactory-storedcal.-value(onOneTImeProgrammable)TMR0CLKSET1;UseTMR0externalclockat3,579545MHz(insteadofIntRC)。PARITYSET1;Useevenparity-bitwhentransmitTIngtotheserialport.CLIONLYSET1;TransmitsCLI(A-numbers)only.RINGSET1;Transmitsringing.IDENTTXSET1;Transmitsidentwhenpressing*(DTMF)。PWRUPIDSET1;Transmitsshortidentatpowerup.ASCIISET1;TransmitsASCII-charsinsteadofbinary:;DigitASCIIBinaryDigitASCIIBinary;00(48d)0000000099(57d)00001001;11(49d)00000001AA(65d)00001010;22(50d)00000010BB(66d)00001011;33(51d)00000011CC(67d)00001100;44(52d)00000100DD(68d)00001101;55(53d)00000101*(42d)00001110;66(54d)00000110#(35d)00001111;77(55d)00000111RingR(82d)00010000;88(56d)00001000;-+*Constants*+-IFTMR0CLK=0;InternaloscillatorOPTION_REGequb10000001;Defaulttimer/prescalersetupENDIFIFTMR0CLK=1;ExternalTMR0source(3,579545MHz)OPTION_REGequb10100011;Defaulttimer/prescalersetupENDIF#defineDTMF0GPIO,0;Bit0(LSB)fromMT8870#defineDTMF1GPIO,1;Bit1fromMT8870#defineDTMF2GPIO,3;Bit2fromMT8870/_Ring-detector#defineDTMF3GPIO,4;Bit3fromMT8870/TxD-output(high=sPACe)#defineDTMFOKGPIO,5;DTMFdetected,andreadyatDTMF0-3;-+*Variabledeclaration*+-cblock0ChDTMFvalidentvalmisctemp1,temp2,teMP3;Temp-variablesendc#defineCLIPmisc,0;SetwhenCLIPdetected#defineCLIPendmisc,1;SetbyCLIPdetwhen#received#defineIdentOKmisc,2;Setwhenidentdetected(*);-+*Resetvector*+-ORG0hrst_vector:MOVwfOSCCAL;Setoscillatorcalibration.callinitIFPWRUPID=1gotopwrupidentpwrupidentreturn:ENDIFgotomain;-+*Identity(locatedlowbecauseofnoCP64b)*+-identtable:IFIDENTTX=1addwfPCL,Fdt“+PCNummerViser+”,13dt“Firmwarev1.04”,13,13dt“JaCOBBlichfELDt98”,13,13,13,0ENDIFpwrupidenttable:IFPWRUPID=1addwfPCL,Fdt“DTMFTORS232”,60,“0104”,62,0ENDIF;-+*Initialization*+-init:;SetupI/O-direction(GP0-3,5=input,GP4=output)MOVlwb11101111trisGPIO;TxD=Space(GP4=low)MOVlwb00000000MOVwfGPIO;EnableportBpull-up,dISAblewake-uponPINchange;SetupT0=inc.oneitherOSC.orTMR0,prescaler=4/16(dependsonTMR0CLK)clrwdtMOVlwOPTION_REGoptionclrfmiscclrfidentvalretlw0;-+*Power-upidentitytransmission*+-IFPWRUPID=1pwrupident:MOVlw4;waitapprox.1secondMOVwftemp3pwrup11:clrftemp2pwrup12clrftemp1pwrup13:clrwdtdecfsztemp1,Fgotopwrup13decfsztemp2,Fgotopwrup12decfsztemp3,Fgotopwrup11MOVlwh0FFMOVwftemp3pwrup2:clrwdtincftemp3,FMOVftemp3,Wcallpwrupidenttable;Fetchtextclrftemp2subwftemp2,FbtfscSTATUS,Z;Endoftable?gotopwrupendcalltxsergotopwrup2pwrupend:gotopwrupidentreturnENDIF;-+*Main*+-main:gotoDTMFdetDTMFdetreturn:gotoringdetringdetreturn:gotomain;Repeatmain;ReadDTMF-bitsfrom8870,convertstonibble,andreturnsinW.readDTMF:MOVfGPIO,Wandlwb00000011;Getbit0-1MOVwfDTMFvalbsfDTMFval,2;Getbit2btfssDTMF2bcfDTMFval,2MOVlwb11111111;Getbit3(DTMF3=input)bcfDTMFval,3trisGPIOMOVlwb11101111btfscDTMF3bsfDTMFval,3trisGPIO;DTMF3=OutputbcfDTMF3MOVfDTMFval,W;Convertfrom8870-normalandlwb00001111callDTMFtableMOVwfDTMFvalretlw0DTMFtable:addwfPCL,Fretlwb00001101;DTMFDretlwb00000001;DTMF1retlwb00000010;DTMF2retlwb00000011;DTMF3retlwb00000100;DTMF4retlwb00000101;DTMF5retlwb00000110;DTMF6retlwb00000111;DTMF7retlwb00001000;DTMF8retlwb00001001;DTMF9retlwb00000000;DTMF0retlwb00001110;DTMF*retlwb00001111;DTMF#retlwb00001010;DTMFAretlwb00001011;DTMFBretlwb00001100;DTMFC;ConvertsreceivedDTMFtoASCII(returnsinW)conASCII:IFASCII=1addwfPCL,FretlwA0retlwA1retlwA2retlwA3retlwA4retlwA5retlwA6retlwA7retlwA8retlwA9retlwAAretlwABretlwACretlwADretlwA*retlwA#ENDIF;Testsfor3subsequent*。ident:IFIDENTTX=1bcfIdentOKMOVlwb00001110;DTMF*subwfDTMFval,WbtfssSTATUS,Zgotoident1incfidentval,FMOVlwd3subwfidentval,WbtfssSTATUS,ZgotoidentendbsfIdentOKident1:clrfidentvalidentend:retlw0ENDIF;TransmitsWat2400bps/std.RS232.Calculatesparity-bit.Returnswhendone.txser:MOVwftemp1bcfSTATUS,C;Transmitstart-bitcalltxcarryMOVlwd8;Transmit8databitsMOVwftemp2txbits:clrwdtrrftemp1,Fcalltxcarrydecfsztemp2,FgototxbitsIFPARITY=1rrftemp1,F;calculateparity(even)swapftemp1,Wxorwftemp1,WMOVwftemp1rrftemp1,Frrftemp1,Fxorwftemp1,Frrftemp1,Wxorwftemp1,FbcfSTATUS,Cbtfsctemp1,0bsfSTATUS,CcalltxcarryENDIFbsfSTATUS,C;Transmit2*stop-bitcalltxcarrybsfSTATUS,Ccalltxcarryretlw0;transmitcarry-flagIFTMR0CLK=0txcarry:MOVlw(256-104);2400=416,666us=1666,666c/16=104,17ENDIFIFTMR0CLK=1txcarry:MOVlw(256-93);2400=416,666us=1491,477c/16=93,22ENDIFtxndone:btfscTMR0,7;Lastbittransmitted(TMR0ovfl.)?gototxndonebsfDTMF3;SpacebtfscSTATUS,C;Settomark(-12V)ifCarry=1;(RS232invertsoutput)bcfDTMF3;MarkMOVwfTMR0retlw0;RecognizesCLIP(DTMFreceivedinA),andsets/clearsCLIP.IFCLIONLY=1CLIPdet:MOVwftemp1MOVlwb00001010;DTMFAsubwftemp1,WbtfssSTATUS,ZgotoCLIPdet2bsfCLIPgotoCLIPdetendCLIPdet2:MOVlwb00001101;DTMFDsubwftemp1,WbtfssSTATUS,ZgotoCLIPdet3bsfCLIPgotoCLIPdetendCLIPdet3:btfssCLIPgotoCLIPdetendMOVlwb00001111;DTMF#subwftemp1,WbtfssSTATUS,ZgotoCLIPdetendbcfCLIPbsfCLIPendCLIPdetend:retlw0ENDIF;DTMF-detection-CallsreadDTMF,CLIPdet,conASCIIandtxserifDTMFispresent.;ReturnswhenDTMFisreMOVed.DTMFdet:clrwdtbtfssDTMFOKgotoDTMFdetreturngoto$+1;DoublenopbtfssDTMFOKgotoDTMFdetreturncallreadDTMF;DTMFpresent,read!IFIDENTTX=1;Transmitidentif*receivedcallidentbtfssIdentOKgotoDTMFdet2MOVlwh0FFMOVwftemp3DTMFdet1:clrwdtincftemp3,FMOVftemp3,Wcallidenttable;Fetchtextclrftemp2subwftemp2,FbtfscSTATUS,Z;Endoftable?gotoDTMFdet2calltxsergotoDTMFdet1ENDIFDTMFdet2:MOVfDTMFval,WIFCLIONLY=1;TransmitonlyCLIcallCLIPdetbtfssCLIPend;LastdigitinCLI(#)?gotoDTMFdet21bcfCLIPendgotoDTMFdet22DTMFdet21:btfssCLIPgotoDTMFoffDTMFdet22:MOVfDTMFval,WENDIFIFASCII=1;ConverttoASCIIMOVfDTMFval,WcallconASCIIENDIFcalltxser;TransmittoserialportDTMFoff:clrwdt;WaitforDTMFtostopbtfscDTMFOKgotoDTMFoffDTMFend:gotoDTMFdetreturn;Ring-detection-Ifringingispresent,callstxserwithW=(ascii)R。;ReturnswhenringingendsorDTMFispresent.ringdet:clrwdtIFRING=1btfscDTMF2gotoringendringdet2:;Waitforringing-pulsetoclrwdt;stop(orDTMFpresent)。btfscDTMFOKgotoringendbtfssDTMF2gotoringdet2MOVlwb10000111;Setuptimer:50msbeforeoverflow.optionMOVlwd50MOVwfTMR0ringdet3:clrwdt;Waitfornewringing-pulseMOVlw0subwfTMR0,WbtfscSTATUS,ZgotoringendbtfscDTMF2gotoringdet3;Newpulsepresent.MOVlwOPTION_REG;RestoreoldprescaleroptionMOVlwAR;TransmitRcalltxserbcfCLIP;TerminateCLIP-sequence(ringdet.)MOVlwb10000111;Setuptimer:50msbeforeoverflow.optionringdet4:MOVlwd50MOVwfTMR0ringdet5:clrwdt;WaitforringingtoendbtfssDTMF2gotoringdet4MOVlw0subwfTMR0,WbtfscSTATUS,ZgotoringendbtfssDTMFOKgotoringdet5ringend:MOVlwOPTION_REG;RestoreoldprescaleroptionENDIFgotoringdetreturnIFOTP=0ORGh1FF;(old12C508calibration-val.)MOVlwh0A0ENDIFEND+-+|History|+-+Rev.ChangeReasonDate-0.0aSource-filecreated.-24.03.980.5aHierarchischdiagramfinished.-25.03.981.0aEverythingimplemented,readyfortest.-26.03.981.0bTestedinreallife。.Everythingok,-27.03.98(minorbugsreMOVed)。1.0Firstversion,inuse。-27.03.981.01Fixed#nottransmittedwhenCLIP=1.-29.03.98FixedD-sequencesnotrecognizedasCLIP(nottransmittedwhenCLIP=1)。ImplementedPwrUpIdent.Givespossibilityofauto-detection,andFW-versiondetection.1.02Implementedpossibilityofusingext.Moreprecisethan09.04.98TMR0source,astimebaseforRS232-internalRC-oscillator.communication.BugfixedCLIPdet.ASCII-tablelocatedinupperpagewhenallswitches=1.1.03r+Firstpublicrelease.+IncasetheCLI-02.05.98BreakCLIP-sequenceifringdetected.sequenceisnottermi-natedprobably(becauseoflinenoiseetc.)1.04rMinorchanges/bugfixes:18.03.99ChangedTX-timing.Transmittedat2325bps.Changedformatfrom8E1to8E2Enablesreceivertore-(2stopbits).syncronizebetweeneachbyte,therebysupressingframing-errors.Minimizedread-DTMFtiming.ReMOVesunwanted10usglitchonTXjustbeforetransmittingadigit.Ideas/futurechanges:-AddEEPROMandchangepower-supply,toenablereception/storingofDTMF,whenthePCisturnedoff.Addoffhookdetector,toenablelengthofconversation,andanswered/notansweredcalllogging.