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

📄 1.s

📁 在车头有4个光敏电阻做的寻找光源的小车程序 具有笔战功能 ICC-AVR ATmega16L 做的控制器 找到光源后停车
💻 S
📖 第 1 页 / 共 3 页
字号:
	sub R2,R16
	sbc R3,R17
	ldi R16,100
	ldi R17,0
	movw R18,R22
	xcall empy16s
	sub R2,R16
	sbc R3,R17
	ldi R16,10
	ldi R17,0
	movw R18,R14
	xcall empy16s
	sub R2,R16
	sbc R3,R17
	movw R12,R2
	.dbline 159
;   LCD_write_char(x++,t,tab[wan]);
	ldi R24,<_tab
	ldi R25,>_tab
	movw R30,R10
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	std y+0,R2
	ldd R18,y+13
	ldd R2,y+11
	ldd R3,y+12
	movw R24,R2
	adiw R24,1
	std y+12,R25
	std y+11,R24
	mov R16,R2
	xcall _LCD_write_char
	.dbline 160
;   LCD_write_char(x++,t,tab[qian]);
	ldi R24,<_tab
	ldi R25,>_tab
	movw R30,R20
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	std y+0,R2
	ldd R18,y+13
	ldd R2,y+11
	ldd R3,y+12
	movw R24,R2
	adiw R24,1
	std y+12,R25
	std y+11,R24
	mov R16,R2
	xcall _LCD_write_char
	.dbline 161
;   LCD_write_char(x++,t,tab[bai]);
	ldi R24,<_tab
	ldi R25,>_tab
	movw R30,R22
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	std y+0,R2
	ldd R18,y+13
	ldd R22,y+11
	ldd R23,y+12
	movw R24,R22
	adiw R24,1
	std y+12,R25
	std y+11,R24
	mov R16,R22
	xcall _LCD_write_char
	.dbline 162
;   LCD_write_char(x++,t,tab[shi]);
	ldi R24,<_tab
	ldi R25,>_tab
	movw R30,R14
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	std y+0,R2
	ldd R18,y+13
	ldd R22,y+11
	ldd R23,y+12
	movw R24,R22
	adiw R24,1
	std y+12,R25
	std y+11,R24
	mov R16,R22
	xcall _LCD_write_char
	.dbline 163
;   LCD_write_char(x,t,tab[wei]); 
	ldi R24,<_tab
	ldi R25,>_tab
	movw R30,R12
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	std y+0,R2
	ldd R18,y+13
	ldd R16,y+11
	xcall _LCD_write_char
	.dbline 164
;   x=0;
	clr R0
	clr R1
	std y+12,R1
	std y+11,R0
	.dbline -2
L30:
	.dbline 0 ; func end
	adiw R28,1
	xcall pop_xgsetF0FC
	adiw R28,4
	ret
	.dbsym r wei 12 i
	.dbsym r shi 14 i
	.dbsym r bai 22 i
	.dbsym r qian 20 i
	.dbsym r wan 10 i
	.dbsym r n 12 i
	.dbsym l t 13 i
	.dbsym l x 11 i
	.dbend
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\lcd.h
_miao::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\lcd.h
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.dbsym e miao _miao c
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.dbfunc e delay_us _delay_us fV
;           time -> R16,R17
	.even
_delay_us::
	.dbline -1
	.dbline 27
