📄 main.lss
字号:
ads_senddata(0xf0); //自校准
aa=ad_read(); //读24位A/D数据。
2d0: 5c df rcall .-328 ; 0x18a <ad_read>
2d2: 9b 01 movw r18, r22
2d4: ac 01 movw r20, r24
}
return aa;
}
2d6: b9 01 movw r22, r18
2d8: ca 01 movw r24, r20
2da: 08 95 ret
000002dc <SPI_MasterInit>:
#include "ADS1256.H"
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~配置SPI~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void SPI_MasterInit(void) //配置SPI为主机
{
2dc: 87 b3 in r24, 0x17 ; 23
2de: 8e 62 ori r24, 0x2E ; 46
2e0: 87 bb out 0x17, r24 ; 23
/* 设置MOSI 和SCK 为输出,其他为输入 */
DDRB|=(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB5);
DDRB&=~(1<<PB4);
2e2: bc 98 cbi 0x17, 4 ; 23
PORTB|=(1<<PB1)|(1<<PB2)|(1<<PB4); //定义SS的使能端
2e4: 88 b3 in r24, 0x18 ; 24
2e6: 86 61 ori r24, 0x16 ; 22
2e8: 88 bb out 0x18, r24 ; 24
/* 使能SPI 主机模式,设置时钟速率为fck/16 */
SPCR = 0x52; //7e 高位首发,SPI使能,主机模式,SCK空闲保持为低电平,数据在上升沿采样,速率为1:64(FOSC/128)
2ea: 82 e5 ldi r24, 0x52 ; 82
2ec: 8d b9 out 0x0d, r24 ; 13
SPSR = 0x01; //使能倍速1:32
2ee: 81 e0 ldi r24, 0x01 ; 1
2f0: 8e b9 out 0x0e, r24 ; 14
}
2f2: 08 95 ret
000002f4 <port>:
//--------------------------------------------------------------------------------------------//
void port (void)
{
2f4: 8a 9a sbi 0x11, 2 ; 17
DDRD|=(1<<PD2); //485 cs
PORTD&=~(1<<PD2);
2f6: 92 98 cbi 0x12, 2 ; 18
DDRB|=(1<<PB0); //power 灯
2f8: b8 9a sbi 0x17, 0 ; 23
PORTB&=~(1<<PB0);
2fa: c0 98 cbi 0x18, 0 ; 24
}
2fc: 08 95 ret
000002fe <main>:
//--------------------------------------------------------------------------------------------
main(void)
{
2fe: 3f 92 push r3
300: 4f 92 push r4
302: 5f 92 push r5
304: 6f 92 push r6
306: 7f 92 push r7
308: 8f 92 push r8
30a: 9f 92 push r9
30c: af 92 push r10
30e: bf 92 push r11
310: cf 92 push r12
312: df 92 push r13
314: ef 92 push r14
316: ff 92 push r15
318: 0f 93 push r16
31a: 1f 93 push r17
//--------------------------------------------------------------------------------------------//
void port (void)
{
DDRD|=(1<<PD2); //485 cs
31c: 8a 9a sbi 0x11, 2 ; 17
PORTD&=~(1<<PD2);
31e: 92 98 cbi 0x12, 2 ; 18
DDRB|=(1<<PB0); //power 灯
320: b8 9a sbi 0x17, 0 ; 23
PORTB&=~(1<<PB0);
322: c0 98 cbi 0x18, 0 ; 24
//~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~配置SPI~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
void SPI_MasterInit(void) //配置SPI为主机
{
/* 设置MOSI 和SCK 为输出,其他为输入 */
DDRB|=(1<<PB1)|(1<<PB2)|(1<<PB3)|(1<<PB5);
324: 87 b3 in r24, 0x17 ; 23
326: 8e 62 ori r24, 0x2E ; 46
328: 87 bb out 0x17, r24 ; 23
DDRB&=~(1<<PB4);
32a: bc 98 cbi 0x17, 4 ; 23
PORTB|=(1<<PB1)|(1<<PB2)|(1<<PB4); //定义SS的使能端
32c: 88 b3 in r24, 0x18 ; 24
32e: 86 61 ori r24, 0x16 ; 22
330: 88 bb out 0x18, r24 ; 24
/* 使能SPI 主机模式,设置时钟速率为fck/16 */
SPCR = 0x52; //7e 高位首发,SPI使能,主机模式,SCK空闲保持为低电平,数据在上升沿采样,速率为1:64(FOSC/128)
332: 82 e5 ldi r24, 0x52 ; 82
334: 8d b9 out 0x0d, r24 ; 13
SPSR = 0x01; //使能倍速1:32
336: 81 e0 ldi r24, 0x01 ; 1
338: 8e b9 out 0x0e, r24 ; 14
//设置串口的参数
void USART_Init( unsigned int baud )
{
/* 设置波特率9600*/
UBRRH = 0;
33a: 10 bc out 0x20, r1 ; 32
UBRRL = 47;
33c: 8f e2 ldi r24, 0x2F ; 47
33e: 89 b9 out 0x09, r24 ; 9
/* 接收器与发送器使能*/
UCSRB = (1<<TXCIE)|(1<<RXCIE)|(1<<RXEN)|(1<<TXEN);
340: 88 ed ldi r24, 0xD8 ; 216
342: 8a b9 out 0x0a, r24 ; 10
/* 设置帧格式: 8 个数据位, 2 个停止位*/
UCSRC = (1<<URSEL)|(1<<USBS)|(3<<UCSZ0);
344: 8e e8 ldi r24, 0x8E ; 142
346: 80 bd out 0x20, r24 ; 32
unsigned long int d=0,p[12],n=0,m=0;
unsigned char aa=0,a=0,b=0,c=0,i=0;
port(); //端口初始化
SPI_MasterInit(); //SPI端口初始化
USART_Init(1); //串口初始化
ADS1256(); //初始化ADS1256
348: 9d df rcall .-198 ; 0x284 <ADS1256>
sei();
34a: 78 94 sei
34c: ee 24 eor r14, r14
34e: ff 24 eor r15, r15
350: 87 01 movw r16, r14
while(1)
{
aa=sum;
if(aa<=10)
{sum=15;
352: 6f e0 ldi r22, 0x0F ; 15
354: 36 2e mov r3, r22
ADS1256(); //初始化ADS1256
sei();
while(1)
{
aa=sum;
356: 40 90 60 00 lds r4, 0x0060
if(aa<=10)
35a: 8a e0 ldi r24, 0x0A ; 10
35c: 84 15 cp r24, r4
35e: d8 f3 brcs .-10 ; 0x356 <main+0x58>
{sum=15;
360: 30 92 60 00 sts 0x0060, r3
364: 61 2c mov r6, r1
366: 71 2c mov r7, r1
368: 50 e4 ldi r21, 0x40 ; 64
36a: 85 2e mov r8, r21
36c: 91 2c mov r9, r1
36e: aa 24 eor r10, r10
370: bb 24 eor r11, r11
372: 65 01 movw r12, r10
374: 55 24 eor r5, r5
a=0;b=0;c=0;n=0x400000;m=0;
for (i=0;i<12;i++)
{
p[i]=ads_sum(aa);//读A/D数据。通道地址0~7 0、1、2、3、4、5、6、7
376: 84 2d mov r24, r4
378: 9b df rcall .-202 ; 0x2b0 <ads_sum>
37a: 66 15 cp r22, r6
37c: 77 05 cpc r23, r7
37e: 88 05 cpc r24, r8
380: 99 05 cpc r25, r9
382: 10 f4 brcc .+4 ; 0x388 <main+0x8a>
384: 3b 01 movw r6, r22
386: 4c 01 movw r8, r24
388: a6 16 cp r10, r22
38a: b7 06 cpc r11, r23
38c: c8 06 cpc r12, r24
38e: d9 06 cpc r13, r25
390: 10 f4 brcc .+4 ; 0x396 <main+0x98>
392: 5b 01 movw r10, r22
394: 6c 01 movw r12, r24
if(n>p[i])
n=p[i];
if (m<p[i])
m=p[i];
d=d+p[i];
396: e6 0e add r14, r22
398: f7 1e adc r15, r23
39a: 08 1f adc r16, r24
39c: 19 1f adc r17, r25
{
aa=sum;
if(aa<=10)
{sum=15;
a=0;b=0;c=0;n=0x400000;m=0;
for (i=0;i<12;i++)
39e: 53 94 inc r5
3a0: 8c e0 ldi r24, 0x0C ; 12
3a2: 58 16 cp r5, r24
3a4: 41 f7 brne .-48 ; 0x376 <main+0x78>
n=p[i];
if (m<p[i])
m=p[i];
d=d+p[i];
}
d=(d-n-m)/10;
3a6: e6 18 sub r14, r6
3a8: f7 08 sbc r15, r7
3aa: 08 09 sbc r16, r8
3ac: 19 09 sbc r17, r9
3ae: ea 18 sub r14, r10
3b0: fb 08 sbc r15, r11
3b2: 0c 09 sbc r16, r12
3b4: 1d 09 sbc r17, r13
3b6: c8 01 movw r24, r16
3b8: b7 01 movw r22, r14
3ba: 2a e0 ldi r18, 0x0A ; 10
3bc: 30 e0 ldi r19, 0x00 ; 0
3be: 40 e0 ldi r20, 0x00 ; 0
3c0: 50 e0 ldi r21, 0x00 ; 0
3c2: 16 d0 rcall .+44 ; 0x3f0 <__udivmodsi4>
3c4: c9 01 movw r24, r18
3c6: da 01 movw r26, r20
a=d%256;
d=d>>8;
3c8: 29 2f mov r18, r25
3ca: 3a 2f mov r19, r26
3cc: 4b 2f mov r20, r27
3ce: 55 27 eor r21, r21
b=d%256;
d=d>>8;
3d0: 7d 01 movw r14, r26
3d2: 00 27 eor r16, r16
3d4: 11 27 eor r17, r17
}
void USART_Transmit( unsigned char data )
{PORTD|=(1<<PD2); //485输出使能
3d6: 92 9a sbi 0x12, 2 ; 18
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<<UDRE)) )
3d8: 5d 9b sbis 0x0b, 5 ; 11
3da: fe cf rjmp .-4 ; 0x3d8 <main+0xda>
;
/* 将数据放入缓冲器,发送数据 */
UDR = data;
3dc: ec b8 out 0x0c, r14 ; 12
}
void USART_Transmit( unsigned char data )
{PORTD|=(1<<PD2); //485输出使能
3de: 92 9a sbi 0x12, 2 ; 18
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<<UDRE)) )
3e0: 5d 9b sbis 0x0b, 5 ; 11
3e2: fe cf rjmp .-4 ; 0x3e0 <main+0xe2>
;
/* 将数据放入缓冲器,发送数据 */
UDR = data;
3e4: 2c b9 out 0x0c, r18 ; 12
}
void USART_Transmit( unsigned char data )
{PORTD|=(1<<PD2); //485输出使能
3e6: 92 9a sbi 0x12, 2 ; 18
/* 等待发送缓冲器为空 */
while ( !( UCSRA & (1<<UDRE)) )
3e8: 5d 9b sbis 0x0b, 5 ; 11
3ea: fe cf rjmp .-4 ; 0x3e8 <main+0xea>
;
/* 将数据放入缓冲器,发送数据 */
UDR = data;
3ec: 8c b9 out 0x0c, r24 ; 12
3ee: b3 cf rjmp .-154 ; 0x356 <main+0x58>
000003f0 <__udivmodsi4>:
3f0: a1 e2 ldi r26, 0x21 ; 33
3f2: 1a 2e mov r1, r26
3f4: aa 1b sub r26, r26
3f6: bb 1b sub r27, r27
3f8: fd 01 movw r30, r26
3fa: 0d c0 rjmp .+26 ; 0x416 <__udivmodsi4_ep>
000003fc <__udivmodsi4_loop>:
3fc: aa 1f adc r26, r26
3fe: bb 1f adc r27, r27
400: ee 1f adc r30, r30
402: ff 1f adc r31, r31
404: a2 17 cp r26, r18
406: b3 07 cpc r27, r19
408: e4 07 cpc r30, r20
40a: f5 07 cpc r31, r21
40c: 20 f0 brcs .+8 ; 0x416 <__udivmodsi4_ep>
40e: a2 1b sub r26, r18
410: b3 0b sbc r27, r19
412: e4 0b sbc r30, r20
414: f5 0b sbc r31, r21
00000416 <__udivmodsi4_ep>:
416: 66 1f adc r22, r22
418: 77 1f adc r23, r23
41a: 88 1f adc r24, r24
41c: 99 1f adc r25, r25
41e: 1a 94 dec r1
420: 69 f7 brne .-38 ; 0x3fc <__udivmodsi4_loop>
422: 60 95 com r22
424: 70 95 com r23
426: 80 95 com r24
428: 90 95 com r25
42a: 9b 01 movw r18, r22
42c: ac 01 movw r20, r24
42e: bd 01 movw r22, r26
430: cf 01 movw r24, r30
432: 08 95 ret
00000434 <_exit>:
434: f8 94 cli
00000436 <__stop_program>:
436: ff cf rjmp .-2 ; 0x436 <__stop_program>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -