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

📄 adc-led.s

📁 这是关于AVR单片机学习的初步开发
💻 S
字号:
	.module adc-led.c
	.area data(ram, con, rel)
_lednum::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbsym e lednum _lednum c
_lednum1::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbsym e lednum1 _lednum1 c
_lednum2::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbsym e lednum2 _lednum2 c
_lednum3::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbsym e lednum3 _lednum3 c
_lednum4::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbsym e lednum4 _lednum4 c
_num::
	.blkb 2
	.area idata
	.byte 63,6
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.blkb 2
	.area idata
	.byte 91,'O
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.blkb 2
	.area idata
	.byte 'f,'m
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.blkb 2
	.area idata
	.byte 125,7
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.blkb 2
	.area idata
	.byte 127,'o
	.area data(ram, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbsym e num _num A[10:10]c
	.area text(rom, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbfunc e port_init _port_init fV
	.even
_port_init::
	.dbline -1
	.dbline 22
; //Designed by Alf
; //用于实现AD转换,转换结果由数码管显示,需要闭合SW5、SW6;以及SW8的1脚(AD0),而后旋转AD1电位器即可看到;
; //AD将电位器分得的0~5V电压转换成了0~1023;
; //ICC-AVR application builder : 2005-3-8 下午 04:53:49
; // Target : M8
; // Crystal: 11.059Mhz
; 
; #include <iom8v.h>
; #include <macros.h>
; 
; //lednum全局变量
; char lednum = 0;
; char lednum1 = 0;
; char lednum2 = 0;
; char lednum3 = 0;
; char lednum4 = 0;
; //码表
; char num[10] = {0x3f,0x06,0x5b,0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
; 
; 
; void port_init(void)
; {
	.dbline 23
;  PORTB = 0xFF;
	ldi R24,255
	out 0x18,R24
	.dbline 24
;  DDRB  = 0xFF;
	out 0x17,R24
	.dbline 25
;  PORTC = 0x00; //m103 output only
	clr R2
	out 0x15,R2
	.dbline 26
;  DDRC  = 0x7E;
	ldi R24,126
	out 0x14,R24
	.dbline 27
;  PORTD = 0x00;
	out 0x12,R2
	.dbline 28
;  DDRD  = 0xFF;
	ldi R24,255
	out 0x11,R24
	.dbline -2
	.dbline 29
; }
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e timer0_init _timer0_init fV
	.even
_timer0_init::
	.dbline -1
	.dbline 36
; 
; //TIMER0 initialisation - prescale:1024
; // WGM: Normal
; // desired value: 20mSec
; // actual value: 19.908mSec (0.5%)
; void timer0_init(void)
; {
	.dbline 37
;   TCCR0 = 0x00; //stop
	clr R2
	out 0x33,R2
	.dbline 38
;  TCNT0 = 0x29; //set count
	ldi R24,41
	out 0x32,R24
	.dbline 39
;  TCCR0 = 0x04; //start timer
	ldi R24,4
	out 0x33,R24
	.dbline -2
	.dbline 40
; }
L2:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 18
	rjmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile F:\单片机教学\调试程序\ADC\adc-led.c
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 44
; 
; #pragma interrupt_handler timer0_ovf_isr:10
; void timer0_ovf_isr(void)
; {
	.dbline 45
;  TCNT0 = 0x29; //reload counter value
	ldi R24,41
	out 0x32,R24
	.dbline 46
;  TCCR0 = 0x04; //start timer
	ldi R24,4
	out 0x33,R24
	.dbline 48
;  
;  PORTB |= 0x30;
	in R24,0x18
	ori R24,48
	out 0x18,R24
	.dbline 49
;  PORTC |= 0x30;
	in R24,0x15
	ori R24,48
	out 0x15,R24
	.dbline 50
;  if(lednum == 0)	//更新PB4数码管;
	lds R2,_lednum
	tst R2
	brne L4
	.dbline 51
;  {	PORTB &= ~0x10;
	.dbline 51
	cbi 0x18,4
	.dbline 52
; 	PORTD = lednum4;
	lds R2,_lednum4
	out 0x12,R2
	.dbline 53
;  }
	rjmp L5
L4:
	.dbline 54
;  else if(lednum ==1)	//更新PB5数码管;
	lds R24,_lednum
	cpi R24,1
	brne L6
	.dbline 55
;  {	PORTB &= ~0x20;
	.dbline 55
	cbi 0x18,5
	.dbline 56
; 	PORTD = lednum3;
	lds R2,_lednum3
	out 0x12,R2
	.dbline 57
;  }
	rjmp L7
L6:
	.dbline 58
;  else if(lednum ==2)	//更新PC4数码管;
	lds R24,_lednum
	cpi R24,2
	brne L8
	.dbline 59
;  {	PORTC &= ~0x10;
	.dbline 59
	cbi 0x15,4
	.dbline 60
; 	PORTD = lednum2;
	lds R2,_lednum2
	out 0x12,R2
	.dbline 61
;  }
	rjmp L9
L8:
	.dbline 63
;  else 	//更新PC5数码管;
;  { 	PORTC &= ~0x20;
	.dbline 63
	cbi 0x15,5
	.dbline 64
; 	PORTD = lednum1;
	lds R2,_lednum1
	out 0x12,R2
	.dbline 65
;  }
L9:
L7:
L5:
	.dbline 67
; 
; lednum++;
	lds R24,_lednum
	subi R24,255    ; addi 1
	sts _lednum,R24
	rjmp L11
L10:
	.dbline 68
	lds R24,_lednum
	subi R24,4
	sts _lednum,R24
L11:
	.dbline 68
; while(lednum >= 4) lednum = lednum - 4;
	lds R24,_lednum
	cpi R24,4
	brsh L10
	.dbline -2
	.dbline 70
;  
; }
L3:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e init_devices _init_devices fV
	.even
_init_devices::
	.dbline -1
	.dbline 74
; 
; //call this routine to initialise all peripherals
; void init_devices(void)
; {
	.dbline 76
;  //stop errant interrupts until set up
;  CLI(); //disable all interrupts
	cli
	.dbline 77
;  port_init();
	rcall _port_init
	.dbline 78
;  timer0_init();
	rcall _timer0_init
	.dbline 80
; 
;  MCUCR = 0x00;
	clr R2
	out 0x35,R2
	.dbline 81
;  GICR  = 0x00;
	out 0x3b,R2
	.dbline 82
;  TIMSK = 0x01; //timer interrupt sources
	ldi R24,1
	out 0x39,R24
	.dbline 83
;  SEI(); //re-enable interrupts
	sei
	.dbline -2
	.dbline 85
;  //all peripherals are now initialised
; }
L13:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay _delay fV
;              j -> R16,R17
;              i -> R18,R19
;              z -> R20,R21
	.even
_delay::
	rcall push_gset1
	.dbline -1
	.dbline 92
; 
; 
; 
; 
; //自定义函数
; void delay(void)
; {
	.dbline 94
	clr R18
	clr R19
	rjmp L18
L15:
	.dbline 94
L16:
	.dbline 94
	subi R18,255  ; offset = 1
	sbci R19,255
L18:
	.dbline 94
;  unsigned int i,j,z;
;  for(i=0;i<10000;i++);
	cpi R18,16
	ldi R30,39
	cpc R19,R30
	brlo L15
	.dbline 95
;  {	for(j=0;j<10000;j++)
	.dbline 95
	clr R16
	clr R17
	rjmp L22
L19:
	.dbline 96
	.dbline 96
	clr R20
	clr R21
	rjmp L26
L23:
	.dbline 96
L24:
	.dbline 96
	subi R20,255  ; offset = 1
	sbci R21,255
L26:
	.dbline 96
	cpi R20,100
	ldi R30,0
	cpc R21,R30
	brlo L23
	.dbline 96
L20:
	.dbline 95
	subi R16,255  ; offset = 1
	sbci R17,255
L22:
	.dbline 95
	cpi R16,16
	ldi R30,39
	cpc R17,R30
	brlo L19
	.dbline 97
;  	{	for(z=0;z<100;z++);}
;  }
	.dbline -2
	.dbline 98
; }
L14:
	rcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r j 16 i
	.dbsym r i 18 i
	.dbsym r z 20 i
	.dbend
	.dbfunc e main _main fV
;           temp -> R14,R15
;           num4 -> R22
;           num3 -> R10
;           num2 -> R20
;           num1 -> y+2
;              i -> R12
;           data -> y+0
	.even
_main::
	sbiw R28,3
	.dbline -1
	.dbline 101
; 
; void main(void)
; {
	.dbline 103
;   char i;
;   unsigned int data=0,temp;
	clr R0
	clr R1
	std y+1,R1
	std y+0,R0
	.dbline 104
;   char num1=0,num2=0,num3=0,num4=0;
	std y+2,R0
	.dbline 104
	clr R20
	.dbline 104
	clr R10
	.dbline 104
	clr R22
	.dbline 105
;   init_devices();
	rcall _init_devices
	.dbline 107
;  
;  for(i=0;i<=9;i++)
	clr R12
	rjmp L31
L28:
	.dbline 108
	.dbline 108
	ldi R24,<_num
	ldi R25,>_num
	mov R30,R12
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts _lednum1,R2
	.dbline 109
	rcall _delay
	.dbline 110
L29:
	.dbline 107
	inc R12
L31:
	.dbline 107
	ldi R24,9
	cp R24,R12
	brsh L28
	.dbline 112
;  {	lednum1 = num[i];
;  	delay();
;  } 
;  
;  lednum1 = num[0];
	lds R2,_num
	sts _lednum1,R2
	.dbline 113
;  lednum2 = num[0];
	sts _lednum2,R2
	.dbline 114
;  lednum3 = num[0];
	sts _lednum3,R2
	.dbline 115
;  lednum4 = num[0];
	sts _lednum4,R2
	.dbline 117
;  
;  delay();
	rcall _delay
	.dbline 118
;  delay();
	rcall _delay
	rjmp L33
L32:
	.dbline 120
;  while(1)
;  {	ADMUX = 0x40;	  //选择通道零
	.dbline 120
	ldi R24,64
	out 0x7,R24
	.dbline 121
;  	ADCSRA = 0xC7;
	ldi R24,199
	out 0x6,R24
L35:
	.dbline 123
L36:
	.dbline 123
	in R24,0x6
	ori R24,16
	breq L35
	.dbline 124
	cbi 0x6,4
	.dbline 126
	in R2,0x4
	clr R3
	std y+1,R3
	std y+0,R2
	.dbline 127
	in R14,0x5
	clr R15
	mov R15,R14
	clr R14
	.dbline 128
	movw R0,R2
	add R0,R14
	adc R1,R15
	std y+1,R1
	std y+0,R0
	.dbline 130
	ldi R18,1000
	ldi R19,3
	movw R16,R0
	rcall div16u
	mov R22,R16
	.dbline 131
	ldi R18,1000
	ldi R19,3
	ldd R16,y+0
	ldd R17,y+1
	rcall div16u
	movw R18,R16
	ldi R16,1000
	ldi R17,3
	rcall empy16s
	movw R2,R16
	ldd R16,y+0
	ldd R17,y+1
	sub R16,R2
	sbc R17,R3
	ldi R18,100
	ldi R19,0
	rcall div16u
	mov R10,R16
	.dbline 132
	ldi R18,100
	ldi R19,0
	ldd R16,y+0
	ldd R17,y+1
	rcall div16u
	movw R18,R16
	ldi R16,100
	ldi R17,0
	rcall empy16s
	movw R2,R16
	ldd R16,y+0
	ldd R17,y+1
	sub R16,R2
	sbc R17,R3
	ldi R18,10
	ldi R19,0
	rcall div16u
	mov R20,R16
	.dbline 133
	ldi R18,10
	ldi R19,0
	ldd R16,y+0
	ldd R17,y+1
	rcall div16u
	movw R18,R16
	ldi R16,10
	ldi R17,0
	rcall empy16s
	ldd R4,y+0
	ldd R5,y+1
	sub R4,R16
	sbc R5,R17
	std y+2,R4
	.dbline 136
	ldi R24,<_num
	ldi R25,>_num
	mov R30,R22
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts _lednum4,R2
	.dbline 137
	mov R30,R10
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts _lednum3,R2
	.dbline 138
	mov R30,R20
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts _lednum2,R2
	.dbline 139
	mov R30,R4
	clr R31
	add R30,R24
	adc R31,R25
	ldd R2,z+0
	sts _lednum1,R2
	.dbline 141
	sbi 0x6,6
	.dbline 142
	rcall _delay
	.dbline 144
L33:
	.dbline 119
	rjmp L32
X0:
	.dbline -2
	.dbline 145
; 	
; 	while((ADCSRA | 0x10)==0);
; 	ADCSRA &=~0x10;
; 	
; 	data = ADCL;
; 	temp =ADCH<<8;
; 	data = data +temp;
; 	
; 	num4 = data/1000;
; 	num3 = (data- data/1000*1000)/100;
; 	num2 = (data-data/100*100)/10;
; 	num1= data-data/10*10; 
; 	
; 	
; 	lednum4 = num[num4];
; 	lednum3 = num[num3];  
; 	lednum2 = num[num2];
; 	lednum1 = num[num1];
; 	
; 	ADCSRA |= 0x40;    
; 	delay();
; 	
;  } 
; }
L27:
	adiw R28,3
	.dbline 0 ; func end
	ret
	.dbsym r temp 14 i
	.dbsym r num4 22 c
	.dbsym r num3 10 c
	.dbsym r num2 20 c
	.dbsym l num1 2 c
	.dbsym r i 12 c
	.dbsym l data 0 i
	.dbend

⌨️ 快捷键说明

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