📄 test_t1.lis
字号:
.module test_t1.c
.area data(ram, con, rel)
0000 _N::
0000 .blkb 1
.area idata
0000 00 .byte 0
.area data(ram, con, rel)
0001 .dbfile test_t1.c
0001 .dbsym e N _N c
0001 _T1OVF_NUM::
0001 .blkb 2
.area idata
0001 0000 .word 0
.area data(ram, con, rel)
0003 .dbfile test_t1.c
0003 .dbsym e T1OVF_NUM _T1OVF_NUM i
.area text(rom, con, rel)
0000 .dbfile test_t1.c
0000 .dbfunc e INT0_INIT _INT0_INIT fV
.even
0000 _INT0_INIT::
0000 .dbline -1
0000 .dbline 38
0000 ; //*************************************************
0000 ; //测试功能:t1内部计数,如有溢出则计量溢出次数
0000 ; //测试方法:
0000 ; //测试结果:ok
0000 ; //时钟频率:外部8m
0000 ; //管脚分配:
0000 ; //注意事项:
0000 ; //完成时间:2009.03.15
0000 ; //**************************************************
0000 ;
0000 ; //**************************************************
0000 ; //头文件
0000 ; //**************************************************
0000 ; #include <iom16v.h>
0000 ; #include <macros.h>
0000 ; //**************************************************
0000 ;
0000 ;
0000 ; //*****************************************************
0000 ; //全局变量定义
0000 ; //*****************************************************
0000 ; unsigned char N=0;//用来区别是第一次外部中断还是第二次中断
0000 ; unsigned int T1OVF_NUM=0;//用来计定时器T1的溢出次数
0000 ; unsigned long int T1_NUM;//T1计的总时钟的个数
0000 ;
0000 ; //*****************************************************
0000 ; //函数声明
0000 ; //*****************************************************
0000 ; void INT0_INIT(void);
0000 ; void T1_INIT(void);
0000 ;
0000 ; //*****************************************************
0000 ; //函数名称:void INT0_INIT(void)
0000 ; //函数功能:int0初始化,上升沿产生中断,使能中断
0000 ; //注意事项:未开总中断
0000 ; //*****************************************************
0000 ; void INT0_INIT(void)
0000 ; {
0000 .dbline 39
0000 ; MCUCR|=((1<<ISC01)|(1<<ISC00));
0000 85B7 in R24,0x35
0002 8360 ori R24,3
0004 85BF out 0x35,R24
0006 .dbline 40
0006 ; GICR|=(1<<INT0);
0006 8BB7 in R24,0x3b
0008 8064 ori R24,64
000A 8BBF out 0x3b,R24
000C .dbline -2
000C L1:
000C .dbline 0 ; func end
000C 0895 ret
000E .dbend
.area vector(rom, abs)
.org 4
0004 0C940700 jmp _INT0_INTERRUPT
.area text(rom, con, rel)
000E .dbfile test_t1.c
000E .dbfunc e INT0_INTERRUPT _INT0_INTERRUPT fV
.even
000E _INT0_INTERRUPT::
000E 0A92 st -y,R0
0010 1A92 st -y,R1
0012 2A92 st -y,R2
0014 3A92 st -y,R3
0016 4A92 st -y,R4
0018 5A92 st -y,R5
001A 6A92 st -y,R6
001C 7A92 st -y,R7
001E 8A92 st -y,R8
0020 9A92 st -y,R9
0022 0A93 st -y,R16
0024 1A93 st -y,R17
0026 2A93 st -y,R18
0028 3A93 st -y,R19
002A 8A93 st -y,R24
002C 9A93 st -y,R25
002E EA93 st -y,R30
0030 0FB6 in R0,0x3f
0032 0A92 st -y,R0
0034 0E940000 xcall push_gset2
0038 .dbline -1
0038 .dbline 49
0038 ; }
0038 ; //*****************************************************
0038 ; //函数名称:void INT0_INTERRUPT(void)
0038 ; //函数功能:中断处理,N+1
0038 ; //注意事项:
0038 ; //*****************************************************
0038 ; #pragma interrupt_handler INT0_INTERRUPT:2
0038 ; void INT0_INTERRUPT(void)
0038 ; {
0038 .dbline 50
0038 ; if(!N)
0038 20900000 lds R2,_N
003C 2220 tst R2
003E 49F4 brne L3
0040 .dbline 51
0040 ; {
0040 .dbline 52
0040 ; TCCR1B=0X01;//开始内部计数
0040 81E0 ldi R24,1
0042 8EBD out 0x2e,R24
0044 .dbline 53
0044 ; MCUCR=0X02;//设置外部中断0下降沿产生中断
0044 82E0 ldi R24,2
0046 85BF out 0x35,R24
0048 .dbline 54
0048 ; N++;
0048 822D mov R24,R2
004A 8F5F subi R24,255 ; addi 1
004C 80930000 sts _N,R24
0050 .dbline 55
0050 ; }
0050 45C0 xjmp L4
0052 L3:
0052 .dbline 57
0052 .dbline 58
0052 2224 clr R2
0054 2EBC out 0x2e,R2
0056 .dbline 59
0056 F894 cli
0058 .dbline 61
0058 20900100 lds R2,_T1OVF_NUM
005C 30900200 lds R3,_T1OVF_NUM+1
0060 4424 clr R4
0062 5524 clr R5
0064 30920100 sts _T1_NUM+1,R3
0068 20920000 sts _T1_NUM,R2
006C 50920300 sts _T1_NUM+2+1,R5
0070 40920200 sts _T1_NUM+2,R4
0074 .dbline 62
0074 40900200 lds R4,_T1_NUM+2
0078 50900300 lds R5,_T1_NUM+2+1
007C 20900000 lds R2,_T1_NUM
0080 30900100 lds R3,_T1_NUM+1
0084 40E0 ldi R20,0
0086 50E0 ldi R21,0
0088 61E0 ldi R22,1
008A 70E0 ldi R23,0
008C 5A92 st -y,R5
008E 4A92 st -y,R4
0090 3A92 st -y,R3
0092 2A92 st -y,R2
0094 8A01 movw R16,R20
0096 9B01 movw R18,R22
0098 0E940000 xcall empy32u
009C 1801 movw R2,R16
009E 2901 movw R4,R18
00A0 6CB4 in R6,0x2c
00A2 7DB4 in R7,0x2d
00A4 8824 clr R8
00A6 9924 clr R9
00A8 260C add R2,R6
00AA 371C adc R3,R7
00AC 481C adc R4,R8
00AE 591C adc R5,R9
00B0 30920100 sts _T1_NUM+1,R3
00B4 20920000 sts _T1_NUM,R2
00B8 50920300 sts _T1_NUM+2+1,R5
00BC 40920200 sts _T1_NUM+2,R4
00C0 .dbline 64
00C0 2224 clr R2
00C2 3324 clr R3
00C4 30920200 sts _T1OVF_NUM+1,R3
00C8 20920100 sts _T1OVF_NUM,R2
00CC .dbline 65
00CC 3DBC out 0x2d,R3
00CE 2CBC out 0x2c,R2
00D0 .dbline 66
00D0 85B7 in R24,0x35
00D2 8360 ori R24,3
00D4 85BF out 0x35,R24
00D6 .dbline 67
00D6 20920000 sts _N,R2
00DA .dbline 68
00DA 7894 sei
00DC .dbline 69
00DC L4:
00DC .dbline -2
00DC L2:
00DC 0E940000 xcall pop_gset2
00E0 0990 ld R0,y+
00E2 0FBE out 0x3f,R0
00E4 E991 ld R30,y+
00E6 9991 ld R25,y+
00E8 8991 ld R24,y+
00EA 3991 ld R19,y+
00EC 2991 ld R18,y+
00EE 1991 ld R17,y+
00F0 0991 ld R16,y+
00F2 9990 ld R9,y+
00F4 8990 ld R8,y+
00F6 7990 ld R7,y+
00F8 6990 ld R6,y+
00FA 5990 ld R5,y+
00FC 4990 ld R4,y+
00FE 3990 ld R3,y+
0100 2990 ld R2,y+
0102 1990 ld R1,y+
0104 0990 ld R0,y+
0106 .dbline 0 ; func end
0106 1895 reti
0108 .dbend
0108 .dbfunc e T1_INIT _T1_INIT fV
.even
0108 _T1_INIT::
0108 .dbline -1
0108 .dbline 77
0108 ; else
0108 ; {
0108 ; TCCR1B=0X00;//定时器t1停止工作
0108 ; CLI();//关中断,进行数据处理
0108 ; //数据处理
0108 ; T1_NUM=T1OVF_NUM;
0108 ; T1_NUM=T1_NUM*65536+TCNT1;
0108 ; //数据处理结束
0108 ; T1OVF_NUM=0;
0108 ; TCNT1=0X0000;
0108 ; MCUCR|=((1<<ISC01)|(1<<ISC00));//设置外部上升沿中断
0108 ; N=0;//
0108 ; SEI();
0108 ; }
0108 ; }
0108 ; //**************************************************
0108 ; //函数名称:void T1_INIT(void)
0108 ; //函数功能:内部定时
0108 ; //注意事项,定时器未工作,定时器工作,需+TCCR1B=0X01;
0108 ; //**************************************************
0108 ; void T1_INIT(void)
0108 ; {
0108 .dbline 78
0108 ; TCCR1A=0X00;
0108 2224 clr R2
010A 2FBC out 0x2f,R2
010C .dbline 79
010C ; TCNT1=0X0000;
010C 3324 clr R3
010E 3DBC out 0x2d,R3
0110 2CBC out 0x2c,R2
0112 .dbline 80
0112 ; TIMSK|=(1<<TOIE1);
0112 89B7 in R24,0x39
0114 8460 ori R24,4
0116 89BF out 0x39,R24
0118 .dbline -2
0118 L5:
0118 .dbline 0 ; func end
0118 0895 ret
011A .dbend
.area vector(rom, abs)
.org 32
0020 0C948D00 jmp _T1_OVF
.area text(rom, con, rel)
011A .dbfile test_t1.c
011A .dbfunc e T1_OVF _T1_OVF fV
.even
011A _T1_OVF::
011A 8A93 st -y,R24
011C 9A93 st -y,R25
011E 8FB7 in R24,0x3f
0120 8A93 st -y,R24
0122 .dbline -1
0122 .dbline 89
0122 ; }
0122 ; //**************************************************
0122 ; //函数名称:void T1_OVF(void)
0122 ; //函数功能:ti溢出处理
0122 ; //注意事项:
0122 ; //**************************************************
0122 ; #pragma interrupt_handler T1_OVF:9
0122 ; void T1_OVF(void)
0122 ; {
0122 .dbline 90
0122 ; T1OVF_NUM++;
0122 80910100 lds R24,_T1OVF_NUM
0126 90910200 lds R25,_T1OVF_NUM+1
012A 0196 adiw R24,1
012C 90930200 sts _T1OVF_NUM+1,R25
0130 80930100 sts _T1OVF_NUM,R24
0134 .dbline -2
0134 L6:
0134 8991 ld R24,y+
0136 8FBF out 0x3f,R24
0138 9991 ld R25,y+
013A 8991 ld R24,y+
013C .dbline 0 ; func end
013C 1895 reti
013E .dbend
013E .dbfunc e main _main fV
.even
013E _main::
013E .dbline -1
013E .dbline 96
013E ; }
013E ; //**********************************************************
013E ; //主函数
013E ; //**********************************************************
013E ; void main(void)
013E ; {
013E .dbline 97
013E ; CLI();
013E F894 cli
0140 .dbline 98
0140 ; INT0_INIT();
0140 5FDF xcall _INT0_INIT
0142 .dbline 99
0142 ; T1_INIT();
0142 E2DF xcall _T1_INIT
0144 .dbline 100
0144 ; SEI();
0144 7894 sei
0146 L8:
0146 .dbline 102
0146 L9:
0146 .dbline 101
0146 FFCF xjmp L8
0148 X0:
0148 .dbline -2
0148 L7:
0148 .dbline 0 ; func end
0148 0895 ret
014A .dbend
.area bss(ram, con, rel)
0000 .dbfile test_t1.c
0000 _T1_NUM::
0000 .blkb 4
0004 .dbsym e T1_NUM _T1_NUM l
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -