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

📄 main.s

📁 Proteus与AVR应用实例,对初学者很有帮助。
💻 S
字号:
	.module main.c
	.area text(rom, con, rel)
	.dbfile D:/我的文档/桌面/harvest/delay.h
	.dbfunc e delay_1us _delay_1us fV
	.even
_delay_1us::
	.dbline -1
	.dbline 15
; #include <iom16v.h>  
; //#include <iom128v.h>  
; #include <adc.h> 
; #include <lcd.h> 
; #include <time0.h> 
; #include <time1.h> 
; #include <delay.h> 
; #include <macros.h> 
; #include <parameter.h> 
; //--------------------------------主函数--------------------------------------// 
; void main(void)  
; {  
;  timer0_int();
;  timer1_int();
;  ADC_int();
	.dbline 16
;  LCD_init();//液晶初始化
	nop
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e delay_nus _delay_nus fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nus::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 20
;  TIMSK = 0x11;       //  定时器/计数器1比较匹配A中断
;  SEI();            // 使能全局中断 
;  scale=30; //调节50Hz占空比
;  while(1)  
	.dbline 21
;  {
	clr R20
	clr R21
	.dbline 22
;    //27KHz占空比设置
	xjmp L6
L3:
	.dbline 23
	xcall _delay_1us
L4:
	.dbline 22
	subi R20,255  ; offset = 1
	sbci R21,255
L6:
	.dbline 22
	cp R20,R22
	cpc R21,R23
	brlo L3
	.dbline -2
L2:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfunc e delay_1ms _delay_1ms fV
;              i -> R16,R17
	.even
_delay_1ms::
	.dbline -1
	.dbline 27
;    OCR1A++;
;    if(OCR1A!=147)OCR1A++;
;    else OCR1A=10;
;    OCR1B=294-OCR1A;
;    //50Hz占空比设置
	.dbline 29
	clr R16
	clr R17
	xjmp L11
L8:
	.dbline 29
L9:
	.dbline 29
	subi R16,255  ; offset = 1
	sbci R17,255
L11:
	.dbline 29
;    if(scale!=50)scale++;
;    else scale=1;
	cpi R16,116
	ldi R30,4
	cpc R17,R30
	brlo L8
	.dbline -2
L7:
	.dbline 0 ; func end
	ret
	.dbsym r i 16 i
	.dbend
	.dbfunc e delay_nms _delay_nms fV
;              i -> R20,R21
;              n -> R22,R23
	.even
_delay_nms::
	xcall push_gset2
	movw R22,R16
	.dbline -1
	.dbline 33
;    //channel通道选择
;    if(channel!=7)channel++;
;    else channel=0;
;    adcdisplay();
	.dbline 34
;    delay_nms(10);
	clr R20
	clr R21
	.dbline 35
;    
	xjmp L16
L13:
	.dbline 36
	xcall _delay_1ms
L14:
	.dbline 35
	subi R20,255  ; offset = 1
	sbci R21,255
L16:
	.dbline 35
	cp R20,R22
	cpc R21,R23
	brlo L13
	.dbline -2
L12:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r n 22 i
	.dbend
	.dbfile D:/我的文档/桌面/harvest/lcd.h
	.dbfunc e LCD_init _LCD_init fV
	.even
_LCD_init::
	.dbline -1
	.dbline 59
;  }
; }  
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
; 
	.dbline 60
; 
	in R24,0x17
	ori R24,240
	out 0x17,R24
	.dbline 61
; 
	sbi 0x17,3
	.dbline 62
; 
	sbi 0x17,2
	.dbline 63
; 
	ldi R16,40
	xcall _LCD_write_command
	.dbline 64
; 
	xcall _LCD_en_write
	.dbline 65
; 
	ldi R16,40
	ldi R17,0
	xcall _delay_nus
	.dbline 66
; 
	ldi R16,40
	xcall _LCD_write_command
	.dbline 67
