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

📄 initt.s

📁 用ICCAVR编辑通过的
💻 S
字号:
	.module initt.c
	.area text(rom, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 22
; //ICC-AVR application builder : 2005-4-25 9:42:27
; // Target : M8
; // Crystal: 8.00Mhz
; /*
; * Copyright (c) 2005, 广州力源电器公司开发部
; * All rights reserved.
; * 文件名称:init.c  负责初始化MCU各内部资源及外部端口
; 
; * 当前版本: 1.0
; * 作者:	 张洪强
; * 完成日期: 2005.7.25
; */
; #include <iom8v.h>
; #include <macros.h> 
; //#include <interrupt.h>
; #include <signal.h>
; //#include <wdt.h>
; #include <eeprom.h> 
; #include "init.h"
; 
; void port_init(void)
; {
	.dbline 23
; 	PORTB = 0x0F;									//PB0-4接键盘,设为输入上拉
	ldi R24,15
	out 0x18,R24
	.dbline 24
; 	DDRB  = 0xF0;									//PB4-7接控制输出,设为输出不上拉
	ldi R24,240
	out 0x17,R24
	.dbline 25
; 	PORTC = 0x3C; 									//PC0,PC1接模拟信号进行AD转换,设为输入不上拉
	ldi R24,60
	out 0x15,R24
	.dbline 26
; 	DDRC  = 0x3C;									//PC2,PC3,PC4,PC5接4位7段LED的位选端,设为输出上拉
	out 0x14,R24
	.dbline 27
; 	PORTD = 0xFF;									//PORTD口接7段LED的段选端,全部设为输出上拉
	ldi R24,255
	out 0x12,R24
	.dbline 28
; 	DDRD  = 0xFF;
	out 0x11,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 35
; }
; 
; //TIMER0 initialize - prescale:1024
; // desired value: 50Hz
; // actual value: 50.080Hz (0.2%)
; void timer0_init(void)
; {
	.dbline 36
; 	TCCR0 = 0x00; 									//stop
	clr R2
	out 0x33,R2
	.dbline 37
; 	TCNT0 = 0xB2; 									//set count
	ldi R24,178
	out 0x32,R24
	.dbline 38
; 	TCCR0 = 0x05; 									//start timer
	ldi R24,5
	out 0x33,R24
	.dbline -2
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area data(ram, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
L4:
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
L5:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
L6:
	.blkb 2
	.area idata
	.word 0
	.area data(ram, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
L7:
	.blkb 2
	.area idata
	.word 255
	.area data(ram, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
	.area text(rom, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
	.dbfunc e SIGNAL _SIGNAL fI
	.dbsym s min_value L7 i
	.dbsym s max_value L6 i
	.dbsym s total L5 i
	.dbsym s i L4 c
;  SIG_OVERFLOW0 -> R20,R21
	.even
_SIGNAL::
	rcall push_gset1
	movw R20,R16
	.dbline -1
	.dbline 43
; }
; 
; //#pragma interrupt_handler timer0_ovf_isr:10
; SIGNAL(SIG_OVERFLOW0)
; {
	.dbline 46
; 	static unsigned char i = 0;
; 	static unsigned int  total = 0,max_value = 0,min_value = 0xff;
; 	TCNT0 = 0xB2; 									//reload counter value
	ldi R24,178
	out 0x32,R24
	.dbline 47
; 	if ( TIMER_EN )
	lds R2,_TIMER_EN
	tst R2
	breq L8
	.dbline 48
; 	{
	.dbline 49
; 		TIMER_NUM++;
	lds R24,_TIMER_NUM
	lds R25,_TIMER_NUM+1
	adiw R24,1
	sts _TIMER_NUM+1,R25
	sts _TIMER_NUM,R24
	.dbline 50
; 	}
L8:
	.dbline 51
; 	if ( adc_data_temp > max_value )
	lds R2,L6
	lds R3,L6+1
	lds R4,_adc_data_temp
	lds R5,_adc_data_temp+1
	cp R2,R4
	cpc R3,R5
	brsh L10
	.dbline 52
; 	{
	.dbline 53
; 		max_value = adc_data_temp;
	movw R2,R4
	sts L6+1,R3
	sts L6,R2
	.dbline 54
; 	}
L10:
	.dbline 55
; 	if ( adc_data_temp < min_value )
	lds R2,L7
	lds R3,L7+1
	lds R4,_adc_data_temp
	lds R5,_adc_data_temp+1
	cp R4,R2
	cpc R5,R3
	brsh L12
	.dbline 56
; 	{
	.dbline 57
; 		min_value = adc_data_temp;
	movw R2,R4
	sts L7+1,R3
	sts L7,R2
	.dbline 58
; 	}
L12:
	.dbline 59
; 	total += adc_data_temp;
	lds R2,_adc_data_temp
	lds R3,_adc_data_temp+1
	lds R4,L5
	lds R5,L5+1
	add R4,R2
	adc R5,R3
	sts L5+1,R5
	sts L5,R4
	.dbline 60
; 	if ( i == 49 )
	lds R24,L4
	cpi R24,49
	breq X0
	rjmp L14
X0:
	.dbline 61
; 	{
	.dbline 62
; 		adc_data[0] =( total - min_value - max_value ) / 48.0;
	lds R2,L7
	lds R3,L7+1
	sub R4,R2
	sbc R5,R3
	lds R2,L6
	lds R3,L6+1
	sub R4,R2
	sbc R5,R3
	ldi R16,<L16
	ldi R17,>L16
	rcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R4
	lsr R17
	ror R16
	rcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	rcall empy32fs
	movw R16,R4
	andi R16,1
	andi R17,0
	rcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	rcall add32fs
	ldi R16,<L17
	ldi R17,>L17
	rcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	rcall div32f
	sts _adc_data+1,R17
	sts _adc_data,R16
	sts _adc_data+2+1,R19
	sts _adc_data+2,R18
	.dbline 63
; 		adc_data_temp = 0;
	clr R2
	clr R3
	sts _adc_data_temp+1,R3
	sts _adc_data_temp,R2
	.dbline 64
; 		max_value = 0;
	sts L6+1,R3
	sts L6,R2
	.dbline 65
; 		min_value = 0xff;
	ldi R24,255
	ldi R25,0
	sts L7+1,R25
	sts L7,R24
	.dbline 66
; 		total = 0;
	sts L5+1,R3
	sts L5,R2
	.dbline 67
; 	}
	rjmp L15
L14:
	.dbline 68
; 	else if ( i == 99 )
	lds R24,L4
	cpi R24,99
	breq X1
	rjmp L18
X1:
	.dbline 69
; 	{
	.dbline 70
; 		adc_data[1] =( total - min_value - max_value ) / 48.0;
	lds R2,L7
	lds R3,L7+1
	lds R4,L5
	lds R5,L5+1
	sub R4,R2
	sbc R5,R3
	lds R2,L6
	lds R3,L6+1
	sub R4,R2
	sbc R5,R3
	ldi R16,<L16
	ldi R17,>L16
	rcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R4
	lsr R17
	ror R16
	rcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	rcall empy32fs
	movw R16,R4
	andi R16,1
	andi R17,0
	rcall int2fp
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	rcall add32fs
	ldi R16,<L17
	ldi R17,>L17
	rcall lpm32
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	rcall div32f
	sts _adc_data+4+1,R17
	sts _adc_data+4,R16
	sts _adc_data+4+2+1,R19
	sts _adc_data+4+2,R18
	.dbline 71
; 		adc_data_temp = 0;
	clr R2
	clr R3
	sts _adc_data_temp+1,R3
	sts _adc_data_temp,R2
	.dbline 72
; 		max_value = 0;
	sts L6+1,R3
	sts L6,R2
	.dbline 73
; 		min_value = 0xff;
	ldi R24,255
	ldi R25,0
	sts L7+1,R25
	sts L7,R24
	.dbline 74
; 		total = 0;
	sts L5+1,R3
	sts L5,R2
	.dbline 75
; 	}
L18:
L15:
	.dbline 76
; 	if ( i < 50 )
	lds R24,L4
	cpi R24,50
	brsh L21
	.dbline 77
; 	{
	.dbline 78
; 		ADMUX &= ~( 1 << MUX0 );
	cbi 0x7,0
	.dbline 79
; 	}
	rjmp L22
L21:
	.dbline 81
; 	else
; 	{
	.dbline 82
; 		ADMUX |= ( 1 << MUX0 );
	sbi 0x7,0
	.dbline 83
; 	}	
L22:
	.dbline 84
; 	i++;
	lds R24,L4
	subi R24,255    ; addi 1
	sts L4,R24
	.dbline 85
; 	i %= 100;
	ldi R17,100
	mov R16,R24
	rcall mod8u
	sts L4,R16
	.dbline 86
; 	ADCSR |= ( 1<< ADSC );							//启动新的AD转换
	sbi 0x6,6
	.dbline -2
L3:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r SIG_OVERFLOW0 20 I
	.dbend
	.dbfunc e watchdog_init _watchdog_init fV
	.even
_watchdog_init::
	.dbline -1
	.dbline 92
; }
; 
; //Watchdog initialize
; // prescale: 512K
; void watchdog_init(void)
; {
	.dbline 93
;  	wdt_reset(); 									//this prevents a timout on enabling
	rcall _wdt_reset
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 100
;  	//wdt_enable(WDTO_1S);							//WATCHDOG ENABLED - dont forget to issue WDRs,0.52S
; }
; 	
; //ADC initialize
; // Conversion time: 117uS
; void adc_init(void)
; {
	.dbline 101
;  	ADCSR = 0x00; 									//disable adc
	clr R2
	out 0x6,R2
	.dbline 102
;  	ADMUX = 0xC0; 									//select adc input 0,选择AVCC为参考电源
	ldi R24,192
	out 0x7,R24
	.dbline 103
;  	ACSR  = 0x80; 									//禁止模拟比较器
	ldi R24,128
	out 0x8,R24
	.dbline 104
;  	ADCSR = 0xCE; 									//使能ADC,ADC转换开始,允许ADC中断,32分频
	ldi R24,206
	out 0x6,R24
	.dbline -2
L24:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 109
; }
; 
; //call this routine to initialize all peripherals
; void init_devices(void)
; {													//stop errant interrupts until set up
	.dbline 110
; 	cli();											//disable all interrupts
	rcall _cli
	.dbline 111
; 	port_init();
	rcall _port_init
	.dbline 112
; 	watchdog_init();
	rcall _watchdog_init
	.dbline 113
; 	timer0_init();
	rcall _timer0_init
	.dbline 114
; 	adc_init();
	rcall _adc_init
	.dbline 115
; 	MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 116
; 	GICR  = 0x00;
	out 0x3b,R2
	.dbline 117
; 	TIMSK = 0x01; 									//timer interrupt sources
	ldi R24,1
	out 0x39,R24
	.dbline 118
; 	if ( UP_DOWN_POWER != 0x55aa )
	lds R24,_UP_DOWN_POWER
	cpi R24,170
	breq L26
	.dbline 119
; 	{
	.dbline 126
; 			/*
; 		KEY_A_V_STATE = 0;
; 		KEY_AUTO_MAN_STATE = 0;
; 		KEY_CC_CV_STATE = 0;
; 		POWER_STATE = 0;
; 		*/
; 		eeprom_busy_wait();
	rcall _eeprom_busy_wait
	.dbline 127
; 		KEY_A_V_STATE      = eeprom_read_byte ( (char*)0x01 );
	ldi R16,1
	ldi R17,0
	rcall _eeprom_read_byte
	sts _KEY_A_V_STATE,R16
	.dbline 128
; 		eeprom_busy_wait();
	rcall _eeprom_busy_wait
	.dbline 129
; 		KEY_AUTO_MAN_STATE = eeprom_read_byte ( (char*)0x03 );
	ldi R16,3
	ldi R17,0
	rcall _eeprom_read_byte
	sts _KEY_AUTO_MAN_STATE,R16
	.dbline 130
; 		eeprom_busy_wait();
	rcall _eeprom_busy_wait
	.dbline 131
; 		KEY_CC_CV_STATE    = eeprom_read_byte ( (char*)0x05 );
	ldi R16,5
	ldi R17,0
	rcall _eeprom_read_byte
	sts _KEY_CC_CV_STATE,R16
	.dbline 132
; 		eeprom_busy_wait();
	rcall _eeprom_busy_wait
	.dbline 133
; 		POWER_STATE        = eeprom_read_byte ( (char*)0x07 );
	ldi R16,7
	ldi R17,0
	rcall _eeprom_read_byte
	sts _POWER_STATE,R16
	.dbline 134
; 	}
L26:
	.dbline 136
; 		
; 	if ( POWER_STATE )
	lds R2,_POWER_STATE
	tst R2
	breq L28
	.dbline 137
; 	{
	.dbline 138
; 		PORTB |= ( 1 << POWER );		//开启电源
	sbi 0x18,4
	.dbline 139
; 	}
	rjmp L29
L28:
	.dbline 141
; 	else
; 	{
	.dbline 142
; 		PORTB &= ~( 1 << POWER );		//关闭电源
	cbi 0x18,4
	.dbline 143
; 	}
L29:
	.dbline 144
; 	if ( KEY_A_V_STATE )
	lds R2,_KEY_A_V_STATE
	tst R2
	breq L30
	.dbline 145
; 	{
	.dbline 146
; 		PORTB |= ( 1 << OUT_A );		//显示电流
	sbi 0x18,7
	.dbline 147
; 	}
	rjmp L31
L30:
	.dbline 149
; 	else
; 	{
	.dbline 150
; 		PORTB &= ~( 1 << OUT_A );		//显示电压
	cbi 0x18,7
	.dbline 151
; 	}
L31:
	.dbline 152
; 	if ( KEY_CC_CV_STATE )
	lds R2,_KEY_CC_CV_STATE
	tst R2
	breq L32
	.dbline 153
; 	{
	.dbline 154
; 		PORTB |= ( 1 << OUT_CV );		//稳压
	sbi 0x18,6
	.dbline 155
; 	}
	rjmp L33
L32:
	.dbline 157
; 	else
; 	{
	.dbline 158
; 		PORTB &= ~( 1 << OUT_CV );		//稳流
	cbi 0x18,6
	.dbline 159
; 	}
L33:
	.dbline 160
; 	if ( KEY_AUTO_MAN_STATE )
	lds R2,_KEY_AUTO_MAN_STATE
	tst R2
	breq L34
	.dbline 161
; 	{
	.dbline 162
; 		PORTB |= ( 1 << OUT_AUTO );	//自动
	sbi 0x18,5
	.dbline 163
; 	}
	rjmp L35
L34:
	.dbline 165
; 	else
; 	{
	.dbline 166
; 		PORTB &= ~( 1 << OUT_AUTO );	//手动
	cbi 0x18,5
	.dbline 167
; 	}
L35:
	.dbline 168
; 	UP_DOWN_POWER = 0x55aa;
	ldi R24,21930
	ldi R25,85
	sts _UP_DOWN_POWER,R24
	.dbline 169
; 	sei(); 								//re-enable interrupts
	rcall _sei
	.dbline -2
L25:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF\initt.c
_UP_DOWN_POWER::
	.blkb 1
	.dbfile F:\网络下载\AVR\完整应用\电流电压表\SOF/init.h
	.dbsym e UP_DOWN_POWER _UP_DOWN_POWER c
_KEY_AUTO_MAN_STATE::
	.blkb 1
	.dbsym e KEY_AUTO_MAN_STATE _KEY_AUTO_MAN_STATE c
_KEY_CC_CV_STATE::
	.blkb 1
	.dbsym e KEY_CC_CV_STATE _KEY_CC_CV_STATE c
_POWER_STATE::
	.blkb 1
	.dbsym e POWER_STATE _POWER_STATE c
_KEY_A_V_STATE::
	.blkb 1
	.dbsym e KEY_A_V_STATE _KEY_A_V_STATE c
_KEY_INPUT::
	.blkb 1
	.dbsym e KEY_INPUT _KEY_INPUT c
_KEY_TEMP::
	.blkb 1
	.dbsym e KEY_TEMP _KEY_TEMP c
_SET_STATU::
	.blkb 1
	.dbsym e SET_STATU _SET_STATU c
_TIMER_EN::
	.blkb 1
	.dbsym e TIMER_EN _TIMER_EN c
_TIMER_NUM::
	.blkb 2
	.dbsym e TIMER_NUM _TIMER_NUM i
_adc_data_temp::
	.blkb 2
	.dbsym e adc_data_temp _adc_data_temp i
	.area lit(rom, con, rel)
L17:
	.word 0x0,0x4240
L16:
	.word 0x0,0x4000

⌨️ 快捷键说明

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