共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 跳转至页
回复
我要赚赏金打赏帖 |
|
|---|---|
| PCF8574功能模块及其使用被打赏¥20元 | |
| 传感器LSM6DSO及LIS3MDL的功能检测被打赏¥18元 | |
| LPS25HB气压传感器及其检测被打赏¥18元 | |
| HTS221温湿度传感器及其检测被打赏¥18元 | |
| 【S32K3XX】HSE FW 版本更新被打赏¥21元 | |
| 基于ArduinoUNO开发板的AT24C02读写测试被打赏¥16元 | |
| TCS3472S传感器及其色彩检测被打赏¥19元 | |
| 【S32DS】S32K3 RTD7.0.1 HSE 组件配置报错问题解决被打赏¥27元 | |
| 【S32K3XX】MCME 启动 CORE1被打赏¥23元 | |
| AG32VH407下温度大气压传感器及其检测被打赏¥20元 | |
我要赚赏金
