📄 main.lss
字号:
for(j=0;j<50;j++)
152: 1c 82 std Y+4, r1 ; 0x04
154: 1b 82 std Y+3, r1 ; 0x03
156: 05 c0 rjmp .+10 ; 0x162 <ad_write+0x4c>
158: 8b 81 ldd r24, Y+3 ; 0x03
15a: 9c 81 ldd r25, Y+4 ; 0x04
15c: 01 96 adiw r24, 0x01 ; 1
15e: 9c 83 std Y+4, r25 ; 0x04
160: 8b 83 std Y+3, r24 ; 0x03
162: 8b 81 ldd r24, Y+3 ; 0x03
164: 9c 81 ldd r25, Y+4 ; 0x04
166: c2 97 sbiw r24, 0x32 ; 50
168: b8 f3 brcs .-18 ; 0x158 <ad_write+0x42>
/*************************************************************************************/
volatile void delay_us(unsigned char a) //挺时1uS
{
volatile unsigned int i=0,j=0;
for(i=0;i<a;i++)
16a: 89 81 ldd r24, Y+1 ; 0x01
16c: 9a 81 ldd r25, Y+2 ; 0x02
16e: 01 96 adiw r24, 0x01 ; 1
170: 9a 83 std Y+2, r25 ; 0x02
172: 89 83 std Y+1, r24 ; 0x01
174: 89 81 ldd r24, Y+1 ; 0x01
176: 9a 81 ldd r25, Y+2 ; 0x02
178: 89 2b or r24, r25
17a: 59 f3 breq .-42 ; 0x152 <ad_write+0x3c>
ads_senddata(0x50+reg);//选择写入寄存器
ads_senddata(0x00); //写入1个寄存器
ads_senddata(data); //写入数据
PORTB|=(1<<PB1); //SPI的CS=1,停止
delay_us(1); //挺时1uS //可更改。但读数据必须在要等待最小一个采集周期(大约90ms)后。
}
17c: 0f 90 pop r0
17e: 0f 90 pop r0
180: 0f 90 pop r0
182: 0f 90 pop r0
184: cf 91 pop r28
186: df 91 pop r29
188: 08 95 ret
0000018a <ad_read>:
/*************************************************************************************/
unsigned long int ad_read()//读A/D数据。
{
18a: df 93 push r29
18c: cf 93 push r28
18e: 00 d0 rcall .+0 ; 0x190 <ad_read+0x6>
190: 00 d0 rcall .+0 ; 0x192 <ad_read+0x8>
192: cd b7 in r28, 0x3d ; 61
194: de b7 in r29, 0x3e ; 62
unsigned long int sum=0;
unsigned char r=0,a=0;
PORTB&=~(1<<PB1); //SPI的CS=0使能
196: c1 98 cbi 0x18, 1 ; 24
/*************************************************************************************/
//ads126发送一字节的数据
unsigned char ads_senddata(unsigned char data) //SPI发送数据,要在外部保证SS = 0
{
SPDR = data; //启动数据传输
198: 8c ef ldi r24, 0xFC ; 252
19a: 8f b9 out 0x0f, r24 ; 15
while((SPSR & 0x80) == 0); // 等待传输结束
19c: 77 9b sbis 0x0e, 7 ; 14
19e: fe cf rjmp .-4 ; 0x19c <ad_read+0x12>
data = SPDR;
1a0: 8f b1 in r24, 0x0f ; 15
/*************************************************************************************/
//ads126发送一字节的数据
unsigned char ads_senddata(unsigned char data) //SPI发送数据,要在外部保证SS = 0
{
SPDR = data; //启动数据传输
1a2: 8f ef ldi r24, 0xFF ; 255
1a4: 8f b9 out 0x0f, r24 ; 15
while((SPSR & 0x80) == 0); // 等待传输结束
1a6: 77 9b sbis 0x0e, 7 ; 14
1a8: fe cf rjmp .-4 ; 0x1a6 <ad_read+0x1c>
data = SPDR;
1aa: 8f b1 in r24, 0x0f ; 15
unsigned long int sum=0;
unsigned char r=0,a=0;
PORTB&=~(1<<PB1); //SPI的CS=0使能
ads_senddata(0xfc); //SYNC AD同步
ads_senddata(0xff); //WAKEUP 唤醒,并启动AD转换
while((PIND&0X8)!=0); //DRDY信号低时才能写寄存器 ,等待转换完毕
1ac: 83 99 sbic 0x10, 3 ; 16
1ae: fe cf rjmp .-4 ; 0x1ac <ad_read+0x22>
/*************************************************************************************/
volatile void delay_us(unsigned char a) //挺时1uS
{
volatile unsigned int i=0,j=0;
1b0: 1c 82 std Y+4, r1 ; 0x04
1b2: 1b 82 std Y+3, r1 ; 0x03
1b4: 1a 82 std Y+2, r1 ; 0x02
1b6: 19 82 std Y+1, r1 ; 0x01
for(i=0;i<a;i++)
1b8: 1c 82 std Y+4, r1 ; 0x04
1ba: 1b 82 std Y+3, r1 ; 0x03
1bc: 11 c0 rjmp .+34 ; 0x1e0 <ad_read+0x56>
for(j=0;j<50;j++)
1be: 1a 82 std Y+2, r1 ; 0x02
1c0: 19 82 std Y+1, r1 ; 0x01
1c2: 05 c0 rjmp .+10 ; 0x1ce <ad_read+0x44>
1c4: 89 81 ldd r24, Y+1 ; 0x01
1c6: 9a 81 ldd r25, Y+2 ; 0x02
1c8: 01 96 adiw r24, 0x01 ; 1
1ca: 9a 83 std Y+2, r25 ; 0x02
1cc: 89 83 std Y+1, r24 ; 0x01
1ce: 89 81 ldd r24, Y+1 ; 0x01
1d0: 9a 81 ldd r25, Y+2 ; 0x02
1d2: c2 97 sbiw r24, 0x32 ; 50
1d4: b8 f3 brcs .-18 ; 0x1c4 <ad_read+0x3a>
/*************************************************************************************/
volatile void delay_us(unsigned char a) //挺时1uS
{
volatile unsigned int i=0,j=0;
for(i=0;i<a;i++)
1d6: 8b 81 ldd r24, Y+3 ; 0x03
1d8: 9c 81 ldd r25, Y+4 ; 0x04
1da: 01 96 adiw r24, 0x01 ; 1
1dc: 9c 83 std Y+4, r25 ; 0x04
1de: 8b 83 std Y+3, r24 ; 0x03
1e0: 8b 81 ldd r24, Y+3 ; 0x03
1e2: 9c 81 ldd r25, Y+4 ; 0x04
1e4: 89 2b or r24, r25
1e6: 59 f3 breq .-42 ; 0x1be <ad_read+0x34>
/*************************************************************************************/
//ads126发送一字节的数据
unsigned char ads_senddata(unsigned char data) //SPI发送数据,要在外部保证SS = 0
{
SPDR = data; //启动数据传输
1e8: 81 e0 ldi r24, 0x01 ; 1
1ea: 8f b9 out 0x0f, r24 ; 15
while((SPSR & 0x80) == 0); // 等待传输结束
1ec: 77 9b sbis 0x0e, 7 ; 14
1ee: fe cf rjmp .-4 ; 0x1ec <ad_read+0x62>
data = SPDR;
1f0: 8f b1 in r24, 0x0f ; 15
/*************************************************************************************/
volatile void delay_us(unsigned char a) //挺时1uS
{
volatile unsigned int i=0,j=0;
1f2: 1a 82 std Y+2, r1 ; 0x02
1f4: 19 82 std Y+1, r1 ; 0x01
1f6: 1c 82 std Y+4, r1 ; 0x04
1f8: 1b 82 std Y+3, r1 ; 0x03
for(i=0;i<a;i++)
1fa: 1a 82 std Y+2, r1 ; 0x02
1fc: 19 82 std Y+1, r1 ; 0x01
1fe: 11 c0 rjmp .+34 ; 0x222 <ad_read+0x98>
for(j=0;j<50;j++)
200: 1c 82 std Y+4, r1 ; 0x04
202: 1b 82 std Y+3, r1 ; 0x03
204: 05 c0 rjmp .+10 ; 0x210 <ad_read+0x86>
206: 8b 81 ldd r24, Y+3 ; 0x03
208: 9c 81 ldd r25, Y+4 ; 0x04
20a: 01 96 adiw r24, 0x01 ; 1
20c: 9c 83 std Y+4, r25 ; 0x04
20e: 8b 83 std Y+3, r24 ; 0x03
210: 8b 81 ldd r24, Y+3 ; 0x03
212: 9c 81 ldd r25, Y+4 ; 0x04
214: c2 97 sbiw r24, 0x32 ; 50
216: b8 f3 brcs .-18 ; 0x206 <ad_read+0x7c>
/*************************************************************************************/
volatile void delay_us(unsigned char a) //挺时1uS
{
volatile unsigned int i=0,j=0;
for(i=0;i<a;i++)
218: 89 81 ldd r24, Y+1 ; 0x01
21a: 9a 81 ldd r25, Y+2 ; 0x02
21c: 01 96 adiw r24, 0x01 ; 1
21e: 9a 83 std Y+2, r25 ; 0x02
220: 89 83 std Y+1, r24 ; 0x01
222: 89 81 ldd r24, Y+1 ; 0x01
224: 9a 81 ldd r25, Y+2 ; 0x02
226: 89 2b or r24, r25
228: 59 f3 breq .-42 ; 0x200 <ad_read+0x76>
22a: 20 e0 ldi r18, 0x00 ; 0
22c: 30 e0 ldi r19, 0x00 ; 0
22e: 40 e0 ldi r20, 0x00 ; 0
230: 50 e0 ldi r21, 0x00 ; 0
232: 60 e0 ldi r22, 0x00 ; 0
/*************************************************************************************/
//ads126发送一字节的数据
unsigned char ads_senddata(unsigned char data) //SPI发送数据,要在外部保证SS = 0
{
SPDR = data; //启动数据传输
234: 1f b8 out 0x0f, r1 ; 15
while((SPSR & 0x80) == 0); // 等待传输结束
236: 77 9b sbis 0x0e, 7 ; 14
238: fe cf rjmp .-4 ; 0x236 <ad_read+0xac>
data = SPDR;
23a: 8f b1 in r24, 0x0f ; 15
ads_senddata(0x01); //发送读取数据命令
delay_us(1); //挺时1uS
for (r=0;r<3;r++) //读取24位数据
{
a=ads_senddata(0x00); //读取数据,先高位,后低位
sum|=a;
23c: 90 e0 ldi r25, 0x00 ; 0
23e: a0 e0 ldi r26, 0x00 ; 0
240: b0 e0 ldi r27, 0x00 ; 0
242: 82 2b or r24, r18
244: 93 2b or r25, r19
246: a4 2b or r26, r20
248: b5 2b or r27, r21
sum=sum<<8;
24a: 22 27 eor r18, r18
24c: 38 2f mov r19, r24
24e: 49 2f mov r20, r25
250: 5a 2f mov r21, r26
while((PIND&0X8)!=0); //DRDY信号低时才能写寄存器 ,等待转换完毕
{
delay_us(1); //挺时1uS
ads_senddata(0x01); //发送读取数据命令
delay_us(1); //挺时1uS
for (r=0;r<3;r++) //读取24位数据
252: 6f 5f subi r22, 0xFF ; 255
254: 63 30 cpi r22, 0x03 ; 3
256: 71 f7 brne .-36 ; 0x234 <ad_read+0xaa>
{
a=ads_senddata(0x00); //读取数据,先高位,后低位
sum|=a;
sum=sum<<8;
}
sum=sum>>8;
258: bb 27 eor r27, r27
25a: a5 2f mov r26, r21
25c: 94 2f mov r25, r20
25e: 83 2f mov r24, r19
}
PORTB|=(1<<PB1); //SPI的CS=1,停止
260: c1 9a sbi 0x18, 1 ; 24
262: 2f ef ldi r18, 0xFF ; 255
264: 3f ef ldi r19, 0xFF ; 255
266: 4f ef ldi r20, 0xFF ; 255
268: 50 e0 ldi r21, 0x00 ; 0
26a: 28 1b sub r18, r24
26c: 39 0b sbc r19, r25
26e: 4a 0b sbc r20, r26
270: 5b 0b sbc r21, r27
sum=0xffffff-sum;
return sum;
delay_us(1); //挺时1uS
}
272: b9 01 movw r22, r18
274: ca 01 movw r24, r20
276: 0f 90 pop r0
278: 0f 90 pop r0
27a: 0f 90 pop r0
27c: 0f 90 pop r0
27e: cf 91 pop r28
280: df 91 pop r29
282: 08 95 ret
00000284 <ADS1256>:
/*************************************************************************************/
void ADS1256(void) //初始化ADS1256
{
284: 8b 98 cbi 0x11, 3 ; 17
DDRD&=~(1<<PD3); //DRDY
PORTD|=(1<<PD3);
286: 93 9a sbi 0x12, 3 ; 18
DDRD|=(1<<PD4); //START
288: 8c 9a sbi 0x11, 4 ; 17
PORTD|=(1<<PD4);
28a: 94 9a sbi 0x12, 4 ; 18
PORTB&=~(1<<PB2); //复位ADS1256
28c: c2 98 cbi 0x18, 2 ; 24
PORTB|=1<<PB2;
28e: c2 9a sbi 0x18, 2 ; 24
ad_write(00,0xf7); //初始化STATUS reg ID位为f,数据输出高位在先,自动校准开,输入缓冲关闭,DRDY高电平
290: 67 ef ldi r22, 0xF7 ; 247
292: 80 e0 ldi r24, 0x00 ; 0
294: 40 df rcall .-384 ; 0x116 <ad_write>
ad_write(01,0x80); //初始化MUX reg 单端输入第0通道为选通
296: 60 e8 ldi r22, 0x80 ; 128
298: 81 e0 ldi r24, 0x01 ; 1
29a: 3d df rcall .-390 ; 0x116 <ad_write>
ad_write(02,0x00); //初始化ADCOM reg 时钟输出关闭,传感器检测关闭,放大倍数为1
29c: 60 e0 ldi r22, 0x00 ; 0
29e: 82 e0 ldi r24, 0x02 ; 2
2a0: 3a df rcall .-396 ; 0x116 <ad_write>
ad_write(03,0xf0); //初始化DRATE reg 数据速率为30K
2a2: 60 ef ldi r22, 0xF0 ; 240
2a4: 83 e0 ldi r24, 0x03 ; 3
2a6: 37 df rcall .-402 ; 0x116 <ad_write>
ad_write(04,0x0f); //初始化DRATE reg 定义IO为输出高电平,节能模式
2a8: 6f e0 ldi r22, 0x0F ; 15
2aa: 84 e0 ldi r24, 0x04 ; 4
2ac: 34 df rcall .-408 ; 0x116 <ad_write>
}
2ae: 08 95 ret
000002b0 <ads_sum>:
/*************************************************************************************/
unsigned long int ads_sum(unsigned char data)//读A/D数据。
{
2b0: 68 2f mov r22, r24
unsigned long int aa=0;
if((data>=0)&&(data<=7))
2b2: 88 30 cpi r24, 0x08 ; 8
2b4: 28 f0 brcs .+10 ; 0x2c0 <ads_sum+0x10>
2b6: 20 e0 ldi r18, 0x00 ; 0
2b8: 30 e0 ldi r19, 0x00 ; 0
2ba: 40 e0 ldi r20, 0x00 ; 0
2bc: 50 e0 ldi r21, 0x00 ; 0
2be: 0b c0 rjmp .+22 ; 0x2d6 <ads_sum+0x26>
{
ad_write(01,0x80+data); //第几通道为选通
2c0: 60 58 subi r22, 0x80 ; 128
2c2: 81 e0 ldi r24, 0x01 ; 1
2c4: 28 df rcall .-432 ; 0x116 <ad_write>
/*************************************************************************************/
//ads126发送一字节的数据
unsigned char ads_senddata(unsigned char data) //SPI发送数据,要在外部保证SS = 0
{
SPDR = data; //启动数据传输
2c6: 80 ef ldi r24, 0xF0 ; 240
2c8: 8f b9 out 0x0f, r24 ; 15
while((SPSR & 0x80) == 0); // 等待传输结束
2ca: 77 9b sbis 0x0e, 7 ; 14
2cc: fe cf rjmp .-4 ; 0x2ca <ads_sum+0x1a>
data = SPDR;
2ce: 8f b1 in r24, 0x0f ; 15
unsigned long int aa=0;
if((data>=0)&&(data<=7))
{
ad_write(01,0x80+data); //第几通道为选通
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -