澳门·威尼斯人(中国)官方网站
澳门·威尼斯人(中国)官方网站
标题:
cmx865初始化
[查看完整版帖子]
[打印本页]
时间:
2008-4-29 16:33
作者:
zhw2008
标题:
cmx865初始化
cmx865只有英文资料,对其初始化有疑问,大家谁能帮着看看,或者谁有中文资料,写啦个程序大家帮我看看阿
时间:
2008-4-29 16:34
作者:
zhw2008
<p>#include" reg51.h"<br/>#define uchar unsigned char<br/>#define uint unsigned int<br/>#define resaddress 0x01 //cmx865的复位命令地址<br/>#define conaddress 0xe0 //cmx865的控制寄存器的地址<br/>#define recmaddress 0xe2 //cmx865接受寄存器的地址<br/>#define recdaddress 0xe5 //cmx865接受数据寄存器地址<br/>//#define stataddress 0xe6 //cmx865状态寄存器地址<br/>//#define proaddress 0xe8 //cmx865程序寄存器地址<br/>#define h1condata 0x01 // mx865的控制寄存器初始化数据高字节<br/>#define l1condata 0x80 // mx865的控制寄存器初始化数据低字节<br/>#define h2condata 0x01 // mx865的控制寄存器初始化数据高字节<br/>#define l2condata 0x40 // mx865的控制寄存器初始化数据低字节<br/>#define hrecdata 0x3e //cmx865接受寄存器初始化数据高字节<br/>#define lrecdata 0x36 //cmx865接受寄存器初始化数据低字节<br/>//#define hprodata 0x80 //cmx865程序寄存器初始化数据高字节<br/>//#define lprodata 0x00 //cmx865程序寄存器初始化数据高低字<br/>//#define hstatdata 0x80 //cmx865状态寄存器初始化数据高字节<br/>//#define lstatdata 0x78 //cmx865状态寄存器地初始化数据低字节<br/>sbit check =P1^3; //摘机信号检测口<br/>sbit strl=P1^2; //振流信号检测口<br/>sbit c865_cs =P1^4; //865片选信号<br/>sbit c865_cdata=P1^5; //865控制命令口<br/>sbit c865_clock=P1^6; //865时钟信号<br/>sbit c865_rdata=P1^7; //865答复信号<br/>sbit mcurxd=P3^0; //串口威尼斯人官方网站<br/>sbit mcutxd=P3^1;<br/>bit highflag=0; //高电平标志位<br/>bit lowflag=0; //低电平标志位<br/>bit hookflag=0; // 摘机信号标志<br/>bit flag20=0; //20ms标志<br/>//bit flag21=0;<br/>uchar count20=0; //20ms计数<br/>uchar ringcount=0; //振流计数<br/>uchar highcount=0; //高电平计数<br/>uchar hookcount=0; //摘机计数<br/>uchar count=0;<br/>uint lowcount=0; //低电平计数<br/>uchar rxbuf[50]; //接受<br/>void initTimer(void) //定时器初始化 串口初始化<br/>{ //定时器1做波特率发生器,9600<br/> TMOD=0X21; //定时器1工作在方式,定时器0工作在方式1<br/> SCON=0X50;<br/> TH1=0xfd; //9600<br/> TL1=0xfd; //启动计数 <br/> TR1=1; <br/> TR0=1; <br/> ET0=1; //定时器0溢出中断允许<br/> PT0 =1; <br/> TH1=0xdc;<br/> TL1=0x00; //10ms<br/> EX0=1;<br/> // EA=1; <br/> }<br/>void delay(uchar tcount) // 延时函数<br/>{<br/> uchar i;<br/> for(;tcount>0;tcount--)<br/> {<br/> for(i=0;i<10;i++);<br/> }<br/> }<br/>void trcommand(uchar command) //单片机向865发送控制命令子程序<br/>{<br/> uchar i;<br/> if(hookflag==0)<br/> {<br/> c865_cs=0; //865有效<br/> delay(1);<br/> for(i=0;i<8;i++)<br/> {<br/> c865_clock=0;<br/> delay(1);<br/> if((command&0x80)==0x80)c865_cdata=1;<br/> c865_cdata=0;<br/> command=command<<1;<br/> }<br/> delay(1);<br/> c865_cs=1;<br/> }<br/> }<br/>void recdata(uchar hdata,uchar ldata) //cmx865向单片机发送数据 两个字节<br/>{<br/> uchar i;<br/> if(hookflag==0)<br/> {<br/> c865_cs=0; //865有效<br/> delay(1);<br/> for(i=0;i<8;i++)<br/> {<br/> c865_clock=0;<br/> delay(1);<br/> if((hdata&0x80)==0x80)c865_cdata=1;<br/> c865_cdata=0;<br/> hdata=hdata<<1;<br/> }<br/> for(i=0;i<8;i++)<br/> {<br/> c865_clock=0;<br/> delay(1);<br/> if((ldata&0x80)==0x80)c865_cdata=1;<br/> c865_cdata=0;<br/> ldata=ldata<<1;<br/> }<br/> delay(1);<br/> c865_cs=1;<br/> }<br/> }<br/>uchar recmx865(void) //单片机接受cmx865发送来数据<br/>{<br/> uchar i,rxddata;<br/> if(hookflag==0) //是否摘机<br/> {<br/> c865_cs=0; //865有效<br/> delay(1);<br/> for(i=0;i<8;i++)<br/> {<br/> c865_clock=0;<br/> delay(1);<br/> if((c865_rdata))<br/> rxddata=rxddata&0x01;<br/> rxddata=rxddata<<1;<br/> }<br/> delay(1);<br/> c865_cs=1;<br/> return(rxddata);<br/> }<br/> }<br/>void initcmx865(void) //865初始化<br/>{<br/> trcommand(resaddress); //865复位<br/> trcommand(conaddress); //865控制寄存器初始化<br/> recdata(h1condata,l1condata);<br/> while(!flag20); //延时20ms<br/> trcommand(conaddress); //865控制寄存器初始化<br/> recdata(h2condata,l2condata);<br/> trcommand(recmaddress); //865接受模式寄存器初始化<br/> recdata(hrecdata,lrecdata);<br/> // trcommand(stataddress);<br/> //recdata(hstatdata,lstatdata);<br/> //trcommand(proaddress);<br/> //recdata(hprodata,lprodata);<br/>}<br/>void senddata(uchar *p) //单片机向上微机发送数据函数<br/>{<br/> while(*p!='\0')<br/> {<br/> SBUF=*p;<br/> while(!TI);<br/> p++;<br/> delay(1);<br/> TI=0;<br/> }<br/> }<br/>void main()<br/>{<br/> P1=0X00;<br/> P3=0X00;<br/> initTimer();<br/> initcmx865();<br/> EA=1; //开总中断<br/> while(1)<br/> {<br/> switch(ringcount) //话机处于什么状态<br/> {<br/> case 0: //待机状态<br/> if(highflag)<br/> {<br/> if(strl){<br/> highcount=0;<br/> ringcount=1; //<br/> highflag=0;<br/> }<br/> else{<br/> highcount=0;<br/> ringcount=0;<br/> highflag=0;<br/> }}break;<br/> case 1: //收fsk状态<br/>// EX0=1; //开外部中断零 准备接受FSK<br/> if(lowflag)<br/> {if(strl){<br/> lowcount=0;<br/> ringcount=2;<br/> lowflag=0;}<br/> else{<br/> lowcount=0;<br/> ringcount=0;<br/> lowflag=0;} }break;<br/> case 2: // 发 fsk状态<br/> if(highflag)<br/> {<br/> if(strl){<br/> highcount=0;<br/> ringcount=3;<br/> highflag=0;<br/> senddata(rxbuf);<br/> }<br/> else{<br/> highcount=0;<br/> ringcount=0;<br/> highflag=0;<br/> } } break;<br/> case 3,5,7: //后振铃状态<br/> //senddata();<br/> if(lowflag)<br/> {<br/> if(strl)<br/> { lowcount=0;<br/> ringcount++;<br/> lowflag=0;<br/> }<br/> else{<br/> lowcount++;<br/> ringcount=0;<br/> lowflag=0;<br/> } } break;<br/> case 4,6,8:<br/> if(highflag)<br/> {<br/> if(strl){<br/> highcount=0;<br/> ringcount++;<br/> highflag=0;<br/> // senddata();<br/> }<br/> else{<br/> highcount=0;<br/> ringcount=0;<br/> highflag=0;<br/> } } break; <br/> default: ringcount=0;break;<br/> }<br/> }<br/> }<br/>void ntint0() interrupt 0 //外部中断0<br/>{<br/> trcommand(resaddress);<br/> rxbuf[count++]=recmx865();<br/> }<br/>void timer0() interrupt 1 //中断1<br/>{<br/> TH1=0xdc;<br/> TL1=0x00; //10ms<br/> //count1++;<br/> if(flag20==0)<br/> {<br/> count20++;<br/> }<br/> if(count20>2)<br/> {<br/> flag20=1; //20ms标志<br/> }<br/> if(check==0) // 监测摘机信号<br/> {<br/> hookcount++; // 摘机信号计数加一<br/> }<br/> else{ hookflag=0;}<br/> if(hookcount>4) //延时去抖<br/> { <br/> hookcount=0;<br/> hookflag=1;<br/> }<br/> if(strl==1) <br/> { highcount++;<br/> }<br/> if(highcount>20) //大于0.2s<br/> { highflag=1;highcount=0;} </p><p> if((strl==0)&&(ringcount>0)&&(ringcount<9))<br/> { lowcount++;<br/> }<br/> if(lowcount>600) //大于6s<br/> {lowflag=1;lowcount=0;}<br/> }</p>
时间:
2008-4-29 16:35
作者:
zhw2008
这是我的程序,大家看看哪儿有问题啊,单片机先将cid接受,然后送给上危机阿
澳门·威尼斯人(中国)官方网站 (https://www.ahtjzy.com/)
Powered by Powered by ahtjzy.com