; 
	ldi R16,12
	xcall _LCD_write_command
	.dbline 68
; 
	ldi R16,1
	xcall _LCD_write_command
	.dbline 69
; 
	ldi R16,2
	ldi R17,0
	xcall _delay_nms
	.dbline -2
L17:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_en_write _LCD_en_write fV
	.even
_LCD_en_write::
	.dbline -1
	.dbline 73
; 
; 
; 
; 
	.dbline 74
; 
	sbi 0x18,3
	.dbline 75
; 
	ldi R16,1
	ldi R17,0
	xcall _delay_nus
	.dbline 76
; 
	cbi 0x18,3
	.dbline -2
L18:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e LCD_write_command _LCD_write_command fV
;        command -> R20
	.even
_LCD_write_command::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 80
; 
; 
; 
; 
	.dbline 81
; 
	ldi R16,16
	ldi R17,0
	xcall _delay_nus
	.dbline 82
; 
	cbi 0x18,2
	.dbline 83
; 
	in R24,0x18
	andi R24,15
	out 0x18,R24
	.dbline 84
; 
	mov R24,R20
	andi R24,240
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 85
; 
	xcall _LCD_en_write
	.dbline 86
; 
	mov R24,R20
	andi R24,#0x0F
	swap R24
	mov R20,R24
	.dbline 87
; 
	in R24,0x18
	andi R24,15
	out 0x18,R24
	.dbline 88
; 
	mov R24,R20
	andi R24,240
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 89
; 
	xcall _LCD_en_write
	.dbline -2
L19:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r command 20 c
	.dbend
	.dbfunc e LCD_write_data _LCD_write_data fV
;           data -> R20
	.even
_LCD_write_data::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 94
; 
; 
; 
; 
; 
	.dbline 95
; 
	ldi R16,16
	ldi R17,0
	xcall _delay_nus
	.dbline 96
; 
	sbi 0x18,2
	.dbline 97
; 
	in R24,0x18
	andi R24,15
	out 0x18,R24
	.dbline 98
; 
	mov R24,R20
	andi R24,240
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 99
; 
	xcall _LCD_en_write
	.dbline 100
; 
	mov R24,R20
	andi R24,#0x0F
	swap R24
	mov R20,R24
	.dbline 101
; 
	in R24,0x18
	andi R24,15
	out 0x18,R24
	.dbline 102
; 
	mov R24,R20
	andi R24,240
	in R2,0x18
	or R2,R24
	out 0x18,R2
	.dbline 103
; 
	xcall _LCD_en_write
	.dbline -2
L20:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbend
	.dbfunc e LCD_set_xy _LCD_set_xy fV
;        address -> R20
;              y -> R20
;              x -> R22
	.even
_LCD_set_xy::
	xcall push_gset2
	mov R20,R18
	mov R22,R16
	.dbline -1
	.dbline 108
; 
; 
; 
; 
; 
	.dbline 110
; 
; 
	tst R20
	brne L22
	.dbline 110
	mov R20,R22
	subi R20,128    ; addi 128
	xjmp L23
L22:
	.dbline 111
; 
	mov R20,R22
	subi R20,64    ; addi 192
L23:
	.dbline 112
; 
	mov R16,R20
	xcall _LCD_write_command
	.dbline -2
L21:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym r y 20 c
	.dbsym r x 22 c
	.dbend
	.dbfunc e LCD_write_string _LCD_write_string fV
;              s -> R20,R21
;              Y -> R10
;              X -> R22
	.even
_LCD_write_string::
	xcall push_gset3
	mov R10,R18
	mov R22,R16
	ldd R20,y+6
	ldd R21,y+7
	.dbline -1
	.dbline 116
; 
; 
; 
; 
	.dbline 117
; 
	mov R18,R10
	mov R16,R22
	xcall _LCD_set_xy
	xjmp L26
