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

📄 main.s

📁 EPPROM应用,测试程序,AVR内核,供初学者参考
💻 S
字号:
	.module MAIN.C
	.area text(rom, con, rel)
	.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
	.area vector(rom, abs)
	.org 32
	rjmp _Icp_time0
	.area text(rom, con, rel)
	.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
	.area vector(rom, abs)
	.org 2
	rjmp _Int0
	.area text(rom, con, rel)
	.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
	.dbfunc e main _main fV
;           flag -> R10
;      deciMeter -> R12
;        ep_temp -> R10,R11
;       ep_temp1 -> R10
;       ep_temp2 -> R12
;    speed_temp1 -> R12,R13
;         speed2 -> R12
;         speed1 -> R14
;      timeBlock -> y+2
;     speed_temp -> y+0
;           temp -> R10
	.even
_main::
	sbiw R28,4
	.dbline -1
	.dbline 29
; //**************************************************
; //project              :SPEED TO POWER SWITCH
; //chiptype             :ATMEGA48
; //Clock frequency      :8.00000MHZ
; //Author               :XIEHELI
; //From                 :HORN
; //**************************************************
; #include<iom48v.h>
; #include<macros.h>
; #define u08 unsigned char
; #define u16 unsigned int
; #define u32 unsigned long
; #pragma interrupt_handler Icp_time0:17
; #pragma interrupt_handler Int0:2
; void sendData(u08 cbit);
; void delay(u08 tick);
; void port_init(void);
; void time_init(void);
; void delayms(u08 time);
; void delays(u08 time1);
; u16 speed_test(void);
; void eeprom_write(u16 adrw,u08 add);
; u08 eeprom_read(u16 adrr);
; //u16 data;
; u16 data_temp1;
; u16 data_temp2;
; //u08 number;
; void main(void)
; {
	.dbline 41
;     u08 temp;
; 	//u08 temp1;
; 	u16 ep_temp;
; 	u08 speed1;
; 	u08 speed2;
; 	u08 ep_temp1;
; 	u08 ep_temp2;
; 	u16 speed_temp;
; 	u16 speed_temp1;
; 	u08 flag;
; 	u08 deciMeter;
; 	u16 timeBlock=111;
	ldi R24,111
	ldi R25,0
	std y+3,R25
	std y+2,R24
	.dbline 46
; 	//u08 num_temp1;
; 	//u08 num_temp2;
; 	//u08 temp3;
; 	//u08 temp2;
; 	flag=0x00;
	clr R10
	.dbline 47
;     port_init();                       //I/O口初始化
	rcall _port_init
	.dbline 48
; 	time_init();
	rcall _time_init
	.dbline 50
; 	//temp1=0;
; 	speed_temp=0;
	clr R0
	clr R1
	std y+1,R1
	std y+0,R0
	.dbline 51
;     SREG|=0x80;
	bset 7
	.dbline 52
; 	NOP();
	nop
	.dbline 53
; 	NOP();
	nop
	.dbline 54
; 	NOP();
	nop
	.dbline 55
; 	NOP();
	nop
	.dbline 56
; 	NOP();
	nop
	.dbline 57
; 	NOP();
	nop
	.dbline 58
; 	NOP();
	nop
	.dbline 59
; 	NOP();
	nop
	rjmp L3
L2:
	.dbline 61
; 	while(1)
; 	{	 
	.dbline 62
; 		temp=0; 
	clr R10
	.dbline 65
; 		//delayms(10);
; 		//delays(50);
; 		delay(255);
	ldi R16,255
	rcall _delay
	.dbline 66
; 	    delay(26);
	ldi R16,26
	rcall _delay
L5:
	.dbline 67
; 	    while((0x10&0x10)&&(++timeBlock<896));//计算距离,将距离和数据对应
L6:
	.dbline 67
	ldd R24,y+2
	ldd R25,y+3
	adiw R24,1
	movw R2,R24
	std y+3,R3
	std y+2,R2
	cpi R24,128
	ldi R30,3
	cpc R25,R30
	brlo L5
X0:
	.dbline 68
; 	    deciMeter=(u32)timeBlock*15*18/9300;
	clr R4
	clr R5
	ldi R20,15
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	rcall empy32u
	ldi R20,18
	ldi R21,0
	ldi R22,0
	ldi R23,0
	st -y,R19
	st -y,R18
	st -y,R17
	st -y,R16
	movw R16,R20
	movw R18,R22
	rcall empy32u
	ldi R20,84
	ldi R21,36
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	rcall div32u
	mov R12,R16
	rjmp L9
L8:
	.dbline 70
; 		while(temp<=100)
; 		{
	.dbline 71
; 		    sendData(0x37);
	ldi R16,55
	rcall _sendData
	.dbline 72
; 			temp++;
	inc R10
	.dbline 73
; 		}
L9:
	.dbline 69
	ldi R24,100
	cp R24,R10
	brsh L8
X1:
	rjmp L12
L11:
	.dbline 75
; 	    while((PIND&0x20)&&(temp<=100))//判断按键是否按下1s,设定车速信号
; 		{
	.dbline 77
; 		    //temp=50;
; 		    delayms(10);			
	ldi R16,10
	rcall _delayms
	.dbline 78
; 			temp++;              //speed=speed_test(); //测定车速信号
	inc R10
	.dbline 79
; 			if((PIND&0x20)&&(temp==99))
	sbis 0x9,5
	rjmp L14
X2:
	mov R24,R10
	cpi R24,99
	brne L14
X3:
	.dbline 80
; 			{
	.dbline 81
; 			    speed_temp=data_temp2;   //测定车速信号
	lds R2,_data_temp2
	lds R3,_data_temp2+1
	std y+1,R3
	std y+0,R2
	.dbline 82
; 			    speed_temp1=speed_temp;
	movw R12,R2
	.dbline 83
; 				speed1=(u08)(speed_temp&0x00ff);
	movw R24,R2
	andi R25,0
	mov R14,R24
	.dbline 84
; 				speed2=(u08)(speed_temp1>>8);
	mov R12,R13
	clr R13
	.dbline 85
; 			    SREG=0x00;
	clr R2
	out 0x3f,R2
	.dbline 86
; 			    eeprom_write(0x0025,speed1);//将用户设定车速写进EEPROM
	mov R18,R24
	ldi R16,37
	ldi R17,0
	rcall _eeprom_write
	.dbline 88
; 				//delayms(20);
; 				eeprom_write(0x0026,speed2);
	mov R18,R12
	ldi R16,38
	ldi R17,0
	rcall _eeprom_write
	.dbline 89
; 				temp=111;
	ldi R24,111
	mov R10,R24
	.dbline 90
; 				SREG|=0x80;
	bset 7
	.dbline 91
; 			}
	rjmp L15
L14:
	.dbline 93
; 			else
; 			NOP();
	nop
L15:
	.dbline 94
; 		}
L12:
	.dbline 74
	sbis 0x9,5
	rjmp L16
X4:
	ldi R24,100
	cp R24,R10
	brsh L11
X5:
L16:
	.dbline 95
; 		SREG=0x00;		
	clr R2
	out 0x3f,R2
	.dbline 96
; 		ep_temp1=eeprom_read(0x0025);//读取EEPROM中用户设定的车速
	ldi R16,37
	ldi R17,0
	rcall _eeprom_read
	mov R10,R16
	.dbline 98
; 		//delayms(20);
; 		ep_temp2=eeprom_read(0x0026);
	ldi R16,38
	ldi R17,0
	rcall _eeprom_read
	mov R12,R16
	.dbline 99
; 		SREG|=0x80;		
	bset 7
	.dbline 100
; 		ep_temp=(ep_temp2<<8)+ep_temp1;	
	mov R11,R12
	.dbline 101
; 		speed_temp=data_temp2;             //调用测定车速信号
	lds R2,_data_temp2
	lds R3,_data_temp2+1
	std y+1,R3
	std y+0,R2
	.dbline 102
; 		sendData(ep_temp2);
	rcall _sendData
	.dbline 103
; 		delays(1);
	ldi R16,1
	rcall _delays
	.dbline 104
; 	}
L3:
	.dbline 60
	rjmp L2
X6:
	.dbline -2
L1:
	.dbline 0 ; func end
	adiw R28,4
	ret
	.dbsym r flag 10 c
	.dbsym r deciMeter 12 c
	.dbsym r ep_temp 10 i
	.dbsym r ep_temp1 10 c
	.dbsym r ep_temp2 12 c
	.dbsym r speed_temp1 12 i
	.dbsym r speed2 12 c
	.dbsym r speed1 14 c
	.dbsym l timeBlock 2 i
	.dbsym l speed_temp 0 i
	.dbsym r temp 10 c
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 107
; }
; void port_init(void)
; {
	.dbline 108
;     DDRB=0x10;
	ldi R24,16
	out 0x4,R24
	.dbline 109
; 	DDRC=0x02;
	ldi R24,2
	out 0x7,R24
	.dbline 110
; 	DDRD=0x00;
	clr R2
	out 0xa,R2
	.dbline 111
; 	PORTC=0x00;
	out 0x8,R2
	.dbline 112
; 	PORTB=0x00;
	out 0x5,R2
	.dbline 113
; 	PORTD=0x00;
	out 0xb,R2
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e time_init _time_init fV
	.even
_time_init::
	.dbline -1
	.dbline 116
; }
; void time_init(void)
; {
	.dbline 117
; 	TCCR0A=0x00;
	clr R2
	out 0x24,R2
	.dbline 118
; 	TCCR0B=0x03;
	ldi R24,3
	out 0x25,R24
	.dbline 119
; 	TIMSK0=0x01;
	ldi R24,1
	sts 110,R24
	.dbline 120
; 	TIFR0=0x01;
	out 0x15,R24
	.dbline 121
; 	TCNT0=0xc0;
	ldi R24,192
	out 0x26,R24
	.dbline 122
; 	EICRA=0x01;
	ldi R24,1
	sts 105,R24
	.dbline 123
; 	EIMSK=0x01;
	out 0x1d,R24
	.dbline 124
; 	EIFR=0x01;
	out 0x1c,R24
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e eeprom_write _eeprom_write fV
;            add -> R18
;           adrw -> R16,R17
	.even
_eeprom_write::
	.dbline -1
	.dbline 127
; }
; void eeprom_write(u16 adrw,u08 add)
; {
L20:
	.dbline 129
;     /* 等待上一次写操作结束 */
;     while(EECR & (1<<EEPE));
L21:
	.dbline 129
	sbic 0x1f,1
	rjmp L20
X7:
	.dbline 131
;     /* 设置地址和数据寄存器 */
;     EEAR=adrw;
	out 0x22,R17
	out 0x21,R16
	.dbline 132
;     EEDR=add;
	out 0x20,R18
	.dbline 134
;     /* 置位EEMWE */
;     EECR|=(1<<EEMPE);
	sbi 0x1f,2
	.dbline 136
;     /* 置位EEWE 以启动写操作E */
;     EECR|=(1<<EEPE);
	sbi 0x1f,1
	.dbline -2
L19:
	.dbline 0 ; func end
	ret
	.dbsym r add 18 c
	.dbsym r adrw 16 i
	.dbend
	.dbfunc e eeprom_read _eeprom_read fc
;           adrr -> R16,R17
	.even
_eeprom_read::
	.dbline -1
	.dbline 139
; }
; u08 eeprom_read(u16 adrr)
; {
L24:
	.dbline 141
;     /* 等待上一次写操作结束 */
;     while(EECR & (1<<EEPE));
L25:
	.dbline 141
	sbic 0x1f,1
	rjmp L24
X8:
	.dbline 143
;     /* 设置地址寄存器 */
;     EEAR=adrr;
	out 0x22,R17
	out 0x21,R16
	.dbline 145
;     /* 设置EERE 以启动读操作 */
;     EECR|=(1<<EERE);
	sbi 0x1f,0
	.dbline 147
;     /* 自数据寄存器返回数据 */
;     return EEDR;
	in R16,0x20
	.dbline -2
L23:
	.dbline 0 ; func end
	ret
	.dbsym r adrr 16 i
	.dbend
	.dbfunc e delay _delay fV
;           tick -> R16
	.even
_delay::
	.dbline -1
	.dbline 150
; }
; void delay(u08 tick)
; {
L28:
	.dbline 151
;     while(--tick);
L29:
	.dbline 151
	mov R24,R16
	subi R24,1
	mov R16,R24
	tst R24
	brne L28
X9:
	.dbline -2
L27:
	.dbline 0 ; func end
	ret
	.dbsym r tick 16 c
	.dbend
	.dbfunc e delayms _delayms fV
;           tim1 -> R12
;              i -> R10
;           time -> R10
	.even
_delayms::
	st -y,R10
	st -y,R12
	mov R10,R16
	.dbline -1
	.dbline 154
; }
; void delayms(u08 time)
; {
	.dbline 156
;     u08 tim1,i;
; 	tim1=time;
	mov R12,R10
	.dbline 157
; 	for(i=0;i<tim1;i++)
	clr R10
	rjmp L35
L32:
	.dbline 158
; 	{
	.dbline 159
; 	    delay(50);
	ldi R16,50
	rcall _delay
	.dbline 160
; 	}
L33:
	.dbline 157
	inc R10
L35:
	.dbline 157
	cp R10,R12
	brlo L32
X10:
	.dbline -2
L31:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym r tim1 12 c
	.dbsym r i 10 c
	.dbsym r time 10 c
	.dbend
	.dbfunc e delays _delays fV
;           tim2 -> R12
;              j -> R10
;          time1 -> R10
	.even
_delays::
	st -y,R10
	st -y,R12
	mov R10,R16
	.dbline -1
	.dbline 163
; }
; void delays(u08 time1)
; {
	.dbline 165
;     u08 tim2,j;
; 	tim2=time1;
	mov R12,R10
	.dbline 166
; 	for(j=0;j<tim2;j++)
	clr R10
	rjmp L40
L37:
	.dbline 167
; 	{
	.dbline 168
; 	    delayms(250);
	ldi R16,250
	rcall _delayms
	.dbline 169
; 	}
L38:
	.dbline 166
	inc R10
L40:
	.dbline 166
	cp R10,R12
	brlo L37
X11:
	.dbline -2
L36:
	.dbline 0 ; func end
	ld R12,y+
	ld R10,y+
	ret
	.dbsym r tim2 12 c
	.dbsym r j 10 c
	.dbsym r time1 10 c
	.dbend
	.dbfunc e Icp_time0 _Icp_time0 fV
	.even
_Icp_time0::
	st -y,R2
	st -y,R3
	st -y,R24
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 172
; }
; void Icp_time0(void)
; {
	.dbline 173
;     SREG=0x00;
	clr R2
	out 0x3f,R2
	.dbline 174
;     TIFR0=0x01;
	ldi R24,1
	out 0x15,R24
	.dbline 175
; 	data_temp2=data_temp1;
	lds R2,_data_temp1
	lds R3,_data_temp1+1
	sts _data_temp2+1,R3
	sts _data_temp2,R2
	.dbline 176
; 	data_temp1=0x0000;
	clr R2
	clr R3
	sts _data_temp1+1,R3
	sts _data_temp1,R2
	.dbline 177
; 	TCNT0=0xc0;
	ldi R24,192
	out 0x26,R24
	.dbline 178
; 	SREG|=0x80;
	bset 7
	.dbline -2
L41:
	.dbline 0 ; func end
	ld R2,y+
	out 0x3f,R2
	ld R24,y+
	ld R3,y+
	ld R2,y+
	reti
	.dbend
	.dbfunc e Int0 _Int0 fV
	.even
_Int0::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 181
; }
; void Int0(void)
; {
	.dbline 183
;     //SREG=0x00;
;     data_temp1++;	
	lds R24,_data_temp1
	lds R25,_data_temp1+1
	adiw R24,1
	sts _data_temp1+1,R25
	sts _data_temp1,R24
	.dbline -2
L42:
	.dbline 0 ; func end
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	reti
	.dbend
	.dbfunc e sendData _sendData fV
;           hbit -> R10
;              k -> R20
;           cbit -> R22
	.even
_sendData::
	rcall push_xgsetF00C
	mov R22,R16
	.dbline -1
	.dbline 187
; 	//SREG|=0x80;
; }
; void sendData(u08 cbit)
; {
	.dbline 191
;     u08 k;
; 	u08 hbit;
; 	//hbit=0x01;
; 	PORTC=0x02;
	ldi R24,2
	out 0x8,R24
	.dbline 192
; 	delay(180);
	ldi R16,180
	rcall _delay
	.dbline 193
; 	PORTC=0x00;
	clr R2
	out 0x8,R2
	.dbline 194
; 	delay(15);
	ldi R16,15
	rcall _delay
	.dbline 198
; 	//delay(26);
; 	//PORTB=0x08;
; 	//buz(cbit);
; 	for(k=0;k<8;k++)
	clr R20
	rjmp L47
L44:
	.dbline 199
; 	{
	.dbline 200
; 	   hbit=(cbit&0x80);
	mov R24,R22
	andi R24,128
	mov R10,R24
	.dbline 201
; 	   if(hbit)
	tst R24
	breq L48
X12:
	.dbline 202
; 	   {  
	.dbline 203
; 	      PORTC=0x02;
	ldi R24,2
	out 0x8,R24
	.dbline 204
; 	      delay(16);
	ldi R16,16
	rcall _delay
	.dbline 205
; 		  PORTC=0x00;
	clr R2
	out 0x8,R2
	.dbline 206
; 		  delay(50);
	ldi R16,50
	rcall _delay
	.dbline 208
; 		  //PORTB=0x00;
; 	   }
	rjmp L49
L48:
	.dbline 210
; 	   else
; 	   {
	.dbline 211
; 	      PORTC=0x02;
	ldi R24,2
	out 0x8,R24
	.dbline 212
; 	      delay(50);
	ldi R16,50
	rcall _delay
	.dbline 213
; 		  PORTC=0x00;
	clr R2
	out 0x8,R2
	.dbline 214
; 		  delay(16);
	ldi R16,16
	rcall _delay
	.dbline 216
; 		  //PORTB=0x00;
; 	   }
L49:
	.dbline 217
; 	   cbit<<=1;
	lsl R22
	.dbline 218
; 	}
L45:
	.dbline 198
	inc R20
L47:
	.dbline 198
	cpi R20,8
	brlo L44
X13:
	.dbline -2
L43:
	.dbline 0 ; func end
	rjmp pop_xgsetF00C
	.dbsym r hbit 10 c
	.dbsym r k 20 c
	.dbsym r cbit 22 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile F:\AVRPRO~1\EEPROM\MAIN.C
_data_temp2::
	.blkb 2
	.dbsym e data_temp2 _data_temp2 i
_data_temp1::
	.blkb 2
	.dbsym e data_temp1 _data_temp1 i
; 	//buz(cbit);
; }
; 

⌨️ 快捷键说明

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