共2条
1/1 1 跳转至页
我想找来电显示接收程序的例子.
问
我在用9030\9032\88E39等这些芯片来作为来电显示解码并用单片机接收来电号码时这些芯片的时序我看懂,不知怎样接收.
我想找一些用9030\9032\88E39等这些芯片来作为来电显示解码并用单片机接收的实例程序.
无限感激!!
无限感激!! 答 1: 是单数据格式的!是单数据格式的! 答 2: 不好意思,我自已来顶一顶. 答 3: 我自已找到了一个例子,但不明白.现用AT89s52做语音项目。因Mcu串口与上位机实时通讯。只好模拟串口来捕捉用户电话号码。其来电显示+模拟串口详细过程如下:
/********************************************************************/
电话号码格式:(单数据消息格式)
00 00 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 D5 04 14 30 38 30 35 31 30 33 33 30 37 35 35 32 38 31 35 38 37 33 34 DD 50 01
04H------- 表示单数据消息格式;
14H------- 表示后跟有效数据个数;(20个)
30 38 30 35 31 30 33 33 --表示主叫来电的时间--8月5日10点33分;
DDH --表示效验位,是从04(包含04)到DD(不包含)所有字符按256 的模求和取补
(04h+14h+....+37h+33h+34h=423h=1059(dec)-- 求和
1059-256x4=35(dec)
256-35=221(dec)=DDh---------------------- 取补)
/*******************************************************************/
电话号码通过HD9032芯片第一脚输出,接Mcu P3.2脚,用中断0检测起始位,然后通过定时器0来判断数据。每次都能正确接收电话号码。
通讯格式为:1200bps ,8 ,1 晶体:11.0592M
程序如下:
sbit HT_out=P3^2;
void service_int0()interrupt 0 using 3
{
EX0=0;
TH0=0xFE; /*检测数据位的中间值*/
TL0=0x80;
TF0=0;
TR0=1;
IT0=0;
ET0=1;
}
void timer0(void) interrupt 1 using 2
{
if(Time_flg) /*不用模拟串口时,做一秒定时用*/
{
TF0=0;
TH0=0x4C;
TL0=0x00;
Time_num++;
if(Time_num>19)
{
Time_num=0;
Time_sec++;
}
}
else /*用模拟串口接收数据处理*/
{
TF0=0;
TH0=0xFD;
TL0=0x00;
switch(RxdCnt++)
{
case 0:
if(HT_out==1)
RxdCnt=0;
break;
default:
if(RxdCnt>9){ RxdCnt=0;break;}
RSBUF>>=1;
RSBUF|=HT_out?0x80:0;
break;
case 9:
RxdCnt=0;
if(HT_out==0)
break;
if(RSBUF==0x55&&Tel_num==0)
aa++;
if(aa>20&&RSBUF==0x04&&Tel_num==0)
Tel_flg=1;
if(Tel_flg&&RSBUF!=0x04)
Tel[Tel_num++]=RSBUF; /*判断有用的数据后保存到数组*/
if(Tel_num<=(Tel[0]+1))
{
EX0=1;
TR0=0;
}
else /*接收完全部有用数据后关闭INT0和TIME0*/
{
EX0=0;
TR0=0;
}
}
}
}
这样的程序是用9032C 还是用9032D啦?
这处程序的变量:Time_flg HT_out RSBUF Tel_num Tel_flg 是什么东东啦?
我真的看不明白.
我想找一些用9030\9032\88E39等这些芯片来作为来电显示解码并用单片机接收的实例程序.
无限感激!!
无限感激!! 答 1: 是单数据格式的!是单数据格式的! 答 2: 不好意思,我自已来顶一顶. 答 3: 我自已找到了一个例子,但不明白.现用AT89s52做语音项目。因Mcu串口与上位机实时通讯。只好模拟串口来捕捉用户电话号码。其来电显示+模拟串口详细过程如下:
/********************************************************************/
电话号码格式:(单数据消息格式)
00 00 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 55 D5 04 14 30 38 30 35 31 30 33 33 30 37 35 35 32 38 31 35 38 37 33 34 DD 50 01
04H------- 表示单数据消息格式;
14H------- 表示后跟有效数据个数;(20个)
30 38 30 35 31 30 33 33 --表示主叫来电的时间--8月5日10点33分;
DDH --表示效验位,是从04(包含04)到DD(不包含)所有字符按256 的模求和取补
(04h+14h+....+37h+33h+34h=423h=1059(dec)-- 求和
1059-256x4=35(dec)
256-35=221(dec)=DDh---------------------- 取补)
/*******************************************************************/
电话号码通过HD9032芯片第一脚输出,接Mcu P3.2脚,用中断0检测起始位,然后通过定时器0来判断数据。每次都能正确接收电话号码。
通讯格式为:1200bps ,8 ,1 晶体:11.0592M
程序如下:
sbit HT_out=P3^2;
void service_int0()interrupt 0 using 3
{
EX0=0;
TH0=0xFE; /*检测数据位的中间值*/
TL0=0x80;
TF0=0;
TR0=1;
IT0=0;
ET0=1;
}
void timer0(void) interrupt 1 using 2
{
if(Time_flg) /*不用模拟串口时,做一秒定时用*/
{
TF0=0;
TH0=0x4C;
TL0=0x00;
Time_num++;
if(Time_num>19)
{
Time_num=0;
Time_sec++;
}
}
else /*用模拟串口接收数据处理*/
{
TF0=0;
TH0=0xFD;
TL0=0x00;
switch(RxdCnt++)
{
case 0:
if(HT_out==1)
RxdCnt=0;
break;
default:
if(RxdCnt>9){ RxdCnt=0;break;}
RSBUF>>=1;
RSBUF|=HT_out?0x80:0;
break;
case 9:
RxdCnt=0;
if(HT_out==0)
break;
if(RSBUF==0x55&&Tel_num==0)
aa++;
if(aa>20&&RSBUF==0x04&&Tel_num==0)
Tel_flg=1;
if(Tel_flg&&RSBUF!=0x04)
Tel[Tel_num++]=RSBUF; /*判断有用的数据后保存到数组*/
if(Tel_num<=(Tel[0]+1))
{
EX0=1;
TR0=0;
}
else /*接收完全部有用数据后关闭INT0和TIME0*/
{
EX0=0;
TR0=0;
}
}
}
}
这样的程序是用9032C 还是用9032D啦?
这处程序的变量:Time_flg HT_out RSBUF Tel_num Tel_flg 是什么东东啦?
我真的看不明白.
共2条
1/1 1 跳转至页
回复
有奖活动 | |
---|---|
【有奖活动】分享技术经验,兑换京东卡 | |
话不多说,快进群! | |
请大声喊出:我要开发板! | |
【有奖活动】EEPW网站征稿正在进行时,欢迎踊跃投稿啦 | |
奖!发布技术笔记,技术评测贴换取您心仪的礼品 | |
打赏了!打赏了!打赏了! |
打赏帖 | |
---|---|
vscode+cmake搭建雅特力AT32L021开发环境被打赏30分 | |
【换取逻辑分析仪】自制底板并驱动ArduinoNanoRP2040ConnectLCD扩展板被打赏47分 | |
【分享评测,赢取加热台】RISC-V GCC 内嵌汇编使用被打赏38分 | |
【换取逻辑分析仪】-基于ADI单片机MAX78000的简易MP3音乐播放器被打赏48分 | |
我想要一部加热台+树莓派PICO驱动AHT10被打赏38分 | |
【换取逻辑分析仪】-硬件SPI驱动OLED屏幕被打赏36分 | |
换逻辑分析仪+上下拉与多路选择器被打赏29分 | |
Let'sdo第3期任务合集被打赏50分 | |
换逻辑分析仪+Verilog三态门被打赏27分 | |
换逻辑分析仪+Verilog多输出门被打赏24分 |