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

📄 main.s

📁 avr单片机atmage16驱动小灯的一些例程 并且包括一些收发数据的程序利用usb口
💻 S
📖 第 1 页 / 共 5 页
字号:
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	adiw R30,2
	add R30,R24
	adc R31,R25
	std z+0,R16
	.dbline 743
	ldi R20,1
	ldi R21,0
	ldi R22,0
	ldi R23,0
	lds R4,_address+2
	lds R5,_address+2+1
	lds R2,_address
	lds R3,_address+1
	add R2,R20
	adc R3,R21
	adc R4,R22
	adc R5,R23
	sts _address+1,R3
	sts _address,R2
	sts _address+2+1,R5
	sts _address+2,R4
	.dbline 744
L292:
	.dbline 735
	movw R24,R12
	adiw R24,1
	movw R12,R24
L294:
	.dbline 735
	cp R12,R10
	cpc R13,R11
	brsh X23
	rjmp L291
X23:
	.dbline 746
; 		{
; 			//Select Low or High-Byte
; 			spi_transfer_8(tmp);
; 			spi_transfer_16(address&0xFFFF);
; 			msg_buffer[i+2] = spi_transfer_8(0);
; 			
; 			//increment address
; 			address++;
; 		}
; 		
; 		num_bytes = block_size+3;
	movw R24,R10
	adiw R24,3
	std y+11,R25
	std y+10,R24
	.dbline 747
; 		msg_buffer[0] = CMD_READ_EEPROM_ISP;
	ldi R24,22
	sts _msg_buffer,R24
	.dbline 748
; 		msg_buffer[1] = STATUS_CMD_OK;
	clr R2
	sts _msg_buffer+1,R2
	.dbline 749
; 		msg_buffer[block_size+2] = STATUS_CMD_OK;
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R10
	adiw R30,2
	add R30,R24
	adc R31,R25
	std z+0,R2
	.dbline 750
; 	}
	rjmp L287
L286:
	.dbline 756
; 	
; 	
; 	//////////////////////////////////////
; 	//CMD_PROGRAM_FUSE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_PROGRAM_FUSE_ISP)
	ldd R24,y+12
	cpi R24,23
	brne L296
	.dbline 757
; 	{
	.dbline 758
; 		tmp = spi_transfer_8(msg_buffer[1]);
	lds R16,_msg_buffer+1
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 759
; 		tmp = spi_transfer_8(msg_buffer[2]);
	lds R16,_msg_buffer+2
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 760
; 		tmp = spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 761
; 		tmp = spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 763
; 		
; 		num_bytes = 3;
	ldi R24,3
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 764
; 		msg_buffer[0] = CMD_PROGRAM_FUSE_ISP;
	ldi R24,23
	sts _msg_buffer,R24
	.dbline 765
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 766
; 		msg_buffer[2] = STATUS_CMD_OK;
	sts _msg_buffer+2,R2
	.dbline 767
; 	}
	rjmp L297
L296:
	.dbline 771
; 	//////////////////////////////////////
; 	//CMD_READ_FUSE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_READ_FUSE_ISP)
	ldd R24,y+12
	cpi R24,24
	brne L304
	.dbline 772
; 	{
	.dbline 773
; 		tmp = spi_transfer_8(msg_buffer[2]);
	lds R16,_msg_buffer+2
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 774
; 		if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,1
	brne L307
	.dbline 774
	mov R0,R16
	sts _msg_buffer+2,R0
L307:
	.dbline 775
; 		tmp = spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 776
; 		if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,2
	brne L312
	.dbline 776
	mov R0,R16
	sts _msg_buffer+2,R0
L312:
	.dbline 777
; 		tmp = spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 778
; 		if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,3
	brne L317
	.dbline 778
	mov R0,R16
	sts _msg_buffer+2,R0
L317:
	.dbline 779
; 		tmp = spi_transfer_8(msg_buffer[5]);
	lds R16,_msg_buffer+5
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 780
; 		if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,4
	brne L322
	.dbline 780
	mov R0,R16
	sts _msg_buffer+2,R0
L322:
	.dbline 782
; 		
; 		num_bytes = 4;
	ldi R24,4
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 783
; 		msg_buffer[0] = CMD_READ_FUSE_ISP;
	ldi R24,24
	sts _msg_buffer,R24
	.dbline 784
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 785
; 		msg_buffer[3] = STATUS_CMD_OK;
	sts _msg_buffer+3,R2
	.dbline 786
; 	}
	rjmp L305
L304:
	.dbline 790
; 	//////////////////////////////////////
; 	//CMD_PROGRAM_LOCK_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_PROGRAM_LOCK_ISP)
	ldd R24,y+12
	cpi R24,25
	brne L328
	.dbline 791
; 	{
	.dbline 792
; 		tmp = spi_transfer_8(msg_buffer[1]);
	lds R16,_msg_buffer+1
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 793
; 		tmp = spi_transfer_8(msg_buffer[2]);
	lds R16,_msg_buffer+2
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 794
; 		tmp = spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 795
; 		tmp = spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 797
; 		
; 		num_bytes = 3;
	ldi R24,3
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 798
; 		msg_buffer[0] = CMD_PROGRAM_LOCK_ISP;
	ldi R24,25
	sts _msg_buffer,R24
	.dbline 799
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 800
; 		msg_buffer[2] = STATUS_CMD_OK;
	sts _msg_buffer+2,R2
	.dbline 801
; 	}
	rjmp L329
