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

📄 icp.lis

📁 AVR单片机的电机测速程序
💻 LIS
字号:
                        .module ICP.C
                        .area data(ram, con, rel)
 0000           _Cnt_Old::
 0000                   .blkb 2
                        .area idata
 0000 0000              .word 0
                        .area data(ram, con, rel)
 0002                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 0002                   .dbsym e Cnt_Old _Cnt_Old i
 0002           _Cnt_New::
 0002                   .blkb 2
                        .area idata
 0002 0000              .word 0
                        .area data(ram, con, rel)
 0004                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 0004                   .dbsym e Cnt_New _Cnt_New i
 0004           _Motor_Period::
 0004                   .blkb 2
                        .area idata
 0004 0000              .word 0
                        .area data(ram, con, rel)
 0006                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 0006                   .dbsym e Motor_Period _Motor_Period i
 0006           _Cnt_Delta::
 0006                   .blkb 2
                        .area idata
 0006 0000              .word 0
                        .area data(ram, con, rel)
 0008                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 0008                   .dbsym e Cnt_Delta _Cnt_Delta i
 0008           _Motor_Period_Hbyte::
 0008                   .blkb 1
                        .area idata
 0008 00                .byte 0
                        .area data(ram, con, rel)
 0009                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 0009                   .dbsym e Motor_Period_Hbyte _Motor_Period_Hbyte c
 0009           _Motor_Period_Lbyte::
 0009                   .blkb 1
                        .area idata
 0009 00                .byte 0
                        .area data(ram, con, rel)
 000A                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 000A                   .dbsym e Motor_Period_Lbyte _Motor_Period_Lbyte c
 000A           _Icr1L_Value::
 000A                   .blkb 1
                        .area idata
 000A 00                .byte 0
                        .area data(ram, con, rel)
 000B                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 000B                   .dbsym e Icr1L_Value _Icr1L_Value c
 000B           _Icr1H_Value::
 000B                   .blkb 1
                        .area idata
 000B 00                .byte 0
                        .area data(ram, con, rel)
 000C                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 000C                   .dbsym e Icr1H_Value _Icr1H_Value c
 000C           _Flag::
 000C                   .blkb 1
                        .area idata
 000C 00                .byte 0
                        .area data(ram, con, rel)
 000D                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 000D                   .dbsym e Flag _Flag c
                        .area text(rom, con, rel)
 0000                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 0000                   .dbfunc e Timer1_Init _Timer1_Init fV
                        .even
 0000           _Timer1_Init::
 0000                   .dbline -1
 0000                   .dbline 17
 0000           ; #include "includes.h"
 0000           ; //---------------------------------------------------
 0000           ; unsigned int  Cnt_Old=0;
 0000           ; unsigned int  Cnt_New=0;
 0000           ; 
 0000           ; 
 0000           ; unsigned int Motor_Period=0;
 0000           ; unsigned int Cnt_Delta=0;
 0000           ; unsigned char Motor_Period_Hbyte=0;
 0000           ; unsigned char Motor_Period_Lbyte=0;
 0000           ; unsigned char Icr1L_Value=0;
 0000           ; unsigned char Icr1H_Value=0;
 0000           ; unsigned char Flag=0;
 0000           ; //--------------------------------------------------
 0000           ; //Timer1初始化和ICP中断处理函数
 0000           ; void Timer1_Init(void)
 0000           ; {
 0000                   .dbline 18
 0000           ; TCCR1B=0x00;             //停止计数器
 0000 2224              clr R2
 0002 2EBC              out 0x2e,R2
 0004                   .dbline 19
 0004           ; TCCR1B=0b11000010;       //时钟为系统时钟8分频,为1us
 0004 82EC              ldi R24,194
 0006 8EBD              out 0x2e,R24
 0008                   .dbline 20
 0008           ; TIMSK|=0b00100000;       //使能ICP中断
 0008 89B7              in R24,0x39
 000A 8062              ori R24,32
 000C 89BF              out 0x39,R24
 000E                   .dbline -2
 000E           L1:
 000E                   .dbline 0 ; func end
 000E 0895              ret
 0010                   .dbend
                        .area vector(rom, abs)
                        .org 20
 0014 0C940800          jmp _Timer1_Capt_Isr
                        .area text(rom, con, rel)
 0010                   .dbfile C:\DOCUME~1\www\桌面\motor_ce\ICP.C
 0010                   .dbfunc e Timer1_Capt_Isr _Timer1_Capt_Isr fV
                        .even
 0010           _Timer1_Capt_Isr::
 0010 0E940000          xcall push_lset
 0014                   .dbline -1
 0014                   .dbline 25
 0014           ; }
 0014           ; /*******************************************/
 0014           ; #pragma interrupt_handler Timer1_Capt_Isr:6
 0014           ; void Timer1_Capt_Isr(void)
 0014           ; {
 0014                   .dbline 26
 0014           ; CLI();
 0014 F894              cli
 0016                   .dbline 27
 0016           ; Icr1L_Value=ICR1L;
 0016 26B4              in R2,0x26
 0018 20920A00          sts _Icr1L_Value,R2
 001C                   .dbline 28
 001C           ; Icr1H_Value=ICR1H;
 001C 27B4              in R2,0x27
 001E 20920B00          sts _Icr1H_Value,R2
 0022                   .dbline 29
 0022           ; Cnt_New=Icr1L_Value+(256*Icr1H_Value);//获得现在计数值
 0022 222D              mov R18,R2
 0024 3327              clr R19
 0026 00E0              ldi R16,256
 0028 11E0              ldi R17,1
 002A 0E940000          xcall empy16s
 002E 20900A00          lds R2,_Icr1L_Value
 0032 3324              clr R3
 0034 200E              add R2,R16
 0036 311E              adc R3,R17
 0038 30920300          sts _Cnt_New+1,R3
 003C 20920200          sts _Cnt_New,R2
 0040                   .dbline 30
 0040           ; if(Cnt_New>=Cnt_Old)       //判断新老计数值关系 
 0040 20900000          lds R2,_Cnt_Old
 0044 30900100          lds R3,_Cnt_Old+1
 0048 40900200          lds R4,_Cnt_New
 004C 50900300          lds R5,_Cnt_New+1
 0050 4214              cp R4,R2
 0052 5304              cpc R5,R3
 0054 38F0              brlo L3
 0056                   .dbline 31
 0056           ;  {                        //新值大于老值
 0056                   .dbline 32
 0056           ;  Cnt_Delta=Cnt_New-Cnt_Old;
 0056 4218              sub R4,R2
 0058 5308              sbc R5,R3
 005A 50920700          sts _Cnt_Delta+1,R5
 005E 40920600          sts _Cnt_Delta,R4
 0062                   .dbline 33
 0062           ;  }
 0062 12C0              xjmp L4
 0064           L3:
 0064                   .dbline 35
 0064           ; else                      //新值小于老值
 0064           ;  {
 0064                   .dbline 36
 0064           ;  Cnt_Delta=0xffff-Cnt_Old+Cnt_New;
 0064 20900000          lds R2,_Cnt_Old
 0068 30900100          lds R3,_Cnt_Old+1
 006C 8FEF              ldi R24,65535
 006E 9FEF              ldi R25,255
 0070 8219              sub R24,R2
 0072 9309              sbc R25,R3
 0074 20900200          lds R2,_Cnt_New
 0078 30900300          lds R3,_Cnt_New+1
 007C 820D              add R24,R2
 007E 931D              adc R25,R3
 0080 90930700          sts _Cnt_Delta+1,R25
 0084 80930600          sts _Cnt_Delta,R24
 0088                   .dbline 37
 0088           ;  }
 0088           L4:
 0088                   .dbline 38
 0088           ; Cnt_Old=Cnt_New;
 0088 20900200          lds R2,_Cnt_New
 008C 30900300          lds R3,_Cnt_New+1
 0090 30920100          sts _Cnt_Old+1,R3
 0094 20920000          sts _Cnt_Old,R2
 0098                   .dbline 39
 0098           ; Motor_Period=Cnt_Delta*T0_CLK;//计算周期值
 0098 20910600          lds R18,_Cnt_Delta
 009C 30910700          lds R19,_Cnt_Delta+1
 00A0 01E0              ldi R16,1
 00A2 10E0              ldi R17,0
 00A4 0E940000          xcall empy16s
 00A8 10930500          sts _Motor_Period+1,R17
 00AC 00930400          sts _Motor_Period,R16
 00B0                   .dbline 40
 00B0           ; Motor_Period_Hbyte=((unsigned char)((Motor_Period& 0xff00)>>8));//计算周期高字节
 00B0 C801              movw R24,R16
 00B2 8070              andi R24,0
 00B4 892F              mov R24,R25
 00B6 9927              clr R25
 00B8 80930800          sts _Motor_Period_Hbyte,R24
 00BC                   .dbline 41
 00BC           ; Motor_Period_Lbyte=((unsigned char)(Motor_Period&0x00ff));//计算周期低字节
 00BC C801              movw R24,R16
 00BE 9070              andi R25,0
 00C0 80930900          sts _Motor_Period_Lbyte,R24
 00C4                   .dbline 42
 00C4           ; if(Motor_Period_Lbyte=0xff)//避免与帧头重复
 00C4 8FEF              ldi R24,255
 00C6 80930900          sts _Motor_Period_Lbyte,R24
 00CA 8823              tst R24
 00CC 19F0              breq L5
 00CE                   .dbline 43
 00CE           ;  {
 00CE                   .dbline 44
 00CE           ;  Motor_Period_Lbyte=0xfe;
 00CE 8EEF              ldi R24,254
 00D0 80930900          sts _Motor_Period_Lbyte,R24
 00D4                   .dbline 45
 00D4           ;  }
 00D4           L5:
 00D4                   .dbline 46
 00D4           ; Flag++;
 00D4 80910C00          lds R24,_Flag
 00D8 8F5F              subi R24,255    ; addi 1
 00DA 80930C00          sts _Flag,R24
 00DE                   .dbline 47
 00DE           ; if(Flag%100==0)
 00DE 14E6              ldi R17,100
 00E0 082F              mov R16,R24
 00E2 0E940000          xcall mod8u
 00E6 0023              tst R16
 00E8 59F4              brne L7
 00EA                   .dbline 48
 00EA           ;  {
 00EA                   .dbline 49
 00EA           ;  Usart_Tx(0xff);//上传帧头
 00EA 0FEF              ldi R16,255
 00EC 0E940000          xcall _Usart_Tx
 00F0                   .dbline 50
 00F0           ;  Usart_Tx(Motor_Period_Hbyte);//上传周期高字节
 00F0 00910800          lds R16,_Motor_Period_Hbyte
 00F4 0E940000          xcall _Usart_Tx
 00F8                   .dbline 51
 00F8           ;  Usart_Tx(Motor_Period_Lbyte);//上传周期低字节
 00F8 00910900          lds R16,_Motor_Period_Lbyte
 00FC 0E940000          xcall _Usart_Tx
 0100                   .dbline 52
 0100           ;  }
 0100           L7:
 0100                   .dbline 53
 0100           ; SEI();
 0100 7894              sei
 0102                   .dbline -2
 0102           L2:
 0102 0E940000          xcall pop_lset
 0106                   .dbline 0 ; func end
 0106 1895              reti
 0108                   .dbend

⌨️ 快捷键说明

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