📄 test_t1.lst
字号:
__text_start:
__start:
002C E5CF LDI R28,0x5F
002D E0D4 LDI R29,4
002E BFCD OUT 0x3D,R28
002F BFDE OUT 0x3E,R29
0030 51C0 SUBI R28,0x10
0031 40D0 SBCI R29,0
0032 EA0A LDI R16,0xAA
0033 8308 STD Y+0,R16
0034 2400 CLR R0
0035 E6E3 LDI R30,0x63
0036 E0F0 LDI R31,0
0037 E010 LDI R17,0
0038 36E7 CPI R30,0x67
0039 07F1 CPC R31,R17
003A F011 BEQ 0x003D
003B 9201 ST R0,Z+
003C CFFB RJMP 0x0038
003D 8300 STD Z+0,R16
003E E5E4 LDI R30,0x54
003F E0F0 LDI R31,0
0040 E6A0 LDI R26,0x60
0041 E0B0 LDI R27,0
0042 E010 LDI R17,0
0043 35E7 CPI R30,0x57
0044 07F1 CPC R31,R17
0045 F021 BEQ 0x004A
0046 95C8 LPM
0047 9631 ADIW R30,1
0048 920D ST R0,X+
0049 CFF9 RJMP 0x0043
004A 940E00EC CALL _main
_exit:
004C CFFF RJMP _exit
FILE: test_t1.c
(0001) //*************************************************
(0002) //测试功能:t1内部计数,如有溢出则计量溢出次数
(0003) //测试方法:
(0004) //测试结果:ok
(0005) //时钟频率:外部8m
(0006) //管脚分配:
(0007) //注意事项:
(0008) //完成时间:2009.03.15
(0009) //**************************************************
(0010)
(0011) //**************************************************
(0012) //头文件
(0013) //**************************************************
(0014) #include <iom16v.h>
(0015) #include <macros.h>
(0016) //**************************************************
(0017)
(0018)
(0019) //*****************************************************
(0020) //全局变量定义
(0021) //*****************************************************
(0022) unsigned char N=0;//用来区别是第一次外部中断还是第二次中断
(0023) unsigned int T1OVF_NUM=0;//用来计定时器T1的溢出次数
(0024) unsigned long int T1_NUM;//T1计的总时钟的个数
(0025)
(0026) //*****************************************************
(0027) //函数声明
(0028) //*****************************************************
(0029) void INT0_INIT(void);
(0030) void T1_INIT(void);
(0031)
(0032) //*****************************************************
(0033) //函数名称:void INT0_INIT(void)
(0034) //函数功能:int0初始化,上升沿产生中断,使能中断
(0035) //注意事项:未开总中断
(0036) //*****************************************************
(0037) void INT0_INIT(void)
(0038) {
(0039) MCUCR|=((1<<ISC01)|(1<<ISC00));
_INT0_INIT:
004D B785 IN R24,0x35
004E 6083 ORI R24,3
004F BF85 OUT 0x35,R24
(0040) GICR|=(1<<INT0);
0050 B78B IN R24,0x3B
0051 6480 ORI R24,0x40
0052 BF8B OUT 0x3B,R24
0053 9508 RET
_INT0_INTERRUPT:
0054 920A ST R0,-Y
0055 921A ST R1,-Y
0056 922A ST R2,-Y
0057 923A ST R3,-Y
0058 924A ST R4,-Y
0059 925A ST R5,-Y
005A 926A ST R6,-Y
005B 927A ST R7,-Y
005C 928A ST R8,-Y
005D 929A ST R9,-Y
005E 930A ST R16,-Y
005F 931A ST R17,-Y
0060 932A ST R18,-Y
0061 933A ST R19,-Y
0062 938A ST R24,-Y
0063 939A ST R25,-Y
0064 93EA ST R30,-Y
0065 B60F IN R0,0x3F
0066 920A ST R0,-Y
0067 940E012B CALL push_gset2
(0041) }
(0042) //*****************************************************
(0043) //函数名称:void INT0_INTERRUPT(void)
(0044) //函数功能:中断处理,N+1
(0045) //注意事项:
(0046) //*****************************************************
(0047) #pragma interrupt_handler INT0_INTERRUPT:2
(0048) void INT0_INTERRUPT(void)
(0049) {
(0050) if(!N)
0069 90200060 LDS R2,N
006B 2022 TST R2
006C F449 BNE 0x0076
(0051) {
(0052) TCCR1B=0X01;//开始内部计数
006D E081 LDI R24,1
006E BD8E OUT 0x2E,R24
(0053) MCUCR=0X02;//设置外部中断0下降沿产生中断
006F E082 LDI R24,2
0070 BF85 OUT 0x35,R24
(0054) N++;
0071 2D82 MOV R24,R2
0072 5F8F SUBI R24,0xFF
0073 93800060 STS N,R24
(0055) }
0075 C045 RJMP 0x00BB
(0056) else
(0057) {
(0058) TCCR1B=0X00;//定时器t1停止工作
0076 2422 CLR R2
0077 BC2E OUT 0x2E,R2
(0059) CLI();//关中断,进行数据处理
0078 94F8 BCLR 7
(0060) //数据处理
(0061) T1_NUM=T1OVF_NUM;
0079 90200061 LDS R2,T1OVF_NUM
007B 90300062 LDS R3,T1OVF_NUM+1
007D 2444 CLR R4
007E 2455 CLR R5
007F 92300064 STS T1_NUM+1,R3
0081 92200063 STS T1_NUM,R2
0083 92500066 STS T1_NUM+3,R5
0085 92400065 STS T1_NUM+2,R4
(0062) T1_NUM=T1_NUM*65536+TCNT1;
0087 90400065 LDS R4,T1_NUM+2
0089 90500066 LDS R5,T1_NUM+3
008B 90200063 LDS R2,T1_NUM
008D 90300064 LDS R3,T1_NUM+1
008F E040 LDI R20,0
0090 E050 LDI R21,0
0091 E061 LDI R22,1
0092 E070 LDI R23,0
0093 925A ST R5,-Y
0094 924A ST R4,-Y
0095 923A ST R3,-Y
0096 922A ST R2,-Y
0097 018A MOVW R16,R20
0098 019B MOVW R18,R22
0099 940E00F2 CALL empy32s
009B 0118 MOVW R2,R16
009C 0129 MOVW R4,R18
009D B46C IN R6,0x2C
009E B47D IN R7,0x2D
009F 2488 CLR R8
00A0 2499 CLR R9
00A1 0C26 ADD R2,R6
00A2 1C37 ADC R3,R7
00A3 1C48 ADC R4,R8
00A4 1C59 ADC R5,R9
00A5 92300064 STS T1_NUM+1,R3
00A7 92200063 STS T1_NUM,R2
00A9 92500066 STS T1_NUM+3,R5
00AB 92400065 STS T1_NUM+2,R4
(0063) //数据处理结束
(0064) T1OVF_NUM=0;
00AD 2422 CLR R2
00AE 2433 CLR R3
00AF 92300062 STS T1OVF_NUM+1,R3
00B1 92200061 STS T1OVF_NUM,R2
(0065) TCNT1=0X0000;
00B3 BC3D OUT 0x2D,R3
00B4 BC2C OUT 0x2C,R2
(0066) MCUCR|=((1<<ISC01)|(1<<ISC00));//设置外部上升沿中断
00B5 B785 IN R24,0x35
00B6 6083 ORI R24,3
00B7 BF85 OUT 0x35,R24
(0067) N=0;//
00B8 92200060 STS N,R2
(0068) SEI();
00BA 9478 BSET 7
(0069) }
00BB 940E0122 CALL pop_gset2
00BD 9009 LD R0,Y+
00BE BE0F OUT 0x3F,R0
00BF 91E9 LD R30,Y+
00C0 9199 LD R25,Y+
00C1 9189 LD R24,Y+
00C2 9139 LD R19,Y+
00C3 9129 LD R18,Y+
00C4 9119 LD R17,Y+
00C5 9109 LD R16,Y+
00C6 9099 LD R9,Y+
00C7 9089 LD R8,Y+
00C8 9079 LD R7,Y+
00C9 9069 LD R6,Y+
00CA 9059 LD R5,Y+
00CB 9049 LD R4,Y+
00CC 9039 LD R3,Y+
00CD 9029 LD R2,Y+
00CE 9019 LD R1,Y+
00CF 9009 LD R0,Y+
00D0 9518 RETI
(0070) }
(0071) //**************************************************
(0072) //函数名称:void T1_INIT(void)
(0073) //函数功能:内部定时
(0074) //注意事项,定时器未工作,定时器工作,需+TCCR1B=0X01;
(0075) //**************************************************
(0076) void T1_INIT(void)
(0077) {
(0078) TCCR1A=0X00;
_T1_INIT:
00D1 2422 CLR R2
00D2 BC2F OUT 0x2F,R2
(0079) TCNT1=0X0000;
00D3 2433 CLR R3
00D4 BC3D OUT 0x2D,R3
00D5 BC2C OUT 0x2C,R2
(0080) TIMSK|=(1<<TOIE1);
00D6 B789 IN R24,0x39
00D7 6084 ORI R24,4
00D8 BF89 OUT 0x39,R24
00D9 9508 RET
_T1_OVF:
00DA 938A ST R24,-Y
00DB 939A ST R25,-Y
00DC B78F IN R24,0x3F
00DD 938A ST R24,-Y
(0081) }
(0082) //**************************************************
(0083) //函数名称:void T1_OVF(void)
(0084) //函数功能:ti溢出处理
(0085) //注意事项:
(0086) //**************************************************
(0087) #pragma interrupt_handler T1_OVF:9
(0088) void T1_OVF(void)
(0089) {
(0090) T1OVF_NUM++;
00DE 91800061 LDS R24,T1OVF_NUM
00E0 91900062 LDS R25,T1OVF_NUM+1
00E2 9601 ADIW R24,1
00E3 93900062 STS T1OVF_NUM+1,R25
00E5 93800061 STS T1OVF_NUM,R24
00E7 9189 LD R24,Y+
00E8 BF8F OUT 0x3F,R24
00E9 9199 LD R25,Y+
00EA 9189 LD R24,Y+
00EB 9518 RETI
(0091) }
(0092) //**********************************************************
(0093) //主函数
(0094) //**********************************************************
(0095) void main(void)
(0096) {
(0097) CLI();
_main:
00EC 94F8 BCLR 7
(0098) INT0_INIT();
00ED DF5F RCALL _INT0_INIT
(0099) T1_INIT();
00EE DFE2 RCALL _T1_INIT
(0100) SEI();
00EF 9478 BSET 7
(0101) while(1)
FILE: <library>
00F0 CFFF RJMP 0x00F0
00F1 9508 RET
empy32s:
empy32u:
00F2 940E0144 CALL long_prolog
00F4 927F PUSH R7
00F5 940E015D CALL tstzero1
00F7 F139 BEQ 0x011F
00F8 2477 CLR R7
00F9 940E0163 CALL tstzero2
00FB F419 BNE 0x00FF
00FC 018C MOVW R16,R24
00FD 019D MOVW R18,R26
00FE C020 RJMP 0x011F
00FF 9F08 MUL R16,R24
0100 2CB0 MOV R11,R0
0101 2CA1 MOV R10,R1
0102 9F28 MUL R18,R24
0103 2C90 MOV R9,R0
0104 2C81 MOV R8,R1
0105 9F18 MUL R17,R24
0106 0CA0 ADD R10,R0
0107 1C91 ADC R9,R1
0108 1C87 ADC R8,R7
0109 9F09 MUL R16,R25
010A 0CA0 ADD R10,R0
010B 1C91 ADC R9,R1
010C 1C87 ADC R8,R7
010D 9F19 MUL R17,R25
010E 0C90 ADD R9,R0
010F 1C81 ADC R8,R1
0110 9F0A MUL R16,R26
0111 0C90 ADD R9,R0
0112 1C81 ADC R8,R1
0113 9F38 MUL R19,R24
0114 0C80 ADD R8,R0
0115 9F29 MUL R18,R25
0116 0C80 ADD R8,R0
0117 9F1A MUL R17,R26
0118 0C80 ADD R8,R0
0119 9F0B MUL R16,R27
011A 0C80 ADD R8,R0
011B 2D0B MOV R16,R11
011C 2D1A MOV R17,R10
011D 2D29 MOV R18,R9
011E 2D38 MOV R19,R8
011F 907F POP R7
0120 940C0152 JMP long_epilog
pop_gset2:
0122 E0E2 LDI R30,2
0123 940C0131 JMP pop
push_gset5:
0125 92FA ST R15,-Y
0126 92EA ST R14,-Y
push_gset4:
0127 92DA ST R13,-Y
0128 92CA ST R12,-Y
push_gset3:
0129 92BA ST R11,-Y
012A 92AA ST R10,-Y
push_gset2:
012B 937A ST R23,-Y
012C 936A ST R22,-Y
push_gset1:
012D 935A ST R21,-Y
012E 934A ST R20,-Y
012F 9508 RET
pop_gset1:
0130 E0E1 LDI R30,1
pop:
0131 9149 LD R20,Y+
0132 9159 LD R21,Y+
0133 FDE0 SBRC R30,0
0134 9508 RET
0135 9169 LD R22,Y+
0136 9179 LD R23,Y+
0137 FDE1 SBRC R30,1
0138 9508 RET
0139 90A9 LD R10,Y+
013A 90B9 LD R11,Y+
013B FDE2 SBRC R30,2
013C 9508 RET
013D 90C9 LD R12,Y+
013E 90D9 LD R13,Y+
013F FDE3 SBRC R30,3
0140 9508 RET
0141 90E9 LD R14,Y+
0142 90F9 LD R15,Y+
0143 9508 RET
long_prolog:
0144 928A ST R8,-Y
0145 929A ST R9,-Y
0146 92AA ST R10,-Y
0147 92BA ST R11,-Y
0148 93EA ST R30,-Y
0149 938A ST R24,-Y
014A 939A ST R25,-Y
014B 93AA ST R26,-Y
014C 93BA ST R27,-Y
014D 8589 LDD R24,Y+9
014E 859A LDD R25,Y+10
014F 85AB LDD R26,Y+11
0150 85BC LDD R27,Y+12
0151 9508 RET
long_epilog:
0152 91B9 LD R27,Y+
0153 91A9 LD R26,Y+
0154 9199 LD R25,Y+
0155 9189 LD R24,Y+
0156 91E9 LD R30,Y+
0157 90B9 LD R11,Y+
0158 90A9 LD R10,Y+
0159 9099 LD R9,Y+
015A 9089 LD R8,Y+
015B 9624 ADIW R28,4
015C 9508 RET
tstzero1:
015D 27EE CLR R30
015E 2BE0 OR R30,R16
015F 2BE1 OR R30,R17
0160 2BE2 OR R30,R18
0161 2BE3 OR R30,R19
0162 9508 RET
tstzero2:
0163 27EE CLR R30
0164 2BE8 OR R30,R24
0165 2BE9 OR R30,R25
0166 2BEA OR R30,R26
0167 2BEB OR R30,R27
0168 9508 RET
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -