欢迎来到三一办公! | 帮助中心 三一办公31ppt.com(应用文档模板下载平台)
三一办公
全部分类
  • 办公文档>
  • PPT模板>
  • 建筑/施工/环境>
  • 毕业设计>
  • 工程图纸>
  • 教育教学>
  • 素材源码>
  • 生活休闲>
  • 临时分类>
  • ImageVerifierCode 换一换
    首页 三一办公 > 资源分类 > DOC文档下载  

    基于PIC12C508 DTMF拔号程序编写分享.doc

    • 资源ID:4944607       资源大小:62KB        全文页数:16页
    • 资源格式: DOC        下载积分:10金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要10金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    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.

    注意事项

    本文(基于PIC12C508 DTMF拔号程序编写分享.doc)为本站会员(sccc)主动上传,三一办公仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知三一办公(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-2

    经营许可证:宁B2-20210002

    宁公网安备 64010402000987号

    三一办公
    收起
    展开