; //ICC-AVR application builder : 2008-5-15 14:12:28
; // Target : M16
; // Crystal: 8.0000Mhz
; 
; #include <iom16v.h>
; #include <macros.h>
; #include "lcd.h"
; #define Vref   2560         //参考电压值
; 
; #define uchar   unsigned char
; #define uint    unsigned int
; uchar miao=0;
; 
; unsigned int adc_rel;//AD转换结果
; unsigned char adc_mux;//AD通道
; unsigned int voltage;
; unsigned int adc_old;
; unsigned int V0,V1,V2,V3;
; 
; uint adc_x;
; uint adc_y;
; 
; 
; void get_adc();
; /*				微秒级延时程序	  		*/
; void delay_us(uint time)
; 	 {     
L32:
	.dbline 29
;   	  do
; 	  	{
	.dbline 30
; 		 time--;
	subi R16,1
	sbci R17,0
	.dbline 31
; 		}	
L33:
	.dbline 32
;   	  while (time>1);
	ldi R24,1
	ldi R25,0
	cp R24,R16
	cpc R25,R17
	brlo L32
X5:
	.dbline -2
L31:
	.dbline 0 ; func end
	ret
	.dbsym r time 16 i
	.dbend
	.dbfunc e delay_ms _delay_ms fV
;           time -> R20,R21
	.even
_delay_ms::
	st -y,R20
	st -y,R21
	movw R20,R16
	.dbline -1
	.dbline 37
; 	 }	  
;  
; /*****************************************/
; void delay_ms(uint time)
;     {
	xjmp L37
L36:
	.dbline 39
;     while(time!=0)
; 	  	  {		
	.dbline 40
; 		   delay_us(1000);
	ldi R16,1000
	ldi R17,3
	xcall _delay_us
	.dbline 41
; 		   time--;
	subi R20,1
	sbci R21,0
	.dbline 42
; 		  }
L37:
	.dbline 38
	cpi R20,0
	cpc R20,R21
	brne L36
X6:
	.dbline -2
L35:
	.dbline 0 ; func end
	ld R21,y+
	ld R20,y+
	ret
	.dbsym r time 20 i
	.dbend
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 50
;     } 
; 
; 
; 
; 
; //端口初始化
; void port_init(void)
; {
	.dbline 51
;  PORTA = 0x00;
	clr R2
	out 0x1b,R2
	.dbline 52
;  DDRA  = 0x00;
	out 0x1a,R2
	.dbline 53
;  PORTB = 0x00;
	out 0x18,R2
	.dbline 54
;  DDRB  = 0x00;
	out 0x17,R2
	.dbline 55
;  PORTC = 0x0f; //m103 output only
	ldi R24,15
	out 0x15,R24
	.dbline 56
;  DDRC  = 0x0f;
	out 0x14,R24
	.dbline 57
;  PORTD = 0xff;
	ldi R24,255
	out 0x12,R24
	.dbline 58
;  DDRD  = 0x00;
	out 0x11,R2
	.dbline -2
L39:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 64
; }
; 
; 
; //定时T1初始化
; void timer1_init(void)
; {
	.dbline 65
;  TCCR1B = 0x00;//停止定时器
	clr R2
	out 0x2e,R2
	.dbline 66
;  TIMSK |= 0x04;//中断允许
	in R24,0x39
	ori R24,4
	out 0x39,R24
	.dbline 67
;  TCNT1H = 0xFC; //重装值高位
	ldi R24,252
	out 0x2d,R24
	.dbline 68
;  TCNT1L = 0x2F; //重装值低位
	ldi R24,47
	out 0x2c,R24
	.dbline 70
; 
;  TCCR1A = 0x00;
	out 0x2f,R2
	.dbline 71
;  TCCR1B = 0x05;//启动定时器
	ldi R24,5
	out 0x2e,R24
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 32
	jmp _timer1_ovf_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.dbfunc e timer1_ovf_isr _timer1_ovf_isr fV
	.even
_timer1_ovf_isr::
	st -y,R0
	st -y,R1
	st -y,R2
	st -y,R3
	st -y,R4
	st -y,R5
	st -y,R6
	st -y,R7
	st -y,R8
	st -y,R9
	st -y,R16
	st -y,R17
	st -y,R18
	st -y,R19
	st -y,R24
	st -y,R25
	st -y,R26
	st -y,R27
	st -y,R30
	st -y,R31
	in R0,0x3f
	st -y,R0
	.dbline -1
	.dbline 78
; }
; 
; 
; //定时器T1溢出中断服务程序
; #pragma interrupt_handler timer1_ovf_isr:9
; void timer1_ovf_isr(void)
; {
	.dbline 79
; TCNT1H = 0xFC; //重装值高位
	ldi R24,252
	out 0x2d,R24
	.dbline 80
;  TCNT1L = 0x2F; //重装值低位
	ldi R24,47
	out 0x2c,R24
	.dbline 81
;  CLI();
	cli
	.dbline 82
; 		 adc_rel=0;
	clr R2
	clr R3
	sts _adc_rel+1,R3
	sts _adc_rel,R2
	.dbline 83
; 		 adc_old=0;
	sts _adc_old+1,R3
	sts _adc_old,R2
	.dbline 84
; 		  if(adc_mux<3)
	lds R24,_adc_mux
	cpi R24,3
	brsh L42
X7:
	.dbline 85
; 			    adc_mux++;//递增
	subi R24,255    ; addi 1
	sts _adc_mux,R24
	xjmp L43
L42:
	.dbline 87
; 		     else
; 			    adc_mux=0;	
	clr R2
	sts _adc_mux,R2
L43:
	.dbline 88
; 		SEI();			
	sei
	.dbline 89
; miao++;
	lds R24,_miao
	subi R24,255    ; addi 1
	sts _miao,R24
	.dbline 90
; if(miao==350)
	cpi R24,94
	brne L44
X8:
	.dbline 93
;  
;     //LCD_write_string(9,1,Format(miao,"00")); 
; 	{stop();
	.dbline 93
	xcall _stop
	.dbline 94
; 	   TCCR1B = 0x00;//停止定时器
	clr R2
	out 0x2e,R2
	.dbline 95
; } 
L44:
	.dbline -2
L41:
	.dbline 0 ; func end
	ld R0,y+
	out 0x3f,R0
	ld R31,y+
	ld R30,y+
	ld R27,y+
	ld R26,y+
	ld R25,y+
	ld R24,y+
	ld R19,y+
	ld R18,y+
	ld R17,y+
	ld R16,y+
	ld R9,y+
	ld R8,y+
	ld R7,y+
	ld R6,y+
	ld R5,y+
	ld R4,y+
	ld R3,y+
	ld R2,y+
	ld R1,y+
	ld R0,y+
	reti
	.dbend
	.dbfunc e adc_init _adc_init fV
	.even
_adc_init::
	.dbline -1
	.dbline 101
; }
; 
; 
; 
; void adc_init(void)
; {
	.dbline 103
;  //adc转换初始化
;  ADCSRA	= 0x00;	//禁止AD转换
	clr R2
	out 0x6,R2
	.dbline 105
;  //ADMUX	= 0xC1; //通道1    1100 0001
;  ADMUX =(1<<REFS1)|(1<<REFS0)|(adc_mux&0x1f);//选择内部AVCC为基准
	lds R24,_adc_mux
	andi R24,31
	ori R24,192
	out 0x7,R24
	.dbline 106
;  SFIOR |= 0x00;
	in R2,0x30
	out 0x30,R2
	.dbline 107
;  ACSR	= 0x80; //禁止模拟比较器
	ldi R24,128
	out 0x8,R24
	.dbline 108
;  ADCSRA	|= 0xEE;  //1110 1110
	in R24,0x6
	ori R24,238
	out 0x6,R24
	.dbline 109
;   ADCSRA|=(1<<ADEN)|(1<<ADSC)|(1<<ADATE)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
	in R24,0x6
	ori R24,238
	out 0x6,R24
	.dbline -2
L46:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ADCtoBCD _ADCtoBCD fV
;              i -> <dead>
;           temp -> R10,R11
	.even
_ADCtoBCD::
	xcall push_xgsetF03C
	movw R10,R16
	sbiw R28,2
	.dbline -1
	.dbline 115
; }
; 
; 
; //ADC结果转换成电压值
; void ADCtoBCD(unsigned int temp)
;  {
	.dbline 118
;   unsigned char i;
;    
;   temp=(unsigned int)(((unsigned long)((unsigned long)temp*Vref))/0x3ff);
	movw R2,R10
	clr R4
	clr R5
	ldi R20,0
	ldi R21,10
	ldi R22,0
	ldi R23,0
	st -y,R5
	st -y,R4
	st -y,R3
	st -y,R2
	movw R16,R20
	movw R18,R22
	xcall empy32u
	ldi R20,255
	ldi R21,3
	ldi R22,0
	ldi R23,0
	st -y,R23
	st -y,R22
	st -y,R21
	st -y,R20
	xcall div32u
	movw R10,R16
	.dbline 119
;   voltage=temp;
	sts _voltage+1,R11
	sts _voltage,R10
	.dbline 120
; switch(adc_mux)
	lds R12,_adc_mux
	clr R13
	tst R12
	brne X9
	tst R13
	breq L51
X9:
	movw R24,R12
	cpi R24,1
	ldi R30,0
	cpc R25,R30
	breq L52
X10:
	cpi R24,2
	ldi R30,0
	cpc R25,R30
	breq L53
X11:
	cpi R24,3
	ldi R30,0
	cpc R25,R30
	breq L54
X12:
	xjmp L48
L51:
	.dbline 122
;       {
; 		case 0:V0=temp;break;
	sts _V0+1,R11
	sts _V0,R10
	.dbline 122
	xjmp L49
L52:
	.dbline 123
; 		case 1:V1=temp;break;
	sts _V1+1,R11
	sts _V1,R10
	.dbline 123
	xjmp L49
L53:
	.dbline 124
; 		case 2:V2=temp;break;
	sts _V2+1,R11
	sts _V2,R10
	.dbline 124
	xjmp L49
L54:
	.dbline 125
; 	    case 3:V3=temp;break;
	sts _V3+1,R11
	sts _V3,R10
	.dbline 125
L48:
L49:
	.dbline 127
; 	 } 
;   LCD_write_shu(0,0,temp);
	std y+1,R11
	std y+0,R10
	clr R18
	clr R19
	clr R16
	clr R17
	xcall _LCD_write_shu
	.dbline -2
L47:
	.dbline 0 ; func end
	adiw R28,2
	xjmp pop_xgsetF03C
	.dbsym l i 3 c
	.dbsym r temp 10 i
	.dbend
	.area vector(rom, abs)
	.org 56
	jmp _adc_isr
	.area text(rom, con, rel)
	.dbfile C:\DOCUME~1\qiuqiu\桌面\测试\1\1.c
	.dbfunc e adc_isr _adc_isr fV
	.even
_adc_isr::
	st -y,R24
	st -y,R25
	in R24,0x3f
	st -y,R24
	.dbline -1
	.dbline 134
; 
;  }
; 
; 
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
	.dbline 136