L328:
	.dbline 805
; 	//////////////////////////////////////
; 	//CMD_READ_LOCK_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_READ_LOCK_ISP)
	ldd R24,y+12
	cpi R24,26
	brne L336
	.dbline 806
; 	{
	.dbline 807
; 		tmp = spi_transfer_8(msg_buffer[2]);
	lds R16,_msg_buffer+2
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 808
; 		if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,1
	brne L339
	.dbline 808
	mov R0,R16
	sts _msg_buffer+2,R0
L339:
	.dbline 809
; 		tmp = spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 810
; 		if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,2
	brne L344
	.dbline 810
	mov R0,R16
	sts _msg_buffer+2,R0
L344:
	.dbline 811
; 		tmp = spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 812
; 		if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,3
	brne L349
	.dbline 812
	mov R0,R16
	sts _msg_buffer+2,R0
L349:
	.dbline 813
; 		tmp = spi_transfer_8(msg_buffer[5]);
	lds R16,_msg_buffer+5
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 814
; 		if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,4
	brne L354
	.dbline 814
	mov R0,R16
	sts _msg_buffer+2,R0
L354:
	.dbline 816
; 		
; 		num_bytes = 4;
	ldi R24,4
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 817
; 		msg_buffer[0] = CMD_READ_LOCK_ISP;
	ldi R24,26
	sts _msg_buffer,R24
	.dbline 818
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 819
; 		msg_buffer[3] = STATUS_CMD_OK;
	sts _msg_buffer+3,R2
	.dbline 820
; 	}
	rjmp L337
L336:
	.dbline 824
; 	//////////////////////////////////////
; 	//CMD_READ_SIGNATURE_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_READ_SIGNATURE_ISP)
	ldd R24,y+12
	cpi R24,27
	brne L360
	.dbline 825
; 	{
	.dbline 826
; 		tmp = spi_transfer_8(msg_buffer[2]);
	lds R16,_msg_buffer+2
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 827
; 		if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,1
	brne L363
	.dbline 827
	mov R0,R16
	sts _msg_buffer+2,R0
L363:
	.dbline 828
; 		tmp = spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 829
; 		if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,2
	brne L368
	.dbline 829
	mov R0,R16
	sts _msg_buffer+2,R0
L368:
	.dbline 830
; 		tmp = spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 831
; 		if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,3
	brne L373
	.dbline 831
	mov R0,R16
	sts _msg_buffer+2,R0
L373:
	.dbline 832
; 		tmp = spi_transfer_8(msg_buffer[5]);
	lds R16,_msg_buffer+5
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 833
; 		if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,4
	brne L378
	.dbline 833
	mov R0,R16
	sts _msg_buffer+2,R0
L378:
	.dbline 835
; 		
; 		num_bytes = 4;
	ldi R24,4
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 836
; 		msg_buffer[0] = CMD_READ_SIGNATURE_ISP;
	ldi R24,27
	sts _msg_buffer,R24
	.dbline 837
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 838
; 		msg_buffer[3] = STATUS_CMD_OK;
	sts _msg_buffer+3,R2
	.dbline 839
; 	}
	rjmp L361
L360:
	.dbline 843
; 	//////////////////////////////////////
; 	//CMD_READ_OSCCAL_ISP
; 	//////////////////////////////////////
; 	else if(cmd==CMD_READ_OSCCAL_ISP)
	ldd R24,y+12
	cpi R24,28
	brne L384
	.dbline 844
; 	{
	.dbline 845
; 		tmp = spi_transfer_8(msg_buffer[2]);
	lds R16,_msg_buffer+2
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 846
; 		if(msg_buffer[1] == 1) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,1
	brne L387
	.dbline 846
	mov R0,R16
	sts _msg_buffer+2,R0
L387:
	.dbline 847
; 		tmp = spi_transfer_8(msg_buffer[3]);
	lds R16,_msg_buffer+3
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 848
; 		if(msg_buffer[1] == 2) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,2
	brne L392
	.dbline 848
	mov R0,R16
	sts _msg_buffer+2,R0
L392:
	.dbline 849
; 		tmp = spi_transfer_8(msg_buffer[4]);
	lds R16,_msg_buffer+4
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 850
; 		if(msg_buffer[1] == 3) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,3
	brne L397
	.dbline 850
	mov R0,R16
	sts _msg_buffer+2,R0
L397:
	.dbline 851
; 		tmp = spi_transfer_8(msg_buffer[5]);
	lds R16,_msg_buffer+5
	rcall _spi_transfer_8
	std y+13,R16
	.dbline 852
; 		if(msg_buffer[1] == 4) msg_buffer[2] = tmp;
	lds R24,_msg_buffer+1
	cpi R24,4
	brne L402
	.dbline 852
	mov R0,R16
	sts _msg_buffer+2,R0
L402:
	.dbline 854
; 		
; 		num_bytes = 4;
	ldi R24,4
	ldi R25,0
	std y+11,R25
	std y+10,R24
	.dbline 855
; 		msg_buffer[0] = CMD_READ_OSCCAL_ISP;
	ldi R24,28
	sts _msg_buffer,R24
	.dbline 856
; 		msg_buffer[1] = STATUS_CMD_OK;		
	clr R2
	sts _msg_buffer+1,R2
	.dbline 857
; 		msg_buffer[3] = STATUS_CMD_OK;
	sts _msg_buffer+3,R2
	.dbline 858
; 	}
L384:
L361:
L337:
L329:
L305:
L297:
L287:
L220:
L206:
L127:
L113:
L110:
L78:
L71:
L52:
L38:
L32:
	.dbline 861
