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

📄 dh980_icc.lst

📁 LTC2449 AD转换 LTC2449 AD转换 LTC2449 AD转换
💻 LST
📖 第 1 页 / 共 5 页
字号:
__start:
__text_start:
    0083 EFCF      LDI	R28,0xFF
    0084 E0D4      LDI	R29,4
    0085 BFCD      OUT	0x3D,R28
    0086 BFDE      OUT	0x3E,R29
    0087 52C0      SUBI	R28,0x20
    0088 40D0      SBCI	R29,0
    0089 EA0A      LDI	R16,0xAA
    008A 8308      STD	Y+0,R16
    008B 2400      CLR	R0
    008C E0E1      LDI	R30,1
    008D E0F1      LDI	R31,1
    008E E012      LDI	R17,2
    008F 33EA      CPI	R30,0x3A
    0090 07F1      CPC	R31,R17
    0091 F011      BEQ	0x0094
    0092 9201      ST	R0,Z+
    0093 CFFB      RJMP	0x008F
    0094 8300      STD	Z+0,R16
    0095 E0E5      LDI	R30,5
    0096 E0F1      LDI	R31,1
    0097 E0A0      LDI	R26,0
    0098 E0B1      LDI	R27,1
    0099 E011      LDI	R17,1
    009A 30E6      CPI	R30,6
    009B 07F1      CPC	R31,R17
    009C F021      BEQ	0x00A1
    009D 95C8      LPM
    009E 9631      ADIW	R30,1
    009F 920D      ST	R0,X+
    00A0 CFF9      RJMP	0x009A
    00A1 940E01B5  CALL	_main
_exit:
    00A3 CFFF      RJMP	_exit
