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

📄 at90can128_uart.lss

📁 UART sample code for AT90CAN128
💻 LSS
字号:

at90can128_uart.elf:     file format elf32-avr

Sections:
Idx Name          Size      VMA       LMA       File off  Algn
  0 .text         000002d6  00000000  00000000  00000074  2**1
                  CONTENTS, ALLOC, LOAD, READONLY, CODE
  1 .bss          00000004  00800100  00800100  0000034a  2**0
                  ALLOC
  2 .stab         00000414  00000000  00000000  0000034c  2**2
                  CONTENTS, READONLY, DEBUGGING
  3 .stabstr      00000071  00000000  00000000  00000760  2**0
                  CONTENTS, READONLY, DEBUGGING
  4 .debug_aranges 00000020  00000000  00000000  000007d1  2**0
                  CONTENTS, READONLY, DEBUGGING
  5 .debug_pubnames 0000005a  00000000  00000000  000007f1  2**0
                  CONTENTS, READONLY, DEBUGGING
  6 .debug_info   0000022b  00000000  00000000  0000084b  2**0
                  CONTENTS, READONLY, DEBUGGING
  7 .debug_abbrev 0000009e  00000000  00000000  00000a76  2**0
                  CONTENTS, READONLY, DEBUGGING
  8 .debug_line   00000168  00000000  00000000  00000b14  2**0
                  CONTENTS, READONLY, DEBUGGING
  9 .debug_frame  00000060  00000000  00000000  00000c7c  2**2
                  CONTENTS, READONLY, DEBUGGING
Disassembly of section .text:

00000000 <__vectors>:
   0:	0c 94 4a 00 	jmp	0x94	; 0x94 <__ctors_end>
   4:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
   8:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
   c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  10:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  14:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  18:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  1c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  20:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  24:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  28:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  2c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  30:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  34:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  38:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  3c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  40:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  44:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  48:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  4c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  50:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  54:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  58:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  5c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  60:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  64:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  68:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  6c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  70:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  74:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  78:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  7c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  80:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  84:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  88:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  8c:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>
  90:	0c 94 69 00 	jmp	0xd2	; 0xd2 <__bad_interrupt>

00000094 <__ctors_end>:
  94:	11 24       	eor	r1, r1
  96:	1f be       	out	0x3f, r1	; 63
  98:	cf ef       	ldi	r28, 0xFF	; 255
  9a:	d0 e1       	ldi	r29, 0x10	; 16
  9c:	de bf       	out	0x3e, r29	; 62
  9e:	cd bf       	out	0x3d, r28	; 61

000000a0 <__do_copy_data>:
  a0:	11 e0       	ldi	r17, 0x01	; 1
  a2:	a0 e0       	ldi	r26, 0x00	; 0
  a4:	b1 e0       	ldi	r27, 0x01	; 1
  a6:	e6 ed       	ldi	r30, 0xD6	; 214
  a8:	f2 e0       	ldi	r31, 0x02	; 2
  aa:	00 e0       	ldi	r16, 0x00	; 0
  ac:	0b bf       	out	0x3b, r16	; 59
  ae:	02 c0       	rjmp	.+4      	; 0xb4 <__do_copy_data+0x14>
  b0:	07 90       	elpm	r0, Z+
  b2:	0d 92       	st	X+, r0
  b4:	a0 30       	cpi	r26, 0x00	; 0
  b6:	b1 07       	cpc	r27, r17
  b8:	d9 f7       	brne	.-10     	; 0xb0 <__do_copy_data+0x10>

000000ba <__do_clear_bss>:
  ba:	11 e0       	ldi	r17, 0x01	; 1
  bc:	a0 e0       	ldi	r26, 0x00	; 0
  be:	b1 e0       	ldi	r27, 0x01	; 1
  c0:	01 c0       	rjmp	.+2      	; 0xc4 <.do_clear_bss_start>

000000c2 <.do_clear_bss_loop>:
  c2:	1d 92       	st	X+, r1

000000c4 <.do_clear_bss_start>:
  c4:	a4 30       	cpi	r26, 0x04	; 4
  c6:	b1 07       	cpc	r27, r17
  c8:	e1 f7       	brne	.-8      	; 0xc2 <.do_clear_bss_loop>
  ca:	0e 94 23 01 	call	0x246	; 0x246 <main>
  ce:	0c 94 6a 01 	jmp	0x2d4	; 0x2d4 <_exit>

