新建 文本文档.txt
上传用户:woden7206
上传日期:2015-11-28
资源大小:14486k
文件大小:2k
源码类别:

单片机开发

开发平台:

MultiPlatform

  1. 程序
  2. 发送程序
  3.     程序执行后,将以DTMF方式发送预存在数组W_BUF中的7位数码(5135535)。
  4. #include <reg51.h>
  5. #define uc unsigned char
  6. #define ui unsigned int
  7. /* 子函数(子程序)说明 */
  8. void initialize(void);
  9. void tran_init(void);
  10. void transmit(uc data *p,uc count);
  11. void delay(ui l);
  12. /* 主函数(主程序) */
  13. void main(void)
  14. { uc data w_buf[7];
  15.   SP=0x5f;
  16. /* 预存数码5135535 */
  17.   w_buf[0]=5;
  18.   w_buf[1]=1;
  19.   w_buf[2]=3;
  20.   w_buf[3]=5;
  21.   w_buf[4]=5;
  22.   w_buf[5]=3;
  23.   w_buf[6]=5;
  24.   initialize();
  25.   tran_init();
  26.   transmit(w_buf,7);
  27.   initialize();
  28.   for(;;);}
  29. /* MT8880初始化子函数 */
  30. void initialize(void)
  31. { P1=0x3f;  /* 读SR */
  32.   P1=0x20;  /* CRA=0000 */
  33.   P1=0x20;  /* CRA=0000 */
  34.   P1=0x28;  /* CRA=1000 */
  35.   P1=0x20; }  /* CRB=0000 */
  36. /* 发送初始化子函数 */
  37. void tran_init(void)
  38. { P1=0x29;  /* CRA=1001 */
  39.   P1=0x21; } /* CRB=0001 */
  40. /* 发送操作子函数 */
  41. void transmit(uc data *p,uc count)
  42. { uc i;
  43.   for (i=0;i<count;i++,p++)
  44.   { P1=*p;   /* 发送数码 */
  45.     delay(6000); /* 延时 */
  46.     P1=0x3f; }}/* 读SR */
  47. /* 延时子函数 */
  48. void delay(ui l)
  49. { ui i;
  50.   for (i=0;i<l;i++);}
  51. 接收程序
  52.     程序利用单片机的INT0以中断方式接收DTMF信号,接收的7位数码存入数组R_BUF中。
  53. #include <reg51.h>
  54. #define uc unsigned char
  55. uc data i,r_buf[7];
  56. /* 子函数(子程序)说明 */
  57. void initialize(void);
  58. void rece_init(void);
  59. /* 主函数(主程序) */
  60. void main(void)
  61. { SP=0x5f;
  62.   i=0;
  63.   initialize();
  64.   rece_init();
  65.   for(;;);}
  66. /* MT8880芯片初始化子函数 */
  67. void initialize(void)
  68. { P1=0x3f;  /* 读SR */
  69.   P1=0x20;  /* CRA=0000 */
  70.   P1=0x20;  /* CRA=0000 */
  71.   P1=0x28;  /* CRA=1000 */
  72.   P1=0x20; }  /* CRB=0000 */
  73. /* 接收初始化子函数 */
  74. void rece_init(void)
  75. { P1=0x24;  /* CRA=0100 */
  76.   IT0=1;    /* 边沿触发 */
  77.   IE=0x81; }  /* 允许中断,开中断 */
  78. /* 接收中断服务程序 */
  79. void int0(void) interrupt 0 using 1
  80. { P1=0x3f;  /* 读SR */
  81.   P1=0x1f;  /* 读RDR */
  82.   r_buf[i++]=P1&0x0f; } /* 保存 */