;  //转换完成后中断处理
;    adc_rel=ADC&0x3ff;  //
	in R24,0x4
	in R25,0x5
	andi R25,3
	sts _adc_rel+1,R25
	sts _adc_rel,R24
	.dbline 137
;   ADMUX =(1<<REFS1)|(1<<REFS0)|(adc_mux&0x1f);
	lds R24,_adc_mux
	andi R24,31
	ori R24,192
	out 0x7,R24
	.dbline 138
;     ADCSRA|=(1<<ADSC);//启动AD转换//启动AD转换
	sbi 0x6,6
	.dbline -2
L55:
	.dbline 0 ; func end
	ld R24,y+
	out 0x3f,R24
	ld R25,y+
	ld R24,y+
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 145
; 
; }
; 
; 
; 
; void init_devices(void)
; {
	.dbline 146
;  CLI(); //禁止所有中断
	cli
	.dbline 147
;  MCUCR  = 0x00;
	clr R2
	out 0x35,R2
	.dbline 148
;  MCUCSR = 0x80;//禁止JTAG
	ldi R24,128
	out 0x34,R24
	.dbline 149
;  GICR   = 0x00;
	out 0x3b,R2
	.dbline 150
;  port_init();
	xcall _port_init
	.dbline 151
;  timer1_init();
	xcall _timer1_init
	.dbline 152
;  adc_init();
	xcall _adc_init
	.dbline 153
;  SEI();//开全局中断
	sei
	.dbline -2
L56:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e qianjin _qianjin fV
	.even
_qianjin::
	sbiw R28,2
	.dbline -1
	.dbline 157
; }
; 
; void qianjin()
;  {
	.dbline 159
;  //PORTC|=0x80;
;  PORTC=0x8A;     //1010前进
	ldi R24,138
	out 0x15,R24
	.dbline 160
;  LCD_write_string(0,1,"qianjin  ");
	ldi R24,<L58
	ldi R25,>L58
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _LCD_write_string
	.dbline -2
L57:
	.dbline 0 ; func end
	adiw R28,2
	ret
	.dbend
	.dbfunc e houtui _houtui fV
	.even
_houtui::
	sbiw R28,2
	.dbline -1
	.dbline 163
; }
; void houtui()
; {
	.dbline 164
; PORTC=0x85;     //0101后退
	ldi R24,133
	out 0x15,R24
	.dbline 165
; LCD_write_string(0,1,"houtui   ");
	ldi R24,<L60
	ldi R25,>L60
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _LCD_write_string
	.dbline -2
L59:
	.dbline 0 ; func end
	adiw R28,2
	ret
	.dbend
	.dbfunc e zuozhuan _zuozhuan fV
	.even
_zuozhuan::
	sbiw R28,2
	.dbline -1
	.dbline 169
; }
; 
; void zuozhuan()
; {
	.dbline 170
;  PORTC=0x82;     //0010  左传
	ldi R24,130
	out 0x15,R24
	.dbline 171
;  LCD_write_string(0,1,"zuozhuan");
	ldi R24,<L62
	ldi R25,>L62
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _LCD_write_string
	.dbline -2
L61:
	.dbline 0 ; func end
	adiw R28,2
	ret
	.dbend
	.dbfunc e youzhuan _youzhuan fV
	.even
_youzhuan::
	sbiw R28,2
	.dbline -1
	.dbline 174
; } 
; void youzhuan()
; {
	.dbline 175
;  PORTC=0x88;      //1000右转
	ldi R24,136
	out 0x15,R24
	.dbline 176
;  LCD_write_string(0,1,"youzhuan");
	ldi R24,<L64
	ldi R25,>L64
	std y+1,R25
	std y+0,R24
	ldi R18,1
	clr R16
	xcall _LCD_write_string
	.dbline -2
L63:
	.dbline 0 ; func end
	adiw R28,2
	ret
	.dbend
	.dbfunc e stop _stop fV
	.even
_stop::
	sbiw R28,2
	.dbline -1
	.dbline 179
; }
; void stop()
; {
	.dbline 180
;  PORTC=0x80;
	ldi R24,128
	out 0x15,R24
	.dbline 181
;   LCD_write_string(0,1,"stop   ");

⌨️ 快捷键说明

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