000000d2 <__bad_interrupt>:
  d2:	0c 94 00 00 	jmp	0	; 0x0 <__vectors>

000000d6 <PORT_Init>:
#define	__AVR_ATMEGA128__	1
#define OSCSPEED	16000000		/* in Hz */

void PORT_Init()
{
  d6:	cf 93       	push	r28
  d8:	df 93       	push	r29
  da:	cd b7       	in	r28, 0x3d	; 61
  dc:	de b7       	in	r29, 0x3e	; 62
	//PORTA = 0b00000000;		DDRA = 0b01000000;	//Relay set as output (Bit6 = 1)
	PORTB = 0b00000000;		DDRB = 0b00000000;
  de:	e5 e2       	ldi	r30, 0x25	; 37
  e0:	f0 e0       	ldi	r31, 0x00	; 0
  e2:	10 82       	st	Z, r1
  e4:	e4 e2       	ldi	r30, 0x24	; 36
  e6:	f0 e0       	ldi	r31, 0x00	; 0
  e8:	10 82       	st	Z, r1
	PORTC = 0b00000000;		DDRC = 0b00000111;
  ea:	e8 e2       	ldi	r30, 0x28	; 40
  ec:	f0 e0       	ldi	r31, 0x00	; 0
  ee:	10 82       	st	Z, r1
  f0:	e7 e2       	ldi	r30, 0x27	; 39
  f2:	f0 e0       	ldi	r31, 0x00	; 0
  f4:	87 e0       	ldi	r24, 0x07	; 7
  f6:	80 83       	st	Z, r24
	//PORTD = 0b11000000;		DDRD = 0b00001000;	
	PORTE = 0b00000000;		DDRE = 0b0000010;		//TX set as output (Bit1 = 1)
  f8:	ee e2       	ldi	r30, 0x2E	; 46
  fa:	f0 e0       	ldi	r31, 0x00	; 0
  fc:	10 82       	st	Z, r1
  fe:	ed e2       	ldi	r30, 0x2D	; 45
 100:	f0 e0       	ldi	r31, 0x00	; 0
 102:	82 e0       	ldi	r24, 0x02	; 2
 104:	80 83       	st	Z, r24
	PORTF = 0b00000000;		DDRF = 0b00000000;
 106:	e1 e3       	ldi	r30, 0x31	; 49
 108:	f0 e0       	ldi	r31, 0x00	; 0
 10a:	10 82       	st	Z, r1
 10c:	e0 e3       	ldi	r30, 0x30	; 48
 10e:	f0 e0       	ldi	r31, 0x00	; 0
 110:	10 82       	st	Z, r1
 112:	df 91       	pop	r29
 114:	cf 91       	pop	r28
 116:	08 95       	ret

00000118 <UART_Init>:
}

