📄 adcurrent.lss
字号:
15e: e0 91 67 00 lds r30, 0x0067
162: f0 91 68 00 lds r31, 0x0068
166: 31 83 std Z+1, r19 ; 0x01
168: 20 83 st Z, r18
16a: 0e 94 67 00 call 0xce <SetADC>
16e: 06 c0 rjmp .+12 ; 0x17c <__vector_14+0x62>
170: 36 9a sbi 0x06, 6 ; 6
172: 80 91 60 00 lds r24, 0x0060
176: 80 5f subi r24, 0xF0 ; 240
178: 80 93 60 00 sts 0x0060, r24
17c: ff 91 pop r31
17e: ef 91 pop r30
180: bf 91 pop r27
182: af 91 pop r26
184: 9f 91 pop r25
186: 8f 91 pop r24
188: 7f 91 pop r23
18a: 6f 91 pop r22
18c: 5f 91 pop r21
18e: 4f 91 pop r20
190: 3f 91 pop r19
192: 2f 91 pop r18
194: 0f 90 pop r0
196: 0f be out 0x3f, r0 ; 63
198: 0f 90 pop r0
19a: 1f 90 pop r1
19c: 18 95 reti
0000019e <PortInit>:
影响的全局变量:无
***************************************************/
void PortInit(void)
{
PORTA = 0x00; //关闭上拉电阻
19e: 1b ba out 0x1b, r1 ; 27
DDRA = 0x00; //AD输入
1a0: 1a ba out 0x1a, r1 ; 26
PORTB = 0x00;
1a2: 18 ba out 0x18, r1 ; 24
DDRB = 0x00;
1a4: 17 ba out 0x17, r1 ; 23
PORTC = 0x00;
1a6: 15 ba out 0x15, r1 ; 21
DDRC = 0xFF;
1a8: 8f ef ldi r24, 0xFF ; 255
1aa: 84 bb out 0x14, r24 ; 20
PORTD = 0x00;
1ac: 12 ba out 0x12, r1 ; 18
DDRD = 0x00;
1ae: 11 ba out 0x11, r1 ; 17
TIMSK = 0x00; //清中断允许寄存器
1b0: 19 be out 0x39, r1 ; 57
1b2: 08 95 ret
000001b4 <TimerInit>:
}
/***************************************************
函数名称:void TimerInit(void)
函数功能:初始化定时时钟,T2,CTC模式,5ms自动重载
输入参数:无
返回参数:无
影响的全局变量:无
***************************************************/
void TimerInit(void)
{
TCNT2 = 0x00;
1b4: 14 bc out 0x24, r1 ; 36
OCR2 = 77;
1b6: 8d e4 ldi r24, 0x4D ; 77
1b8: 83 bd out 0x23, r24 ; 35
TIFR |= (1<<OCF2); //清匹配中断标志位
1ba: 88 b7 in r24, 0x38 ; 56
1bc: 80 68 ori r24, 0x80 ; 128
1be: 88 bf out 0x38, r24 ; 56
TIMSK |= (1<<OCIE2); //允许匹配中断
1c0: 89 b7 in r24, 0x39 ; 57
1c2: 80 68 ori r24, 0x80 ; 128
1c4: 89 bf out 0x39, r24 ; 57
TCCR2 = (1<<WGM21)|(1<<CS20)|(1<<CS21)|(1<<CS22); //1024分频,CTC模式
1c6: 8f e0 ldi r24, 0x0F ; 15
1c8: 85 bd out 0x25, r24 ; 37
1ca: 08 95 ret
000001cc <__vector_3>:
/*
Fi = F_CPU(16000) / (OCR0(77+1) * n(1024) ) = 0.2KHz
Ti = 1/Fi = 1/0.2 = 5ms
*/
}
/***************************************************
函数名称:SIGNAL(SIG_OUTPUT_COMPARE2)
函数功能:定时器匹配中断,5ms定时中断
输入参数:无
返回参数:无
影响的全局变量:刷新各采样间隔和各任务延时以及系统时钟
***************************************************/
SIGNAL(SIG_OUTPUT_COMPARE2)
{
1cc: 1f 92 push r1
1ce: 0f 92 push r0
1d0: 0f b6 in r0, 0x3f ; 63
1d2: 0f 92 push r0
1d4: 11 24 eor r1, r1
1d6: 8f 93 push r24
1d8: 9f 93 push r25
if (Timer > 0) //如果电机运行
1da: 80 91 69 00 lds r24, 0x0069
1de: 90 91 6a 00 lds r25, 0x006A
1e2: 89 2b or r24, r25
1e4: 49 f0 breq .+18 ; 0x1f8 <__vector_3+0x2c>
{
Timer --; //电机运行时间减1
1e6: 80 91 69 00 lds r24, 0x0069
1ea: 90 91 6a 00 lds r25, 0x006A
1ee: 01 97 sbiw r24, 0x01 ; 1
1f0: 90 93 6a 00 sts 0x006A, r25
1f4: 80 93 69 00 sts 0x0069, r24
1f8: 9f 91 pop r25
1fa: 8f 91 pop r24
1fc: 0f 90 pop r0
1fe: 0f be out 0x3f, r0 ; 63
200: 0f 90 pop r0
202: 1f 90 pop r1
204: 18 95 reti
00000206 <main>:
}
}
/***************************************************
函数名称:main()
函数功能:主函数
输入参数:无
返回参数:无
影响的全局变量:无
***************************************************/
int main(void)
{
206: cf e5 ldi r28, 0x5F ; 95
208: d4 e0 ldi r29, 0x04 ; 4
20a: de bf out 0x3e, r29 ; 62
20c: cd bf out 0x3d, r28 ; 61
PortInit();
20e: 0e 94 cf 00 call 0x19e <PortInit>
TimerInit();
212: 0e 94 da 00 call 0x1b4 <TimerInit>
ADInit();
216: 0e 94 47 00 call 0x8e <ADInit>
UARTInit();
21a: 0e 94 63 01 call 0x2c6 <UARTInit>
PORTC = (0x01<<4); //启动电机2
21e: 80 e1 ldi r24, 0x10 ; 16
220: 85 bb out 0x15, r24 ; 21
SampleList = 0x02; //AD2作为正差分输入
222: 82 e0 ldi r24, 0x02 ; 2
224: 80 93 60 00 sts 0x0060, r24
/**以下两行是采用中断方式采样,如果采用查询方式进行则不需要这两行**/
ADCSRA |= (1<<ADIE); //开ADC中断
228: 33 9a sbi 0x06, 3 ; 6
SetADC(); //第一次转换
22a: 0e 94 67 00 call 0xce <SetADC>
/******************************************************************/
sei();
22e: 78 94 sei
while(1)
{
Timer = 200; //1秒定时,每一秒发送一次数据
230: 88 ec ldi r24, 0xC8 ; 200
232: 90 e0 ldi r25, 0x00 ; 0
234: 90 93 6a 00 sts 0x006A, r25
238: 80 93 69 00 sts 0x0069, r24
while (Timer != 0) ;
23c: 80 91 69 00 lds r24, 0x0069
240: 90 91 6a 00 lds r25, 0x006A
244: 89 2b or r24, r25
246: d1 f7 brne .-12 ; 0x23c <main+0x36>
/**以下三行是采用查询方式采样,如果采用中断方式进行则不需要这三行***/
// Current[2] = ReadVoltage(SampleList+2);
// Current[1] = ReadVoltage(SampleList+1);
// Current[0] = ReadVoltage(SampleList);
/*******************************************************************/
cli();
248: f8 94 cli
PutByte((uint8_t)(Current[0]>>8));
24a: 80 91 61 00 lds r24, 0x0061
24e: 90 91 62 00 lds r25, 0x0062
252: 89 2f mov r24, r25
254: 99 27 eor r25, r25
256: 0e 94 6b 01 call 0x2d6 <PutByte>
PutByte((uint8_t)(Current[0]));
25a: 80 91 61 00 lds r24, 0x0061
25e: 90 91 62 00 lds r25, 0x0062
262: 0e 94 6b 01 call 0x2d6 <PutByte>
PutByte((uint8_t)(Current[1]>>8));
266: 80 91 63 00 lds r24, 0x0063
26a: 90 91 64 00 lds r25, 0x0064
26e: 89 2f mov r24, r25
270: 99 27 eor r25, r25
272: 0e 94 6b 01 call 0x2d6 <PutByte>
PutByte((uint8_t)(Current[1]));
276: 80 91 63 00 lds r24, 0x0063
27a: 90 91 64 00 lds r25, 0x0064
27e: 0e 94 6b 01 call 0x2d6 <PutByte>
PutByte((uint8_t)(Current[2]>>8));
282: 80 91 65 00 lds r24, 0x0065
286: 90 91 66 00 lds r25, 0x0066
28a: 89 2f mov r24, r25
28c: 99 27 eor r25, r25
28e: 0e 94 6b 01 call 0x2d6 <PutByte>
PutByte((uint8_t)(Current[2]));
292: 80 91 65 00 lds r24, 0x0065
296: 90 91 66 00 lds r25, 0x0066
29a: 0e 94 6b 01 call 0x2d6 <PutByte>
PutByte('\r');
29e: 8d e0 ldi r24, 0x0D ; 13
2a0: 0e 94 6b 01 call 0x2d6 <PutByte>
PutByte('\n');
2a4: 8a e0 ldi r24, 0x0A ; 10
2a6: 0e 94 6b 01 call 0x2d6 <PutByte>
Current[0] = 0;
2aa: 10 92 62 00 sts 0x0062, r1
2ae: 10 92 61 00 sts 0x0061, r1
Current[1] = 0;
2b2: 10 92 64 00 sts 0x0064, r1
2b6: 10 92 63 00 sts 0x0063, r1
Current[2] = 0;
2ba: 10 92 66 00 sts 0x0066, r1
2be: 10 92 65 00 sts 0x0065, r1
sei();
2c2: 78 94 sei
2c4: b5 cf rjmp .-150 ; 0x230 <main+0x2a>
000002c6 <UARTInit>:
影响的全局变量:无
***************************************************/
void UARTInit(void)
{
UBRRL = 25;
2c6: 89 e1 ldi r24, 0x19 ; 25
2c8: 89 b9 out 0x09, r24 ; 9
UCSRA = 0x00;
2ca: 1b b8 out 0x0b, r1 ; 11
UCSRC = (1<<URSEL)|(1<<UPM1)|(1<<UPM0)|(1<<USBS)|(1<<UCSZ1)|(1<<UCSZ0);
2cc: 8e eb ldi r24, 0xBE ; 190
2ce: 80 bd out 0x20, r24 ; 32
UCSRB = (1<<RXEN)|(1<<TXEN)|(1<<RXCIE); //收发允许,允许接收中断
2d0: 88 e9 ldi r24, 0x98 ; 152
2d2: 8a b9 out 0x0a, r24 ; 10
2d4: 08 95 ret
000002d6 <PutByte>:
}
/***************************************************
函数名称:串口发送函数
函数功能:
输入参数:要发送的字节
返回参数:无
影响的全局变量:无
***************************************************/
void PutByte(uint8_t c) //UART发送一个8位的数据
{
while (!(UCSRA&(1<<UDRE)));
2d6: 5d 9b sbis 0x0b, 5 ; 11
2d8: fe cf rjmp .-4 ; 0x2d6 <PutByte>
UDR=c;
2da: 8c b9 out 0x0c, r24 ; 12
2dc: 08 95 ret
000002de <GetByte>:
}
/***************************************************
函数名称:串口接收函数
函数功能:
输入参数:无
返回参数:接收到的数据,一个byte
影响的全局变量:无
***************************************************/
uint8_t GetByte(void) //UART接收一个byte的数据
{
while (!(UCSRA&(1<<RXC)));
2de: 5f 9b sbis 0x0b, 7 ; 11
2e0: fe cf rjmp .-4 ; 0x2de <GetByte>
return UDR;
2e2: 8c b1 in r24, 0x0c ; 12
}
2e4: 99 27 eor r25, r25
2e6: 08 95 ret
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -