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

📄 test_t1.lst

📁 ad7135的avr16的源程序
💻 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 + -