void UART_Init(uint32_t Baud)
{
 118:	cf 93       	push	r28
 11a:	df 93       	push	r29
 11c:	cd b7       	in	r28, 0x3d	; 61
 11e:	de b7       	in	r29, 0x3e	; 62
 120:	26 97       	sbiw	r28, 0x06	; 6
 122:	0f b6       	in	r0, 0x3f	; 63
 124:	f8 94       	cli
 126:	de bf       	out	0x3e, r29	; 62
 128:	0f be       	out	0x3f, r0	; 63
 12a:	cd bf       	out	0x3d, r28	; 61
 12c:	6b 83       	std	Y+3, r22	; 0x03
 12e:	7c 83       	std	Y+4, r23	; 0x04
 130:	8d 83       	std	Y+5, r24	; 0x05
 132:	9e 83       	std	Y+6, r25	; 0x06
	unsigned int BaudRate = OSCSPEED / (16 * Baud) - 1;	/* as per pg. 173 of the user manual */
 134:	8b 81       	ldd	r24, Y+3	; 0x03
 136:	9c 81       	ldd	r25, Y+4	; 0x04
 138:	ad 81       	ldd	r26, Y+5	; 0x05
 13a:	be 81       	ldd	r27, Y+6	; 0x06
 13c:	88 0f       	add	r24, r24
 13e:	99 1f       	adc	r25, r25
 140:	aa 1f       	adc	r26, r26
 142:	bb 1f       	adc	r27, r27
 144:	88 0f       	add	r24, r24
 146:	99 1f       	adc	r25, r25
 148:	aa 1f       	adc	r26, r26
 14a:	bb 1f       	adc	r27, r27
 14c:	88 0f       	add	r24, r24
 14e:	99 1f       	adc	r25, r25
 150:	aa 1f       	adc	r26, r26
 152:	bb 1f       	adc	r27, r27
 154:	88 0f       	add	r24, r24
 156:	99 1f       	adc	r25, r25
 158:	aa 1f       	adc	r26, r26
 15a:	bb 1f       	adc	r27, r27
 15c:	9c 01       	movw	r18, r24
 15e:	ad 01       	movw	r20, r26
 160:	80 e0       	ldi	r24, 0x00	; 0
 162:	94 e2       	ldi	r25, 0x24	; 36
 164:	a4 ef       	ldi	r26, 0xF4	; 244
 166:	b0 e0       	ldi	r27, 0x00	; 0
 168:	bc 01       	movw	r22, r24
 16a:	cd 01       	movw	r24, r26
 16c:	0e 94 48 01 	call	0x290	; 0x290 <__udivmodsi4>
 170:	da 01       	movw	r26, r20
 172:	c9 01       	movw	r24, r18
 174:	01 97       	sbiw	r24, 0x01	; 1
 176:	9a 83       	std	Y+2, r25	; 0x02
 178:	89 83       	std	Y+1, r24	; 0x01

	//set BaudRate to registers UBRR1H and UBRR1L
	UBRR0H = (unsigned char) (BaudRate>>8);
 17a:	e5 ec       	ldi	r30, 0xC5	; 197
 17c:	f0 e0       	ldi	r31, 0x00	; 0
 17e:	89 81       	ldd	r24, Y+1	; 0x01
 180:	9a 81       	ldd	r25, Y+2	; 0x02
 182:	89 2f       	mov	r24, r25
 184:	99 27       	eor	r25, r25
 186:	80 83       	st	Z, r24
	UBRR0L = (unsigned char) BaudRate;
 188:	e4 ec       	ldi	r30, 0xC4	; 196
 18a:	f0 e0       	ldi	r31, 0x00	; 0
 18c:	89 81       	ldd	r24, Y+1	; 0x01
 18e:	80 83       	st	Z, r24

	UCSR0B = UCSR0B | 0b00011000;	//enable Receiver and Transmitter (Bit3 = 1, Bit4 = 1)
 190:	a1 ec       	ldi	r26, 0xC1	; 193
 192:	b0 e0       	ldi	r27, 0x00	; 0
 194:	e1 ec       	ldi	r30, 0xC1	; 193
 196:	f0 e0       	ldi	r31, 0x00	; 0
 198:	80 81       	ld	r24, Z
 19a:	88 61       	ori	r24, 0x18	; 24
 19c:	8c 93       	st	X, r24

	UCSR0C = UCSR0C | 0b10000110;	//Set frame format: disabled parity, 8 data (Bit1 = 1, Bit2 = 1), 1 stop bit (Bit3 = 0)
 19e:	a2 ec       	ldi	r26, 0xC2	; 194
 1a0:	b0 e0       	ldi	r27, 0x00	; 0
 1a2:	e2 ec       	ldi	r30, 0xC2	; 194
 1a4:	f0 e0       	ldi	r31, 0x00	; 0
 1a6:	80 81       	ld	r24, Z
 1a8:	86 68       	ori	r24, 0x86	; 134
 1aa:	8c 93       	st	X, r24
 1ac:	26 96       	adiw	r28, 0x06	; 6
 1ae:	0f b6       	in	r0, 0x3f	; 63
 1b0:	f8 94       	cli
 1b2:	de bf       	out	0x3e, r29	; 62
 1b4:	0f be       	out	0x3f, r0	; 63
 1b6:	cd bf       	out	0x3d, r28	; 61
 1b8:	df 91       	pop	r29
 1ba:	cf 91       	pop	r28
 1bc:	08 95       	ret

000001be <UART_Receive>:
}

