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

📄 pro.lis

📁 数字频率计数字频率计数字频率计数字频率计
💻 LIS
📖 第 1 页 / 共 4 页
字号:
 00F6 9A93              st -y,R25
 00F8 2FB6              in R2,0x3f
 00FA 2A92              st -y,R2
 00FC                   .dbline -1
 00FC                   .dbline 88
 00FC                   .dbline 90
 00FC 80912300          lds R24,_count
 0100 8F5F              subi R24,255    ; addi 1
 0102 282E              mov R2,R24
 0104 20922300          sts _count,R2
 0108 8530              cpi R24,5
 010A 30F0              brlo L19
 010C                   .dbline 91
 010C                   .dbline 92
 010C 81E0              ldi R24,1
 010E 80932200          sts _display_is_ok,R24
 0112                   .dbline 93
 0112 2224              clr R2
 0114 20922300          sts _count,R2
 0118                   .dbline 94
 0118           L19:
 0118                   .dbline -2
 0118           L18:
 0118 2990              ld R2,y+
 011A 2FBE              out 0x3f,R2
 011C 9991              ld R25,y+
 011E 8991              ld R24,y+
 0120 2990              ld R2,y+
 0122                   .dbline 0 ; func end
 0122 1895              reti
 0124                   .dbend
 0124                   .dbfunc e timer1_init _timer1_init fV
                        .even
 0124           _timer1_init::
 0124                   .dbline -1
 0124                   .dbline 99
 0124           ; }
 0124           ; 
 0124           ; uchar display_is_ok=0;
 0124           ; uchar count=0;
 0124           ; //T0比较中断服务程序
 0124           ; #pragma interrupt_handler timer0_comp_isr:20
 0124           ; void timer0_comp_isr(void)
 0124           ; {
 0124           ;  //中断发生时刻在TCNT0=OCR0]
 0124           ;  if(++count >=5)
 0124           ;   {
 0124           ;    display_is_ok=1;
 0124           ;    count=0;
 0124           ;    }
 0124           ; }
 0124           ; 
 0124           ; //定时T1初始化
 0124           ; void timer1_init(void)
 0124           ; {
 0124                   .dbline 100
 0124           ;  TCCR1B = 0x00;//停止定时器
 0124 2224              clr R2
 0126 2EBC              out 0x2e,R2
 0128                   .dbline 101
 0128           ;  TIMSK |= 0x04;//中断允许
 0128 89B7              in R24,0x39
 012A 8460              ori R24,4
 012C 89BF              out 0x39,R24
 012E                   .dbline 102
 012E           ;  TCNT1H = 0x00;
 012E 2DBC              out 0x2d,R2
 0130                   .dbline 103
 0130           ;  TCNT1L = 0x00;//初始值
 0130 2CBC              out 0x2c,R2
 0132                   .dbline 104
 0132           ;  OCR1AH = 0xFF;
 0132 8FEF              ldi R24,255
 0134 8BBD              out 0x2b,R24
 0136                   .dbline 105
 0136           ;  OCR1AL = 0xFF;//匹配A值
 0136 8ABD              out 0x2a,R24
 0138                   .dbline 106
 0138           ;  OCR1BH = 0xFF;
 0138 89BD              out 0x29,R24
 013A                   .dbline 107
 013A           ;  OCR1BL = 0xFF;//匹配B值
 013A 88BD              out 0x28,R24
 013C                   .dbline 108
 013C           ;  ICR1H  = 0xFF;
 013C 87BD              out 0x27,R24
 013E                   .dbline 109
 013E           ;  ICR1L  = 0xFF;//输入捕捉匹配值
 013E 86BD              out 0x26,R24
 0140                   .dbline 110
 0140           ;  TCCR1A = 0x0C;
 0140 8CE0              ldi R24,12
 0142 8FBD              out 0x2f,R24
 0144                   .dbline 111
 0144           ;  TCCR1B = 0x06;//启动定时器
 0144 86E0              ldi R24,6
 0146 8EBD              out 0x2e,R24
 0148                   .dbline -2
 0148           L21:
 0148                   .dbline 0 ; func end
 0148 0895              ret
 014A                   .dbend
                        .area vector(rom, abs)
                        .org 32
 0020 0C94A500          jmp _timer1_ovf_isr
                        .area text(rom, con, rel)
 014A                   .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
 014A                   .dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
                        .even
 014A           _timer1_ovf_isr::
 014A 8A93              st -y,R24
 014C 8FB7              in R24,0x3f
 014E 8A93              st -y,R24
 0150                   .dbline -1
 0150                   .dbline 118
 0150           ; }
 0150           ; 
 0150           ; 
 0150           ; //定时器T1溢出中断服务程序
 0150           ; #pragma interrupt_handler timer1_ovf_isr:9
 0150           ; void timer1_ovf_isr(void)
 0150           ; {
 0150                   .dbline 121
 0150           ; // TCNT1H = 0x00; //重装值高位
 0150           ; // TCNT1L = 0x00; //重装值低位
 0150           ;  T1_OV_Times=1;
 0150 81E0              ldi R24,1
 0152 80932100          sts _T1_OV_Times,R24
 0156                   .dbline -2
 0156           L22:
 0156 8991              ld R24,y+
 0158 8FBF              out 0x3f,R24
 015A 8991              ld R24,y+
 015C                   .dbline 0 ; func end
 015C 1895              reti
 015E                   .dbend
 015E                   .dbfunc e timer2_init _timer2_init fV
                        .even
 015E           _timer2_init::
 015E                   .dbline -1
 015E                   .dbline 126
 015E           ; }
 015E           ; 
 015E           ; //定时器T2初始化
 015E           ; void timer2_init(void)
 015E           ; {
 015E                   .dbline 127
 015E           ;  TCCR2  = 0x00;//停止定时器
 015E 2224              clr R2
 0160 25BC              out 0x25,R2
 0162                   .dbline 128
 0162           ;  ASSR   = 0x08;//异步时钟模式
 0162 88E0              ldi R24,8
 0164 82BD              out 0x22,R24
 0166                   .dbline 129
 0166           ;  TCNT2  = 0x80;//初始值
 0166 80E8              ldi R24,128
 0168 84BD              out 0x24,R24
 016A                   .dbline 130
 016A           ;  OCR2   = 0x7F;//匹配值
 016A 8FE7              ldi R24,127
 016C 83BD              out 0x23,R24
 016E                   .dbline 131
 016E           ;  TIMSK |= 0x40;//中断允许
 016E 89B7              in R24,0x39
 0170 8064              ori R24,64
 0172 89BF              out 0x39,R24
 0174                   .dbline 132
 0174           ;  TCCR2  = 0x06;//启动定时器
 0174 86E0              ldi R24,6
 0176 85BD              out 0x25,R24
 0178                   .dbline -2
 0178           L23:
 0178                   .dbline 0 ; func end
 0178 0895              ret
 017A                   .dbend
                        .area data(ram, con, rel)
 0024                   .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
 0024           _second_is_ok::
 0024                   .blkb 1
                        .area idata
 0024 00                .byte 0
                        .area data(ram, con, rel)
 0025                   .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
 0025                   .dbsym e second_is_ok _second_is_ok c
                        .area vector(rom, abs)
                        .org 16
 0010 0C94BD00          jmp _timer2_ovf_isr
                        .area data(ram, con, rel)
 0025                   .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
                        .area text(rom, con, rel)
 017A                   .dbfile E:\张秋伟\我的实验\数字频率计\pro.c
 017A                   .dbfunc e timer2_ovf_isr _timer2_ovf_isr fV
                        .even
 017A           _timer2_ovf_isr::
 017A 2A92              st -y,R2
 017C 3A92              st -y,R3
 017E 4A92              st -y,R4
 0180 5A92              st -y,R5
 0182 6A92              st -y,R6
 0184 7A92              st -y,R7
 0186 8A92              st -y,R8
 0188 9A92              st -y,R9
 018A 0A93              st -y,R16
 018C 1A93              st -y,R17
 018E 2A93              st -y,R18
 0190 3A93              st -y,R19
 0192 8A93              st -y,R24
 0194 9A93              st -y,R25
 0196 AA93              st -y,R26
 0198 BA93              st -y,R27
 019A EA93              st -y,R30
 019C 2FB6              in R2,0x3f
 019E 2A92              st -y,R2
 01A0 0E940000          xcall push_gset2
 01A4                   .dbline -1
 01A4                   .dbline 140
 01A4           ; }
 01A4           ; 
 01A4           ; uchar second_is_ok=0;
 01A4           ; //T2溢出中断服务程序
 01A4           ; 
 01A4           ; #pragma interrupt_handler timer2_ovf_isr:5
 01A4           ; void timer2_ovf_isr(void)
 01A4           ; {
 01A4                   .dbline 142
 01A4           ;  
 01A4           ;  TCCR1B = 0x00;//停止定时器
 01A4 2224              clr R2
 01A6 2EBC              out 0x2e,R2
 01A8                   .dbline 143
 01A8           ;  PORTB &=~(1<<PB0);  //关闭闸门
 01A8 C098              cbi 0x18,0
 01AA                   .dbline 144
 01AA           ;  second_is_ok=1;
 01AA 81E0              ldi R24,1
 01AC 80932400          sts _second_is_ok,R24
 01B0                   .dbline 145
 01B0           ;  value=TCNT1L;
 01B0 2CB4              in R2,0x2c
 01B2 3324              clr R3
 01B4 4424              clr R4
 01B6 5524              clr R5
 01B8 30920E00          sts _value+1,R3
 01BC 20920D00          sts _value,R2
 01C0 50921000          sts _value+2+1,R5
 01C4 40920F00          sts _value+2,R4
 01C8                   .dbline 146
 01C8           ;  value|=(TCNT1H << 8); //然后读高位
 01C8 2DB4              in R2,0x2d
 01CA 3324              clr R3
 01CC 322C              mov R3,R2
 01CE 2224              clr R2
 01D0 4424              clr R4
 01D2 37FC              sbrc R3,7
 01D4 4094              com R4
 01D6 5524              clr R5
 01D8 47FC              sbrc R4,7
 01DA 5094              com R5
 01DC 80900F00          lds R8,_value+2
 01E0 90901000          lds R9,_value+2+1
 01E4 60900D00          lds R6,_value
 01E8 70900E00          lds R7,_value+1
 01EC 6228              or R6,R2
 01EE 7328              or R7,R3
 01F0 8428              or R8,R4
 01F2 9528              or R9,R5
 01F4 70920E00          sts _value+1,R7
 01F8 60920D00          sts _value,R6
 01FC 90921000          sts _value+2+1,R9
 0200 80920F00          sts _value+2,R8
 0204                   .dbline 148
 0204           ;   //读取计数值
 0204           ; Freq_H16=value;
 0204 1301              movw R2,R6
 0206 2401              movw R4,R8
 0208 30921600          sts _Freq_H16+1,R3
 020C 20921500          sts _Freq_H16,R2
 0210 50921800          sts _Freq_H16+2+1,R5
 0214 40921700          sts _Freq_H16+2,R4
 0218                   .dbline 149
 0218           ; counter=Freq_H16;
 0218 40901700          lds R4,_Freq_H16+2
 021C 50901800          lds R5,_Freq_H16+2+1
 0220 20901500          lds R2,_Freq_H16
 0224 30901600          lds R3,_Freq_H16+1
 0228 30921E00          sts _counter+1,R3
 022C 20921D00          sts _counter,R2
 0230 50922000          sts _counter+2+1,R5
 0234 40921F00          sts _counter+2,R4
 0238                   .dbline 150
 0238           ; Freq_H16 =Freq_H16*256;
 0238 40E0              ldi R20,0
 023A 51E0              ldi R21,1
 023C 60E0              ldi R22,0
 023E 70E0              ldi R23,0
 0240 5A92              st -y,R5
 0242 4A92              st -y,R4
 0244 3A92              st -y,R3
 0246 2A92              st -y,R2
 0248 8A01              movw R16,R20
 024A 9B01              movw R18,R22
 024C 0E940000          xcall empy32s
 0250 10931600          sts _Freq_H16+1,R17
 0254 00931500          sts _Freq_H16,R16
 0258 30931800          sts _Freq_H16+2+1,R19
 025C 20931700          sts _Freq_H16+2,R18
 0260                   .dbline 152
 0260           ; 
 0260           ; Freq_L8 =(PIND & 0b11111111);    //读取计数值的低8位
 0260 80B3              in R24,0x10
 0262 9927              clr R25
 0264 9070              andi R25,0
 0266 1C01              movw R2,R24
 0268 4424              clr R4
 026A 37FC              sbrc R3,7
 026C 4094              com R4
 026E 5524              clr R5
 0270 47FC              sbrc R4,7
 0272 5094              com R5
 0274 30921A00          sts _Freq_L8+1,R3
 0278 20921900          sts _Freq_L8,R2
 027C 50921C00          sts _Freq_L8+2+1,R5
 0280 40921B00          sts _Freq_L8+2,R4
 0284                   .dbline 153
 0284           ; Freq=Freq_H16+Freq_L8;
 0284 3801              movw R6,R16
 0286 4901              movw R8,R18
 0288 620C              add R6,R2
 028A 731C              adc R7,R3
 028C 841C              adc R8,R4
 028E 951C              adc R9,R5
 0290 70921200          sts _Freq+1,R7
 0294 60921100          sts _Freq,R6
 0298 90921400          sts _Freq+2+1,R9
 029C 80921300          sts _Freq+2,R8
 02A0                   .dbline 154
 02A0           ;  if(T1_OV_Times !=0)
 02A0 20902100          lds R2,_T1_OV_Times
 02A4 2220              tst R2
 02A6 31F1              breq L25
 02A8                   .dbline 155
 02A8           ;  {
 02A8                   .dbline 156
 02A8           ;    Freq+=(unsigned long)0xffff*0xff*T1_OV_Times;
 02A8 3324              clr R3
 02AA 4424              clr R4
 02AC 5524              clr R5
 02AE 41E0              ldi R20,1
 02B0 5FEF              ldi R21,255
 02B2 6EEF              ldi R22,254
 02B4 70E0              ldi R23,0
 02B6 5A92              st -y,R5
 02B8 4A92              st -y,R4
 02BA 3A92              st -y,R3
 02BC 2A92              st -y,R2
 02BE 8A01              movw R16,R20
 02C0 9B01              movw R18,R22
 02C2 0E940000          xcall empy32u
 02C6 40901300          lds R4,_Freq+2
 02CA 50901400          lds R5,_Freq+2+1
 02CE 20901100          lds R2,_Freq
 02D2 30901200          lds R3,_Freq+1
 02D6 200E              add R2,R16
 02D8 311E              adc R3,R17
 02DA 421E              adc R4,R18
 02DC 531E              adc R5,R19
 02DE 30921200          sts _Freq+1,R3
 02E2 20921100          sts _Freq,R2
 02E6 50921400          sts _Freq+2+1,R5
 02EA 40921300          sts _Freq+2,R4
 02EE                   .dbline 157
 02EE           ;    T1_OV_Times=0;
 02EE 2224              clr R2
 02F0 20922100          sts _T1_OV_Times,R2
 02F4                   .dbline 158

⌨️ 快捷键说明

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