FILE: E:\mysoft\DH980\main.c
(0001) //ICC-AVR application builder : 2007-5-17 下午 09:24:21
(0002) // Target : M169
(0003) // Crystal: 4.0000Mhz
(0004) #define _MAIN_C
(0005) #include <iom169v.h>
(0006) #include <macros.h>
(0007) #include <stdio.h>
(0008) //#include "LTC2449.h"
(0009) #include "main.h"
(0010) #include "uart.h"
(0011) #include "cs5532.h"
(0012) #define average_quantity 15	//平均个数
(0013) 
(0014) void delay_loop(unsigned int i)
(0015) {
_delay_loop:
  i                    --> R16
    00A4 C002      RJMP	0x00A7
(0016) 	while(i){i--;}
    00A5 5001      SUBI	R16,1
    00A6 4010      SBCI	R17,0
    00A7 3000      CPI	R16,0
    00A8 0701      CPC	R16,R17
    00A9 F7D9      BNE	0x00A5
    00AA 9508      RET
(0017) }
(0018) void port_init(void)
(0019) {
(0020)  PORTA = 0xFF;
_port_init:
    00AB EF8F      LDI	R24,0xFF
    00AC B982      OUT	0x02,R24
(0021)  DDRA  = 0xFF;
    00AD B981      OUT	0x01,R24
(0022)  PORTB = 0x7F;
    00AE E78F      LDI	R24,0x7F
    00AF B985      OUT	0x05,R24
(0023)  DDRB  = 0x80;
    00B0 E880      LDI	R24,0x80
    00B1 B984      OUT	0x04,R24
(0024)  PORTC = 0xFF; 
    00B2 EF8F      LDI	R24,0xFF
    00B3 B988      OUT	0x08,R24
(0025)  DDRC  = 0xFF;
    00B4 B987      OUT	0x07,R24
(0026)  PORTD = 0xFF;
    00B5 B98B      OUT	0x0B,R24
(0027)  DDRD  = 0xFF;
    00B6 B98A      OUT	0x0A,R24
(0028)  PORTE = 0xA7;
    00B7 EA87      LDI	R24,0xA7
    00B8 B98E      OUT	0x0E,R24
(0029)  DDRE  = 0x58;
    00B9 E588      LDI	R24,0x58
    00BA B98D      OUT	0x0D,R24
(0030)  PORTF = 0x0F;
    00BB E08F      LDI	R24,0xF
    00BC BB81      OUT	0x11,R24
(0031)  DDRF  = 0x0F;
    00BD BB80      OUT	0x10,R24
(0032)  PORTG = 0x17;
    00BE E187      LDI	R24,0x17
    00BF BB84      OUT	0x14,R24
(0033)  DDRG  = 0x1F;
    00C0 E18F      LDI	R24,0x1F
    00C1 BB83      OUT	0x13,R24
    00C2 9508      RET
(0034) }
(0035) 
(0036) //TIMER1 initialize - prescale:1
(0037) // WGM: 0) Normal, TOP=0xFFFF
(0038) // desired value: 1mSec
(0039) // actual value:  1.000mSec (0.0%)
(0040) void timer1_init(void)
(0041) {
(0042)  TCCR1B = 0x00; //stop
_timer1_init:
    00C3 2422      CLR	R2
    00C4 92200081  STS	0x81,R2
(0043)  TCNT1H = 0xD4; //setup
    00C6 ED84      LDI	R24,0xD4
    00C7 93800085  STS	0x85,R24
(0044)  TCNT1L = 0xCE;
    00C9 EC8E      LDI	R24,0xCE
    00CA 93800084  STS	0x84,R24
(0045)  OCR1AH = 0x2B;
    00CC E28B      LDI	R24,0x2B
    00CD 93800089  STS	0x89,R24
(0046)  OCR1AL = 0x32;
    00CF E382      LDI	R24,0x32
    00D0 93800088  STS	0x88,R24
(0047)  OCR1BH = 0x2B;
    00D2 E28B      LDI	R24,0x2B
    00D3 9380008B  STS	0x8B,R24
(0048)  OCR1BL = 0x32;
    00D5 E382      LDI	R24,0x32
    00D6 9380008A  STS	0x8A,R24
(0049)  ICR1H  = 0x2B;
    00D8 E28B      LDI	R24,0x2B
    00D9 93800087  STS	0x87,R24
(0050)  ICR1L  = 0x32;
    00DB E382      LDI	R24,0x32
    00DC 93800086  STS	0x86,R24
(0051)  TCCR1A = 0x00;
    00DE 92200080  STS	0x80,R2
(0052)  TCCR1C = 0x00;
    00E0 92200082  STS	0x82,R2
(0053)  TCCR1B = 0x01; //start Timer
    00E2 E081      LDI	R24,1
    00E3 93800081  STS	0x81,R24
    00E5 9508      RET
_timer1_ovf_isr:
    00E6 938A      ST	R24,-Y
    00E7 939A      ST	R25,-Y
    00E8 93EA      ST	R30,-Y
    00E9 B78F      IN	R24,0x3F
    00EA 938A      ST	R24,-Y
(0054) }
(0055) 
(0056) #pragma interrupt_handler timer1_ovf_isr:10
(0057) void timer1_ovf_isr(void)
(0058) {
(0059)  TCNT1H = 0xD4; //setup
    00EB ED84      LDI	R24,0xD4
    00EC 93800085  STS	0x85,R24
(0060)  TCNT1L = 0xCE;
    00EE EC8E      LDI	R24,0xCE
    00EF 93800084  STS	0x84,R24
(0061)  mcu_loop_time++;	//主程序20mS循环用
    00F1 91800230  LDS	R24,mcu_loop_time
    00F3 5F8F      SUBI	R24,0xFF
    00F4 93800230  STS	mcu_loop_time,R24
(0062)  if (load_time <10000)
    00F6 91800209  LDS	R24,load_time
    00F8 9190020A  LDS	R25,load_time+1
    00FA 3180      CPI	R24,0x10
    00FB E2E7      LDI	R30,0x27
    00FC 079E      CPC	R25,R30
    00FD F428      BCC	0x0103
(0063)  	{
(0064)  		load_time++;	//下载数据定时用
    00FE 9601      ADIW	R24,1
    00FF 9390020A  STS	load_time+1,R25
    0101 93800209  STS	load_time,R24
(0065)  	}
    0103 9189      LD	R24,Y+
    0104 BF8F      OUT	0x3F,R24
    0105 91E9      LD	R30,Y+
    0106 9199      LD	R25,Y+
    0107 9189      LD	R24,Y+
    0108 9518      RETI
(0066) }
(0067) 
(0068) //call this routine to initialize all peripherals
(0069) void init_devices(void)
(0070) {
(0071)  //stop errant interrupts until set up
(0072)  CLI(); //disable all interrupts
_init_devices:
    0109 94F8      BCLR	7
(0073)  port_init();
    010A DFA0      RCALL	_port_init
(0074)  timer1_init();
    010B DFB7      RCALL	_timer1_init
(0075)  uart0_init();
    010C 940E0630  CALL	_uart0_init
(0076) 
(0077)  TIMSK0 = 0x00; //timer interrupt sources
    010E 2422      CLR	R2
    010F 9220006E  STS	0x6E,R2
(0078)  TIMSK1 = 0x01; //timer interrupt sources
    0111 E081      LDI	R24,1
    0112 9380006F  STS	0x6F,R24
(0079)  TIMSK2 = 0x00; //timer interrupt sources
    0114 92200070  STS	0x70,R2
(0080)  PCMSK0 = 0x00; //pin change mask
    0116 9220006B  STS	0x6B,R2
(0081)  PCMSK1 = 0x00; //pin change mask
    0118 9220006C  STS	0x6C,R2
(0082)  EICRA  = 0x00;  //int0 setup
    011A 92200069  STS	0x69,R2
(0083)  SEI(); //re-enable interrupts
    011C 9478      BSET	7
    011D 9508      RET
_AD_conversion:
  c                    --> R12
  unlikeliness         --> R14
  sum                  --> Y+0
  j                    --> Y+4
  jj                   --> R10
    011E 940E07A2  CALL	push_gset5
    0120 9725      SBIW	R28,5
(0084)  //all peripherals are now initialized
(0085) }
(0086) //************读出8通道AD值*********************
(0087) void AD_conversion()
(0088) {
(0089) 	unsigned char j, jj, c;//通道号,平均值序号,通道号
(0090) 	unsigned long sum;
(0091) 	static unsigned char average_l=0;//平均值个数
(0092) 	static unsigned int average[8][average_quantity];	//求平均数
(0093) 	unsigned char unlikeliness;	//内部循环,1mS检测
(0094) 	for (j=0; j<5; j++)
    0121 2400      CLR	R0
    0122 820C      STD	Y+4,R0
    0123 C06A      RJMP	0x018E
(0095) 		{
(0096) 			unlikeliness = mcu_loop_time;
    0124 90E00230  LDS	R14,mcu_loop_time
(0097) 			c=j;
    0126 80CC      LDD	R12,Y+4
(0098) 		//average[j][average_l] =	LTC2449_RW(c);	//读取AD值
(0099) 		average[j][average_l] = CS5532_RW(c);
    0127 2D0C      MOV	R16,R12
    0128 2711      CLR	R17
    0129 940E0545  CALL	_CS5532_RW
    012B 0118      MOVW	R2,R16
    012C 0129      MOVW	R4,R18
    012D E18E      LDI	R24,0x1E
    012E 800C      LDD	R0,Y+4
    012F 9D80      MUL	R24,R0
    0130 0130      MOVW	R6,R0
    0131 E081      LDI	R24,1
    0132 E091      LDI	R25,1
    0133 0E68      ADD	R6,R24
    0134 1E79      ADC	R7,R25
    0135 90800100  LDS	R8,average_l
    0137 E082      LDI	R24,2
    0138 9D88      MUL	R24,R8
    0139 01F0      MOVW	R30,R0
    013A 0DE6      ADD	R30,R6
    013B 1DF7      ADC	R31,R7
    013C 8231      STD	Z+1,R3
    013D 8220      STD	Z+0,R2
(0100) 		sum = 0;
    013E E040      LDI	R20,0
    013F E050      LDI	R21,0
    0140 E060      LDI	R22,0
    0141 E070      LDI	R23,0
    0142 01FE      MOVW	R30,R28
    0143 8340      STD	Z+0,R20
    0144 8351      STD	Z+1,R21
    0145 8362      STD	Z+2,R22
    0146 8373      STD	Z+3,R23
(0101) 		for (jj=0; jj<average_quantity; jj++)	//求平均值
    0147 24AA      CLR	R10
    0148 C020      RJMP	0x0169
(0102) 			{
(0103) 				sum += average[j][jj];
    0149 E18E      LDI	R24,0x1E
    014A 800C      LDD	R0,Y+4
    014B 9D80      MUL	R24,R0
    014C 0110      MOVW	R2,R0
    014D E081      LDI	R24,1
    014E E091      LDI	R25,1
    014F 0E28      ADD	R2,R24
    0150 1E39      ADC	R3,R25
    0151 E082      LDI	R24,2
    0152 9D8A      MUL	R24,R10
    0153 01F0      MOVW	R30,R0
    0154 0DE2      ADD	R30,R2
    0155 1DF3      ADC	R31,R3
    0156 8020      LDD	R2,Z+0
    0157 8031      LDD	R3,Z+1
    0158 2444      CLR	R4
    0159 2455      CLR	R5
    015A 01FE      MOVW	R30,R28
    015B 8060      LDD	R6,Z+0
    015C 8071      LDD	R7,Z+1
    015D 8082      LDD	R8,Z+2
    015E 8093      LDD	R9,Z+3
    015F 0C62      ADD	R6,R2
    0160 1C73      ADC	R7,R3
    0161 1C84      ADC	R8,R4
    0162 1C95      ADC	R9,R5
    0163 01FE      MOVW	R30,R28
    0164 8260      STD	Z+0,R6
    0165 8271      STD	Z+1,R7
    0166 8282      STD	Z+2,R8
    0167 8293      STD	Z+3,R9
    0168 94A3      INC	R10
    0169 2D8A      MOV	R24,R10
    016A 308F      CPI	R24,0xF
    016B F2E8      BCS	0x0149
(0104) 			}
(0105) 		send_data.AD_data[j] = sum/average_quantity;
    016C E082      LDI	R24,2
    016D 800C      LDD	R0,Y+4
    016E 9D80      MUL	R24,R0
    016F 01F0      MOVW	R30,R0
    0170 EF82      LDI	R24,0xF2
    0171 E091      LDI	R25,1
    0172 0FE8      ADD	R30,R24
    0173 1FF9      ADC	R31,R25
    0174 E04F      LDI	R20,0xF
    0175 E050      LDI	R21,0
    0176 E060      LDI	R22,0
    0177 E070      LDI	R23,0
    0178 01DE      MOVW	R26,R28
    0179 902D      LD	R2,X+
    017A 903D      LD	R3,X+
    017B 904D      LD	R4,X+
    017C 905C      LD	R5,0(X)
    017D 937A      ST	R23,-Y
    017E 936A      ST	R22,-Y
    017F 935A      ST	R21,-Y
    0180 934A      ST	R20,-Y
    0181 0181      MOVW	R16,R2
    0182 0192      MOVW	R18,R4
    0183 940E0715  CALL	div32u
    0185 8311      STD	Z+1,R17
    0186 8300      STD	Z+0,R16
(0106) 		//send_data.AD_data[j] = average[j][average_l];
(0107) 		while (unlikeliness == mcu_loop_time){;}//等待1ms
    0187 90200230  LDS	R2,mcu_loop_time
    0189 14E2      CP	R14,R2
    018A F3E1      BEQ	0x0187
    018B 800C      LDD	R0,Y+4
    018C 9403      INC	R0
    018D 820C      STD	Y+4,R0
    018E 818C      LDD	R24,Y+4
    018F 3085      CPI	R24,5
    0190 F408      BCC	0x0192
    0191 CF92      RJMP	0x0124
(0108) 	}
(0109) 	average_l++;
    0192 91800100  LDS	R24,average_l
    0194 5F8F      SUBI	R24,0xFF
    0195 93800100  STS	average_l,R24
(0110) 	if (average_l > (average_quantity-1)) average_l = 0;
    0197 E08E      LDI	R24,0xE
    0198 90200100  LDS	R2,average_l
    019A 1582      CP	R24,R2
    019B F418      BCC	0x019F
    019C 2422      CLR	R2
    019D 92200100  STS	average_l,R2
    019F 9625      ADIW	R28,5
    01A0 940E079F  CALL	pop_gset5
    01A2 9508      RET
(0111) }
(0112) //************取8个按键值************************
(0113) void pb_check()
(0114) {
(0115) 	unsigned char k;
(0116) 	k=PINB;
_pb_check:
  k                    --> R16
    01A3 B103      IN	R16,0x03
(0117) 	k=k<<1;
    01A4 0F00      LSL	R16
(0118) 	if((PINE&0B01111111)!=0)
    01A5 B18C      IN	R24,0x0C
    01A6 778F      ANDI	R24,0x7F
    01A7 F011      BEQ	0x01AA
(0119) 		k|=1;
    01A8 6001      ORI	R16,1
    01A9 C001      RJMP	0x01AB
(0120) 	else 
(0121) 		k&=254;
    01AA 7F0E      ANDI	R16,0xFE
(0122) 		k ^= 0xff;
    01AB EF8F      LDI	R24,0xFF
    01AC E090      LDI	R25,0
    01AD 2E20      MOV	R2,R16
    01AE 2433      CLR	R3
    01AF 2628      EOR	R2,R24
    01B0 2639      EOR	R3,R25
    01B1 2D02      MOV	R16,R2
(0123) 	send_data.exterior_switch=k;
    01B2 930001F1  STS	send_data,R16
    01B4 9508      RET
(0124) }
(0125) void main(void)
(0126) {
(0127) 	init_devices();
_main:
    01B5 DF53      RCALL	_init_devices
(0128) 		/*SET_CS;	//PE3

⌨️ 快捷键说明

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