unsigned char UART_Receive()
{
 1be:	cf 93       	push	r28
 1c0:	df 93       	push	r29
 1c2:	cd b7       	in	r28, 0x3d	; 61
 1c4:	de b7       	in	r29, 0x3e	; 62
 1c6:	22 97       	sbiw	r28, 0x02	; 2
 1c8:	0f b6       	in	r0, 0x3f	; 63
 1ca:	f8 94       	cli
 1cc:	de bf       	out	0x3e, r29	; 62
 1ce:	0f be       	out	0x3f, r0	; 63
 1d0:	cd bf       	out	0x3d, r28	; 61
	if (UCSR0A & 0b10000000)	//if there is unreaded data
 1d2:	e0 ec       	ldi	r30, 0xC0	; 192
 1d4:	f0 e0       	ldi	r31, 0x00	; 0
 1d6:	80 81       	ld	r24, Z
 1d8:	88 23       	and	r24, r24
 1da:	44 f4       	brge	.+16     	; 0x1ec <UART_Receive+0x2e>
		return UDR0;
 1dc:	e6 ec       	ldi	r30, 0xC6	; 198
 1de:	f0 e0       	ldi	r31, 0x00	; 0
 1e0:	80 81       	ld	r24, Z
 1e2:	28 2f       	mov	r18, r24
 1e4:	33 27       	eor	r19, r19
 1e6:	3a 83       	std	Y+2, r19	; 0x02
 1e8:	29 83       	std	Y+1, r18	; 0x01
 1ea:	02 c0       	rjmp	.+4      	; 0x1f0 <UART_Receive+0x32>
	else						//no unreaded data
		return 0;
 1ec:	1a 82       	std	Y+2, r1	; 0x02
 1ee:	19 82       	std	Y+1, r1	; 0x01
 1f0:	89 81       	ldd	r24, Y+1	; 0x01
 1f2:	9a 81       	ldd	r25, Y+2	; 0x02
 1f4:	22 96       	adiw	r28, 0x02	; 2
 1f6:	0f b6       	in	r0, 0x3f	; 63
 1f8:	f8 94       	cli
 1fa:	de bf       	out	0x3e, r29	; 62
 1fc:	0f be       	out	0x3f, r0	; 63
 1fe:	cd bf       	out	0x3d, r28	; 61
 200:	df 91       	pop	r29
 202:	cf 91       	pop	r28
 204:	08 95       	ret

00000206 <UART_Transmit>:
}

void UART_Transmit(unsigned char data)
{
 206:	cf 93       	push	r28
 208:	df 93       	push	r29
 20a:	cd b7       	in	r28, 0x3d	; 61
 20c:	de b7       	in	r29, 0x3e	; 62
 20e:	21 97       	sbiw	r28, 0x01	; 1
 210:	0f b6       	in	r0, 0x3f	; 63
 212:	f8 94       	cli
 214:	de bf       	out	0x3e, r29	; 62
 216:	0f be       	out	0x3f, r0	; 63
 218:	cd bf       	out	0x3d, r28	; 61
 21a:	89 83       	std	Y+1, r24	; 0x01
	while (!(UCSR0A & 0b00100000));	//waiting until buffer is ready to receive
 21c:	e0 ec       	ldi	r30, 0xC0	; 192
 21e:	f0 e0       	ldi	r31, 0x00	; 0
 220:	80 81       	ld	r24, Z
 222:	99 27       	eor	r25, r25
 224:	80 72       	andi	r24, 0x20	; 32
 226:	90 70       	andi	r25, 0x00	; 0
 228:	00 97       	sbiw	r24, 0x00	; 0
 22a:	c1 f3       	breq	.-16     	; 0x21c <UART_Transmit+0x16>

	UDR0 = data;
 22c:	e6 ec       	ldi	r30, 0xC6	; 198
 22e:	f0 e0       	ldi	r31, 0x00	; 0
 230:	89 81       	ldd	r24, Y+1	; 0x01
 232:	80 83       	st	Z, r24
 234:	21 96       	adiw	r28, 0x01	; 1
 236:	0f b6       	in	r0, 0x3f	; 63
 238:	f8 94       	cli
 23a:	de bf       	out	0x3e, r29	; 62
 23c:	0f be       	out	0x3f, r0	; 63
 23e:	cd bf       	out	0x3d, r28	; 61
 240:	df 91       	pop	r29
 242:	cf 91       	pop	r28
 244:	08 95       	ret

00000246 <main>:
}