L25:
	.dbline 119
	.dbline 120
	movw R30,R20
	ldd R16,z+0
	xcall _LCD_write_data
	.dbline 121
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 122
L26:
	.dbline 118
; 
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L25
	.dbline -2
L24:
	xcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r s 20 pc
	.dbsym r Y 10 c
	.dbsym r X 22 c
	.dbend
	.dbfunc e LCD_write_char _LCD_write_char fV
;           data -> y+4
;              Y -> R22
;              X -> R20
	.even
_LCD_write_char::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 127
; 
; 
; 
; 
; 
; 
; 
; 
; 
	.dbline 128
; 
	mov R18,R22
	mov R16,R20
	xcall _LCD_set_xy
	.dbline 129
; 
	ldd R16,y+4
	xcall _LCD_write_data
	.dbline -2
L28:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data 4 c
	.dbsym r Y 22 c
	.dbsym r X 20 c
	.dbend
	.area data(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/lcd.h
_Data::
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/lcd.h
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/lcd.h
	.blkb 2
	.area idata
	.byte 0,0
	.area data(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/lcd.h
	.dbfile D:/我的文档/桌面/harvest/parameter.h
	.dbsym e Data _Data A[6:6]c
	.area text(rom, con, rel)
	.dbfile D:/我的文档/桌面/harvest/parameter.h
	.dbfile D:/我的文档/桌面/harvest/adc.h
	.dbfunc e ADC_convert _ADC_convert fi
;    ADC_channel -> R20
	.even
_ADC_convert::
	xcall push_gset1
	mov R20,R16
	.dbline -1
	.dbline 11
	.dbline 12
	mov R24,R20
	andi R24,31
	ori R24,192
	out 0x7,R24
	.dbline 25
	ldi R24,134
	out 0x6,R24
	.dbline 35
	ldi R16,200
	ldi R17,0
	xcall _delay_nus
	.dbline 36
	sbi 0x6,6
L30:
	.dbline 37
L31:
	.dbline 37
	in R24,0x6
	andi R24,16
	cpi R24,16
	brne L30
	.dbline 38
	sbi 0x6,4
	.dbline 39
	clr R2
	out 0x6,R2
	.dbline 40
	in R18,0x4
	in R19,0x5
	andi R19,3
	ldi R16,25
	ldi R17,0
	xcall empy16s
	ldi R18,10
	ldi R19,0
	xcall div16u
	subi R16,255  ; offset = 1
	sbci R17,255
	.dbline -2
L29:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r ADC_channel 20 c
	.dbend
	.dbfunc e change _change fV
;              p -> R20,R21
;              i -> R22,R23
	.even
_change::
	xcall push_gset2
	movw R20,R18
	movw R22,R16
	.dbline -1
	.dbline 45
	.dbline 46
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall mod16u
	movw R24,R16
	adiw R24,48
	movw R30,R20
	std z+4,R24
	.dbline 47
	ldi R18,10
	ldi R19,0
	movw R16,R22
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	movw R24,R16
	adiw R24,48
	movw R30,R20
	std z+3,R24
	.dbline 48
	ldi R18,100
	ldi R19,0
	movw R16,R22
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	movw R24,R16
	adiw R24,48
	movw R30,R20
	std z+2,R24
	.dbline 49
	ldi R24,46
	movw R30,R20
	std z+1,R24
	.dbline 50
	ldi R18,1000
	ldi R19,3
	movw R16,R22
	xcall div16u
	ldi R18,10
	ldi R19,0
	xcall mod16u
	movw R24,R16
	adiw R24,48
	movw R30,R20
	std z+0,R24
	.dbline -2
L33:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r p 20 pc
	.dbsym r i 22 i
	.dbend
	.dbfunc e adcdisplay _adcdisplay fV
	.even
_adcdisplay::
	sbiw R28,2
	.dbline -1
	.dbline 55
	.dbline 56
	lds R16,_channel
	xcall _ADC_convert
	sts _vol+1,R17
	sts _vol,R16
	.dbline 57
	ldi R18,<_Data
	ldi R19,>_Data
	xcall _change
	.dbline 58
	ldi R24,<L35
	ldi R25,>L35
	std y+1,R25
	std y+0,R24
	clr R18
	ldi R16,2
	xcall _LCD_write_string
	.dbline 59
	ldi R24,<L36
	ldi R25,>L36
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,1
	xcall _LCD_write_string
	.dbline 60
	lds R24,_channel
	subi R24,208    ; addi 48
	std y+0,R24
	clr R18
	ldi R16,11
	xcall _LCD_write_char
	.dbline 61
	ldi R24,<_Data
	ldi R25,>_Data
	std y+1,R25
	std y+0,R24
	ldi R18,1
	ldi R16,10
	xcall _LCD_write_string
	.dbline 62
	ldi R24,86
	std y+0,R24
	ldi R18,1
	ldi R16,15
	xcall _LCD_write_char
	.dbline -2
L34:
	adiw R28,2
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ADC_int _ADC_int fV
	.even
_ADC_int::
	.dbline -1
	.dbline 67
	.dbline 68
	clr R2
	out 0x1a,R2
	.dbline 69
	ldi R24,1
	out 0x1b,R24
	.dbline -2
L37:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfile D:/我的文档/桌面/harvest/time0.h
	.dbfunc e timer0_int _timer0_int fV
	.even
_timer0_int::
	.dbline -1
	.dbline 10
	.dbline 11
	in R24,0x11
	ori R24,192
	out 0x11,R24
	.dbline 14
	ldi R24,57
	out 0x32,R24
	.dbline 15
	ldi R24,2
	out 0x33,R24
	.dbline -2
L38:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 36
	jmp _timer0_ovf_isr
	.area text(rom, con, rel)
	.dbfile D:/我的文档/桌面/harvest/time0.h
	.area bss(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/time0.h
L40:
	.blkb 1
	.area text(rom, con, rel)
	.dbfile D:/我的文档/桌面/harvest/time0.h
	.dbfunc e timer0_ovf_isr _timer0_ovf_isr fV
	.dbsym s tt L40 c
	.even
_timer0_ovf_isr::
	st -y,R2
	st -y,R3
	st -y,R24
	st -y,R25
	in R2,0x3f
	st -y,R2
	.dbline -1
	.dbline 30
	.dbline 32
	ldi R24,57
	out 0x32,R24
	.dbline 33
	lds R24,L40
	subi R24,255    ; addi 1
	sts L40,R24
	.dbline 34
	cpi R24,99
	brne L41
	.dbline 35
	.dbline 36
	clr R2
	sts L40,R2
	.dbline 37
	sbi 0x12,6
	.dbline 38
L41:
	.dbline 39
	lds R2,L40
	lds R3,_scale
	cp R3,R2
	brne L43
	.dbline 40
	.dbline 41
	cbi 0x12,6
	.dbline 42
L43:
	.dbline 43
	lds R24,L40
	cpi R24,50
	brne L45
	.dbline 44
	.dbline 45
	sbi 0x12,7
	.dbline 46
L45:
	.dbline 47
	lds R24,_scale
	subi R24,206    ; addi 50
	lds R2,L40
	cp R2,R24
	brne L47
	.dbline 48
	.dbline 49
	cbi 0x12,7
	.dbline 50
L47:
	.dbline -2
L39:
	ld R2,y+
	out 0x3f,R2
	ld R25,y+
	ld R24,y+
	ld R3,y+
	ld R2,y+
	.dbline 0 ; func end
	reti
	.dbend
	.dbfile D:/我的文档/桌面/harvest/time1.h
	.dbfunc e timer1_int _timer1_int fV
	.even
_timer1_int::
	.dbline -1
	.dbline 8
	.dbline 9
	in R24,0x11
	ori R24,48
	out 0x11,R24
	.dbline 11
	clr R2
	out 0x2e,R2
	.dbline 12
	ldi R24,40
	ldi R25,0
	out 0x2b,R25
	out 0x2a,R24
	.dbline 13
	ldi R24,254
	out 0x29,R25
	out 0x28,R24
	.dbline 14
	ldi R24,294
	ldi R25,1
	out 0x27,R25
	out 0x26,R24
	.dbline 15
	ldi R24,178
	out 0x2f,R24
	.dbline 19
	ldi R24,25
	out 0x2e,R24
	.dbline -2
L49:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 24
	jmp _timer1_compa_isr
	.area text(rom, con, rel)
	.dbfile D:/我的文档/桌面/harvest/time1.h
	.dbfunc e timer1_compa_isr _timer1_compa_isr fV
	.even
_timer1_compa_isr::
	.dbline -1
	.dbline 30
	.dbline -2
L50:
	.dbline 0 ; func end
	reti
	.dbend
	.dbfile d:\我的文档\桌面\harvest\main.c
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 12
	.dbline 13
	xcall _timer0_int
	.dbline 14
	xcall _timer1_int
	.dbline 15
	xcall _ADC_int
	.dbline 16
	xcall _LCD_init
	.dbline 17
	ldi R24,17
	out 0x39,R24
	.dbline 18
	sei
	.dbline 19
	ldi R24,30
	sts _scale,R24
	xjmp L53
L52:
	.dbline 21
	.dbline 23
	in R24,0x2a
	in R25,0x2b
	adiw R24,1
	out 0x2b,R25
	out 0x2a,R24
	.dbline 24
	in R24,0x2a
	in R25,0x2b
	cpi R24,147
	ldi R30,0
	cpc R25,R30
	breq L55
	.dbline 24
	in R24,0x2a
	in R25,0x2b
	adiw R24,1
	out 0x2b,R25
	out 0x2a,R24
	xjmp L56
L55:
	.dbline 25
	ldi R24,10
	ldi R25,0
	out 0x2b,R25
	out 0x2a,R24
L56:
	.dbline 26
	in R2,0x2a
	in R3,0x2b
	ldi R24,294
	ldi R25,1
	sub R24,R2
	sbc R25,R3
	out 0x29,R25
	out 0x28,R24
	.dbline 28
	lds R24,_scale
	cpi R24,50
	breq L57
	.dbline 28
	subi R24,255    ; addi 1
	sts _scale,R24
	xjmp L58
L57:
	.dbline 29
	ldi R24,1
	sts _scale,R24
L58:
	.dbline 31
	lds R24,_channel
	cpi R24,7
	breq L59
	.dbline 31
	subi R24,255    ; addi 1
	sts _channel,R24
	xjmp L60
L59:
	.dbline 32
	clr R2
	sts _channel,R2
L60:
	.dbline 33
	xcall _adcdisplay
	.dbline 34
	ldi R16,10
	ldi R17,0
	xcall _delay_nms
	.dbline 36
L53:
	.dbline 20
	xjmp L52
X0:
	.dbline -2
L51:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile d:\我的文档\桌面\harvest\main.c
_channel::
	.blkb 1
	.dbfile D:/我的文档/桌面/harvest/parameter.h
	.dbsym e channel _channel c
_vol::
	.blkb 2
	.dbsym e vol _vol i
_scale::
	.blkb 1
	.dbsym e scale _scale c
	.area data(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/parameter.h
L36:
	.blkb 9
	.area idata
	.byte 'V,'O,'L,'T,'A,'G,'E,58,0
	.area data(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/parameter.h
L35:
	.blkb 9
	.area idata
	.byte 'C,'H,'A,'N,'N,'E,'L,58,0
	.area data(ram, con, rel)
	.dbfile D:/我的文档/桌面/harvest/parameter.h

⌨️ 快捷键说明

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