📄 icp.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 + -