int main()
{
 246:	cf 93       	push	r28
 248:	df 93       	push	r29
 24a:	cd b7       	in	r28, 0x3d	; 61
 24c:	de b7       	in	r29, 0x3e	; 62
	static int uart_flag=0;
	static unsigned char Ch1,Ch2;
	PORT_Init();
 24e:	0e 94 6b 00 	call	0xd6	; 0xd6 <PORT_Init>
	UART_Init(9600);
 252:	60 e8       	ldi	r22, 0x80	; 128
 254:	75 e2       	ldi	r23, 0x25	; 37
 256:	80 e0       	ldi	r24, 0x00	; 0
 258:	90 e0       	ldi	r25, 0x00	; 0
 25a:	0e 94 8c 00 	call	0x118	; 0x118 <UART_Init>
 25e:	00 c0       	rjmp	.+0      	; 0x260 <main+0x1a>
	while (1)
	{
		Ch1='0';
 260:	80 e3       	ldi	r24, 0x30	; 48
 262:	80 93 01 01 	sts	0x0101, r24
		UART_Transmit(Ch1);
 266:	80 91 01 01 	lds	r24, 0x0101
 26a:	0e 94 03 01 	call	0x206	; 0x206 <UART_Transmit>
		Ch2 = UART_Receive();
 26e:	0e 94 df 00 	call	0x1be	; 0x1be <UART_Receive>
 272:	80 93 00 01 	sts	0x0100, r24
		if (Ch1==Ch2)
 276:	90 91 01 01 	lds	r25, 0x0101
 27a:	80 91 00 01 	lds	r24, 0x0100
 27e:	98 17       	cp	r25, r24
 280:	79 f7       	brne	.-34     	; 0x260 <main+0x1a>
		{
			uart_flag=1;
 282:	81 e0       	ldi	r24, 0x01	; 1
 284:	90 e0       	ldi	r25, 0x00	; 0
 286:	90 93 03 01 	sts	0x0103, r25
 28a:	80 93 02 01 	sts	0x0102, r24
		}
	}
 28e:	e8 cf       	rjmp	.-48     	; 0x260 <main+0x1a>

00000290 <__udivmodsi4>:
 290:	a1 e2       	ldi	r26, 0x21	; 33
 292:	1a 2e       	mov	r1, r26
 294:	aa 1b       	sub	r26, r26
 296:	bb 1b       	sub	r27, r27
 298:	fd 01       	movw	r30, r26
 29a:	0d c0       	rjmp	.+26     	; 0x2b6 <__udivmodsi4_ep>

0000029c <__udivmodsi4_loop>:
 29c:	aa 1f       	adc	r26, r26
 29e:	bb 1f       	adc	r27, r27
 2a0:	ee 1f       	adc	r30, r30
 2a2:	ff 1f       	adc	r31, r31
 2a4:	a2 17       	cp	r26, r18
 2a6:	b3 07       	cpc	r27, r19
 2a8:	e4 07       	cpc	r30, r20
 2aa:	f5 07       	cpc	r31, r21
 2ac:	20 f0       	brcs	.+8      	; 0x2b6 <__udivmodsi4_ep>
 2ae:	a2 1b       	sub	r26, r18
 2b0:	b3 0b       	sbc	r27, r19
 2b2:	e4 0b       	sbc	r30, r20
 2b4:	f5 0b       	sbc	r31, r21

000002b6 <__udivmodsi4_ep>:
 2b6:	66 1f       	adc	r22, r22
 2b8:	77 1f       	adc	r23, r23
 2ba:	88 1f       	adc	r24, r24
 2bc:	99 1f       	adc	r25, r25
 2be:	1a 94       	dec	r1
 2c0:	69 f7       	brne	.-38     	; 0x29c <__udivmodsi4_loop>
 2c2:	60 95       	com	r22
 2c4:	70 95       	com	r23
 2c6:	80 95       	com	r24
 2c8:	90 95       	com	r25
 2ca:	9b 01       	movw	r18, r22
 2cc:	ac 01       	movw	r20, r24
 2ce:	bd 01       	movw	r22, r26
 2d0:	cf 01       	movw	r24, r30
 2d2:	08 95       	ret

000002d4 <_exit>:
 2d4:	ff cf       	rjmp	.-2      	; 0x2d4 <_exit>

⌨️ 快捷键说明

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