; 		
; 	//Transmission of the result
; 	if(num_bytes>0)
	ldd R0,y+10
	ldd R1,y+11
	tst R0
	brne X6
	tst R1
	breq L408
X6:
	.dbline 862
; 	{		
	.dbline 863
; 		interface_putc(MESSAGE_START);
	ldi R16,27
	rcall _interface_putc
	.dbline 864
; 		interface_putc(seq_num);
	ldd R16,y+24
	rcall _interface_putc
	.dbline 865
; 		interface_put16(num_bytes);
	ldd R16,y+10
	ldd R17,y+11
	rcall _interface_put16
	.dbline 866
; 		interface_putc(TOKEN);
	ldi R16,14
	rcall _interface_putc
	.dbline 867
; 		for(i=0;i<num_bytes;i++)
	clr R12
	clr R13
	rjmp L413
L410:
	.dbline 868
	.dbline 869
	ldi R24,<_msg_buffer
	ldi R25,>_msg_buffer
	movw R30,R12
	add R30,R24
	adc R31,R25
	ldd R16,z+0
	rcall _interface_putc
	.dbline 870
L411:
	.dbline 867
	movw R24,R12
	adiw R24,1
	movw R12,R24
L413:
	.dbline 867
	ldd R0,y+10
	ldd R1,y+11
	cp R12,R0
	cpc R13,R1
	brlo L410
	.dbline 871
	rcall _interface_send_check
	.dbline 872
L408:
	.dbline -2
L30:
	adiw R28,14
	rcall pop_gset5
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbsym r mode 14 c
	.dbsym r block_size 10 i
	.dbsym l start_address 6 l
	.dbsym l polling_address 2 l
	.dbsym l tmp 13 c
	.dbsym l cmd 12 c
	.dbsym l num_bytes 10 i
	.dbsym r i 12 i
	.dbsym l seq_num 24 c
	.dbend
	.dbfunc e chip_init _chip_init fV
	.even
_chip_init::
	.dbline -1
	.dbline 881
; 		{
; 			interface_putc(msg_buffer[i]);
; 		}		
; 		interface_send_check();
; 	}
; }
; 
; 
; /**
; 	Hardware initialization
; 	Timer
; 	ADC
; */
; void chip_init(void) {
	.dbline 883
; 
; 	DDRB=(1<<0) | (1<<1) | (1<<2);	//LED_RT, LED_GN
	ldi R24,7
	out 0x17,R24
	.dbline 890
; 
; 	//ADC
; 	//ADMUX=0x60;					//Avcc=Aref, Left Adjusted (8Bit-Aufl鰏ung aus ADCH)
; 	//ADCSRA = 0xC6;				//ADC Enable, Init, 125kHz (bei 8MHz Clock)
; 
; 	//Timer 1 (Systemint 1ms)
; 	TCCR1B=0x09;				//CTC-Mode /1
	ldi R24,9
	out 0x2e,R24
	.dbline 891
; 	OCR1A=3686;					/*3.686MHz / 3686 = 1kHz*/
	ldi R24,3686
	ldi R25,14
	out 0x2b,R25
	out 0x2a,R24
	.dbline 893
; 	#ifndef __iom88v_h
; 		TIMSK |=(1<<4);	/*meag8 enable OC-INT*/
	in R24,0x39
	ori R24,16
	out 0x39,R24
	.dbline -2
L414:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile E:\ICCAVR\project\avrisp\main.c
_address::
	.blkb 4
	.dbsym e address _address l
_prgmode::
	.blkb 1
	.dbsym e prgmode _prgmode c
_param_controller_init::
	.blkb 1
	.dbsym e param_controller_init _param_controller_init c
_reset_polarity::
	.blkb 1
	.dbsym e reset_polarity _reset_polarity c
_clock_speed::
	.blkb 1
	.dbsym e clock_speed _clock_speed c
_msg_buffer::
	.blkb 300
	.dbsym e msg_buffer _msg_buffer A[300:300]c
	.area data(ram, con, rel)
	.dbfile E:\ICCAVR\project\avrisp\main.c
L36:
	.blkb 9
	.area idata
	.byte 'A,'V,'R,'I,'S,'P,95,50,0
	.area data(ram, con, rel)
	.dbfile E:\ICCAVR\project\avrisp\main.c

⌨️ 快捷键说明

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