65. /*******************************************************************
***
66. 注释:解码函数采用外部IO中断形式(上升沿或下降沿中断,即电平电平跳变中断), 67. 用一个定时器作为时钟,每次产生中断时便从定时器见时间值取出,并和上一次的 68. 记录做差求出时间间隔,以此来判断当前为宽沿还是窄沿。
69. ********************************************************************
***/
70. static void VIC_VECT_Fucton_04(void)//接受解码数据中断函数 71. {
72. GPIOIC|=0x00000001;//清楚上一次中断内容 73. RX_time=TIMER1VALUE; 74. if(RX_lasttime>=RX_time)
75. RX_diff=RX_lasttime-RX_time; //lasttime初始值
为0
76. else
77. RX_diff=65535-RX_time+RX_lasttime; 78. RX_lasttime=RX_time;
79. switch(RX_state) //启动代码时state已经被配置为
STARTBIT 80. {
81. case STARTBIT_FALL:
82. if ((SHORTINTERVAL 84. if(RX_ones<5) //ones初始值为0 85. { 86. RX_ones = 0; 87. } 88. else 89. { 90. RX_state = DECODE; //将状态配置为 解码 91. } 92. } 93. else if(RX_diff < SHORTINTERVAL) 94. RX_ones++; 95. else 96. RX_ones=0; 97. break; 98. case DECODE: 99. /**************通过间隔长短来判定数据**************/ 100. if ((SHORTINTERVAL (RX_diff 105. else if( RX_diff < SHORTINTERVAL) 106. { 107. currentbit=currentbit; 108. RX_times++; 109. } 110. else 111. RX_state = DATAINIT; 112. 113. /****************接受数据位,从低位接起 ****************/ 114. if(RX_times%2==0) 115. { 116. if(RX_bitcounter<8) 117. { 118. if (currentbit==1) 119. { 120. uartByteRx = (uartByteRx >> 1) + (1<<7); 121. rxParity++; //奇偶校验位 122. RX_bitcounter++; //接受数据位数 123. } 124. else 125. { 126. uartByteRx = (uartByteRx >> 1); 127. RX_bitcounter++; 128. } 129. } 130. else 131. { 132. rxParity&=0x01; //进行奇偶校验 133. if(rxParity==currentbit) 134. { 135. RX_bitcounter++; 136. RX_finish=1; 137. RX_state=DATAINIT; 138. } 139. else 140. RX_state=DATAINIT; //若奇偶校验错误则,重新检测 141. } 142. } 143. break; 144. case DATAINIT : //初始化参数状态 145. RX_bitcounter=0; 146. RX_ones=0; 147. rxParity=0; 148. currentbit=0; 149. RX_state=STARTBIT_FALL; 150. RX_times=0; 151. break; 152. default: 153. break; 154. } 155. } android音频口通信——2FSK信号调制 发布时间:2013-5-16 一、前言 今天要和大家分享一个本人最近研发的完全具有自主知识产权的项目——android音频口通信,并寻求有兴趣的同行和友人一起合作! 大家都知道拉卡拉,但它具体的技术实现我相信很少有人能说出来个一二,本人也正是抱着遇见问题勇往直前的技术男的精神,花了一两个月的时间,完全摸透并已初步实现了用android手机的音频口(耳机输出输入)来实现全双工的通信,一但通信 协议建立了,下面好玩的东西就多了!! 你可以完全不再用担心你家的电视或者空调等此类用红外遥控的电器一时找不到遥控器而烦恼了,加上我现在研发的音频口扩展头,将其插入你的android手机的耳机口,装上特制的APP,你将可以用它来遥控你家的任何带红外遥控功能的电器! 你也可以抛开目前那种单调的耳机口防尘塞,加上相应的扩展头,你将可以实时知道你周围环境的温度、湿度等等指标…… 诸如此类的运用,数不胜数,在这里我就不一一列举了,下面转入我们的正题吧(^_^不好意思,闲话说多啦,哈哈……) 二、通信建立的基础——耳机线上传输的信号 我们知道,耳机是用来听音乐,打电话的,既然是和声音相关的,那么耳机线上传输的就是音频信号,常见的音频信号一般都是在100Hz——10KHz左右的范围内,那么手机里面的音频输出系统(DA和音频功放)的幅频特性(也既带宽)一定也是在这个范围(这是本人的猜想,由于设备和仪器有限,没有进行系统的测试,有兴趣的朋友可以用相关的测试仪器测测),那么,既然有带宽,好家伙,我们就可以通过努力在这个频带内实现我们的通信信道了!另外值得提的一点是,耳机线上传输的音频信号是交流的! 下面我们来看看市面上常见的耳机座(公头)的引脚定义,android手机上用的耳机大多都是3.5mm的四芯座,在这四个芯中,分别是:地、左声道、右声道和线控开关(MIC),而这四