// Note! code is messy, but all it does is manually allocate // weighted points for all the common periods... // Normally this would be done by the PIC // in real time as each period was captured! This version // assumes the 30 periods are stored in a RAM array. // For details see; www.RomanBlack.com/DTMF/DTMF_alg.htm // clear the tone accumulators first for(i=0; i<16; i++) Dtone[i] = 0; // loop and process all the 30 periods for(i=0; i= 97 && per <= 100) Dtone[0] += 8; if(per >= 65 && per <= 67) Dtone[0] += 2; // 1. 770 1209 if(per >= 62 && per <= 64) Dtone[1] += 4; if(per >= 93 && per <= 95) Dtone[1] += 6; // 2. 852 1209 if(per >= 59 && per <= 62) Dtone[2] += 6; if(per >= 89 && per <= 92) Dtone[2] += 4; // 3. 941 1209 if(per >= 57 && per <= 59) Dtone[3] += 8; if(per >= 85 && per <= 88) Dtone[3] += 2; // 4. 697 1336 if(per >= 91 && per <= 93) Dtone[4] += 8; // 5. 770 1336 if(per >= 88 && per <= 90) Dtone[5] += 7; if(per >= 59 && per <= 61) Dtone[5] += 3; // 6. 852 1336 if(per >= 84 && per <= 86) Dtone[6] += 6; if(per >= 56 && per <= 58) Dtone[6] += 5; // 7. 941 1336 if(per >= 54 && per <= 56) Dtone[7] += 8; if(per >= 81 && per <= 83) Dtone[7] += 2; // 8. 697 1477 if(per >= 85 && per <= 87) Dtone[8] += 3; if(per >= 111 && per <= 117) Dtone[8] += 38; // 9. 770 1477 if(per >= 82 && per <= 84) Dtone[9] += 6; // 10. 852 1477 if(per >= 79 && per <= 81) Dtone[10] += 6; if(per >= 53 && per <= 55) Dtone[10] += 2; // 11. 941 1477 if(per >= 76 && per <= 78) Dtone[11] += 4; if(per >= 51 && per <= 53) Dtone[11] += 6; // 12. 697 1633 if(per >= 80 && per <= 82) Dtone[12] += 2; if(per >= 104 && per <= 108) Dtone[12] += 14; // 13. 770 1633 if(per >= 77 && per <= 79) Dtone[13] += 6; if(per >= 101 && per <= 104) Dtone[13] += 4; // 14. 852 1633 if(per >= 74 && per <= 76) Dtone[14] += 6; // 15. 941 1633 if(per >= 71 && per <= 73) Dtone[15] += 4; if(per >= 48 && per <= 50) Dtone[15] += 6; }