程序 发送程序 程序执行后,将以DTMF方式发送预存在数组W_BUF中的7位数码(5135535)。 #include <reg51.h> #define uc unsigned char #define ui unsigned int /* 子函数(子程序)说明 */ void initialize(void); void tran_init(void); void transmit(uc data *p,uc count); void delay(ui l); /* 主函数(主程序) */ void main(void) { uc data w_buf[7]; SP=0x5f; /* 预存数码5135535 */ w_buf[0]=5; w_buf[1]=1; w_buf[2]=3; w_buf[3]=5; w_buf[4]=5; w_buf[5]=3; w_buf[6]=5; initialize(); tran_init(); transmit(w_buf,7); initialize(); for(;;);} /* MT8880初始化子函数 */ void initialize(void) { P1=0x3f; /* 读SR */ P1=0x20; /* CRA=0000 */ P1=0x20; /* CRA=0000 */ P1=0x28; /* CRA=1000 */ P1=0x20; } /* CRB=0000 */ /* 发送初始化子函数 */ void tran_init(void) { P1=0x29; /* CRA=1001 */ P1=0x21; } /* CRB=0001 */ /* 发送操作子函数 */ void transmit(uc data *p,uc count) { uc i; for (i=0;i<count;i++,p++) { P1=*p; /* 发送数码 */ delay(6000); /* 延时 */ P1=0x3f; }}/* 读SR */ /* 延时子函数 */ void delay(ui l) { ui i; for (i=0;i<l;i++);}
接收程序 程序利用单片机的INT0以中断方式接收DTMF信号,接收的7位数码存入数组R_BUF中。 #include <reg51.h> #define uc unsigned char uc data i,r_buf[7]; /* 子函数(子程序)说明 */ void initialize(void); void rece_init(void); /* 主函数(主程序) */ void main(void) { SP=0x5f; i=0; initialize(); rece_init(); for(;;);} /* MT8880芯片初始化子函数 */ void initialize(void) { P1=0x3f; /* 读SR */ P1=0x20; /* CRA=0000 */ P1=0x20; /* CRA=0000 */ P1=0x28; /* CRA=1000 */ P1=0x20; } /* CRB=0000 */ /* 接收初始化子函数 */ void rece_init(void) { P1=0x24; /* CRA=0100 */ IT0=1; /* 边沿触发 */ IE=0x81; } /* 允许中断,开中断 */ /* 接收中断服务程序 */ void int0(void) interrupt 0 using 1 { P1=0x3f; /* 读SR */ P1=0x1f; /* 读RDR */ r_buf[i++]=P1&0x0f; } /* 保存 */
|