?? dh980_icc.lst
字號(hào):
__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 //平均個(gè)數(shù)
(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循環(huán)用
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++; //下載數(shù)據(jù)定時(shí)用
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;//通道號(hào),平均值序號(hào),通道號(hào)
(0090) unsigned long sum;
(0091) static unsigned char average_l=0;//平均值個(gè)數(shù)
(0092) static unsigned int average[8][average_quantity]; //求平均數(shù)
(0093) unsigned char unlikeliness; //內(nèi)部循環(huán),1mS檢測(cè)
(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個(gè)按鍵值************************
(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
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -