⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 dtmf.lis

📁 AVR系列单片机源代码例子,可在ICCAVR中直接使用
💻 LIS
📖 第 1 页 / 共 2 页
字号:
                       ; 
                       ; //高频(列)
                       ; //1209hz  ---> x_SW = 79
                       ; //1336hz  ---> x_SW = 87
                       ; //1477hz  ---> x_SW = 96
                       ; //1633hz  ---> x_SW = 107
                       ; 
                       ; const unsigned char auc_frequencyH [4] = {
                       ; 107,96,
                       ; 87,79};
                       ; 
                       ; //低频(行)
                       ; //697hz  ---> x_SW = 46
                       ; //770hz  ---> x_SW = 50
                       ; //852hz  ---> x_SW = 56
                       ; //941hz  ---> x_SW = 61
                       ; 
                       ; const unsigned char auc_frequencyL [4] = {
                       ; 61,56,
                       ; 50,46};
                       ; 
                       ; 
                       ; //**************************  全局变量 ****************************
                       ; unsigned char x_SWa = 0x00;               // 高频信号脉冲宽度
                       ; unsigned char x_SWb = 0x00;               // 低频信号脉冲宽度
                       ; unsigned int  X_LUTaExt = 0;              
                       ; unsigned int  X_LUTbExt = 0;              
                       ; unsigned int  X_LUTa;                   
                       ; unsigned int  X_LUTb;                     
                       ; 
                       ; /*****************************************************************
                       ;                     定时器溢出中断服务程序
                       ; ******************************************************************/
                       ; void ISR_T1_Overflow (void)
                       ; { 
 001E                   .dbline 130
                       ;   X_LUTaExt += x_SWa;       
 001E 20900000          lds R2,_x_SWa
 0022 3324              clr R3
 0024 50900300          lds R5,_X_LUTaExt+1
 0028 40900200          lds R4,_X_LUTaExt
 002C 420C              add R4,R2
 002E 531C              adc R5,R3
 0030 50920300          sts _X_LUTaExt+1,R5
 0034 40920200          sts _X_LUTaExt,R4
 0038                   .dbline 131
                       ;   X_LUTbExt += x_SWb;
 0038 20900100          lds R2,_x_SWb
 003C 3324              clr R3
 003E 50900500          lds R5,_X_LUTbExt+1
 0042 40900400          lds R4,_X_LUTbExt
 0046 420C              add R4,R2
 0048 531C              adc R5,R3
 004A 50920500          sts _X_LUTbExt+1,R5
 004E 40920400          sts _X_LUTbExt,R4
 0052                   .dbline 133
                       ;             // 数据规格化
                       ;   X_LUTa  =  (char)(((X_LUTaExt+4) >> 3)&(0x007F)); 
 0052 23E0              ldi R18,3
 0054 30E0              ldi R19,0
 0056 10910300          lds R17,_X_LUTaExt+1
 005A 00910200          lds R16,_X_LUTaExt
 005E 0C5F              subi R16,252  ; offset = 4
 0060 1F4F              sbci R17,255
 0062 00D0              rcall lsr16
 0064 802F              mov R24,R16
 0066 912F              mov R25,R17
 0068 8F77              andi R24,127
 006A 9070              andi R25,0
 006C 282E              mov R2,R24
 006E 3324              clr R3
 0070 30920300          sts _X_LUTa+1,R3
 0074 20920200          sts _X_LUTa,R2
 0078                   .dbline 134
                       ;   X_LUTb  =  (char)(((X_LUTbExt+4) >> 3)&(0x007F));
 0078 23E0              ldi R18,3
 007A 30E0              ldi R19,0
 007C 10910500          lds R17,_X_LUTbExt+1
 0080 00910400          lds R16,_X_LUTbExt
 0084 0C5F              subi R16,252  ; offset = 4
 0086 1F4F              sbci R17,255
 0088 00D0              rcall lsr16
 008A 802F              mov R24,R16
 008C 912F              mov R25,R17
 008E 8F77              andi R24,127
 0090 9070              andi R25,0
 0092 282E              mov R2,R24
 0094 3324              clr R3
 0096 30920100          sts _X_LUTb+1,R3
 009A 20920000          sts _X_LUTb,R2
 009E                   .dbline 136
                       ;            // 计算 PWM 值: 高频值 + 3/4 低频值
                       ;   OCR1A = (auc_SinParam[X_LUTa] + (auc_SinParam[X_LUTb]-(auc_SinParam[X_LUTb]>>2)));
 009E 80E0              ldi R24,<_auc_SinParam
 00A0 90E0              ldi R25,>_auc_SinParam
 00A2 30900100          lds R3,_X_LUTb+1
 00A6 20900000          lds R2,_X_LUTb
 00AA 280E              add R2,R24
 00AC 391E              adc R3,R25
 00AE E22D              mov R30,R2
 00B0 F32D              mov R31,R3
 00B2 C895              lpm
 00B4 202C              mov R2,R0
 00B6 3324              clr R3
 00B8 22E0              ldi R18,2
 00BA 30E0              ldi R19,0
 00BC 022D              mov R16,R2
 00BE 132D              mov R17,R3
 00C0 00D0              rcall asr16
 00C2 201A              sub R2,R16
 00C4 310A              sbc R3,R17
 00C6 80E0              ldi R24,<_auc_SinParam
 00C8 90E0              ldi R25,>_auc_SinParam
 00CA 50900300          lds R5,_X_LUTa+1
 00CE 40900200          lds R4,_X_LUTa
 00D2 480E              add R4,R24
 00D4 591E              adc R5,R25
 00D6 E42D              mov R30,R4
 00D8 F52D              mov R31,R5
 00DA C895              lpm
 00DC 402C              mov R4,R0
 00DE 5524              clr R5
 00E0 420C              add R4,R2
 00E2 531C              adc R5,R3
 00E4 50924B00          sts 74+1,R5
 00E8 40924A00          sts 74,R4
 00EC                   .dbline 137}
                       ; }
 00EC                 L1:
 00EC 0990              ld R0,y+
 00EE 0FBE              out 0x3f,R0
 00F0 F991              ld R31,y+
 00F2 E991              ld R30,y+
 00F4 9991              ld R25,y+
 00F6 8991              ld R24,y+
 00F8 3991              ld R19,y+
 00FA 2991              ld R18,y+
 00FC 1991              ld R17,y+
 00FE 0991              ld R16,y+
 0100 5990              ld R5,y+
 0102 4990              ld R4,y+
 0104 3990              ld R3,y+
 0106 2990              ld R2,y+
 0108 0990              ld R0,y+
 010A 1895              reti
 010C                   .dbfunc s init _init fI
                         .even
 010C                 _init::
 010C                   .dbline 143{
                       ; 
                       ; /***********************************************************
                       ;                         初始化
                       ; ***********************************************************/
                       ; void init (void)
                       ; {
 010C                   .dbline 144
                       ;   MCUCR=0x00;
 010C 2224              clr R2
 010E 25BE              out 0x35,R2
 0110                   .dbline 145
                       ;   TIMSK  = 0x80;                     // T1 溢出中断使能
 0110 80E8              ldi R24,128
 0112 89BF              out 0x39,R24
 0114                   .dbline 146
                       ;   TCCR1A = (1<<COM1A1)+(1<<PWM10);   // 不翻转、8位PWM
 0114 81E8              ldi R24,129
 0116 8FBD              out 0x2f,R24
 0118                   .dbline 147
                       ;   TCCR1B = (1<<CS10);                // 预分频系数为1、即CLK/1
 0118 81E0              ldi R24,1
 011A 8EBD              out 0x2e,R24
 011C                   .dbline 148
                       ;   DDRD   = (1 <<PD5);               // PD5 (OC1A)用作输出
 011C 80E2              ldi R24,32
 011E 81BB              out 0x11,R24
 0120                   .dbline 149
                       ;   _SEI();                            // 全局中断使能
 0120 7894              sei
 0122                   .dbline 150}
                       ; }
 0122                 L2:
 0122 0895              ret
 0124                   .dbfunc s Delay _Delay fI
                       ;              i -> R16,R17
                         .even
 0124                 _Delay::
 0124                   .dbline 156{
                       ; 
                       ; /*********************************************************************
                       ;       为从PORT C口读取稳定的按键数据,所必须的延时程序(消抖延时)
                       ; *********************************************************************/
                       ; void Delay (void)
                       ; {
 0124                   .dbline 158
 0124 0027              clr R16
 0126 1127              clr R17
 0128                 L4:
 0128                   .dbline 158
 0128 0000              nop
 012A                 L5:
 012A                   .dbline 158
                       ;   int i;
                       ;   for (i = 0; i < delaycyc; i++) _NOP();
 012A 0F5F              subi R16,255  ; offset = 1
 012C 1F4F              sbci R17,255
 012E                   .dbline 158
 012E 0A30              cpi R16,10
 0130 E0E0              ldi R30,0
 0132 1E07              cpc R17,R30
 0134 CCF3              brlt L4
 0136                   .dbline 159}
                       ; }
 0136                 L3:
 0136 0895              ret
 0138                   .dbsym r i 16 I
 0138                   .dbfunc s main _main fI
                       ;     uc_Counter -> R20
                       ;       uc_Input -> R22
                         .even
 0138                 _main::
 0138                   .dbline 170{
                       ; 
                       ; /********************************************************************
                       ;                             主程序
                       ;       从PORT C口读取按键数据(如:SL

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -