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

📄 ad.s

📁 基于ATMEGA16的AD转换的C程序源代码
💻 S
字号:
	.module ad.c
	.area data(ram, con, rel)
_ADbz::
	.blkb 1
	.area idata
	.byte 0
	.area data(ram, con, rel)
	.dbfile H:\bbi项目源程序\AD转换\adc_16/lcd.h
	.dbsym e ADbz _ADbz c
	.area text(rom, con, rel)
	.dbfile H:\bbi项目源程序\AD转换\adc_16/lcd.h
	.dbfunc e delay _delay fV
;              i -> R20
;              n -> R16
	.even
_delay::
	xcall push_gset1
	.dbline -1
	.dbline 8
; #include "iom16v.h"
; #include "macros.h"
; #include "lcd.h"
; unsigned int Adc0_Conver[1];
; unsigned char time;
; void Adc_Init(void)
; {
;   DDRD&=~0x80;
	.dbline 10
;   PORTD&=~0x80;
;  ADMUX=0xe0;                //片内2.56基准源,通道为ADC0
	clr R20
	xjmp L5
L2:
	.dbline 11
	.dbline 11
	nop
	.dbline 11
L3:
	.dbline 10
	inc R20
L5:
	.dbline 10
	cp R20,R16
	brlo L2
	.dbline -2
L1:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 c
	.dbsym r n 16 c
	.dbend
	.dbfunc e lcd_out _lcd_out fV
;              s -> <dead>
;              i -> R20
;      send_byte -> R22
	.even
_lcd_out::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 17
;  ADCSRA=0X00;                //停止ADC
; 
;  ACSR=(1<<ACD);				 //关闭模拟比较器
;  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)
; 		|(1<<ADPS2)|(1<<ADPS1)|(1<<ADPS0);	//使能ADC、启动AD转换、使能ADC中断、128分频
;                                             
; }
	.dbline 19
; 
; #pragma interrupt_handler Adc_isr:15
	clr R20
	xjmp L10
L7:
	.dbline 20
; void Adc_isr(void)
	.dbline 21
; {
	sbrc R22,7
	rjmp L11
	.dbline 22
;   	 	time=ADCH;		                //取出转换结果到缓冲数组
	.dbline 23
; 		lcd_write2(2,1,time);           //显示转换结果
	cbi 0x1b,1
	.dbline 24
; 		ADCSRA|=(1<<ADSC);				//启动转换
	xjmp L12
L11:
	.dbline 26
; }
; void main()
	.dbline 27
; { CLI();
	sbi 0x1b,1
	.dbline 28
;  Adc_Init();
L12:
	.dbline 29
	cbi 0x1b,3
	.dbline 30
	sbi 0x1b,3
	.dbline 31
	lsl R22
	.dbline 32
L8:
	.dbline 19
	inc R20
L10:
	.dbline 19
	cpi R20,8
	brlo L7
	.dbline 33
;  Lcd_INT();
;  lcd_clear();
;  SEI();
; }
; }
	ldi R16,0
	xcall _delay
	.dbline -2
L6:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l s 1 c
	.dbsym r i 20 c
	.dbsym r send_byte 22 c
	.dbend
	.dbfunc e WR_dat _WR_dat fV
;              s -> R20
;            dat -> R22
	.even
_WR_dat::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 38
; }
; }
; }
; }
; }
	.dbline 40
; }
; }
	mov R20,R22
	andi R20,240
	.dbline 41
; }
	ldi R16,250
	xcall _lcd_out
	.dbline 42
; }
	mov R16,R20
	xcall _lcd_out
	.dbline 43
; }
	mov R20,R22
	andi R20,15
	.dbline 44
; }
	mov R24,R20
	andi R24,#0x0F
	swap R24
	mov R20,R24
	.dbline 45
; }
	mov R16,R24
	xcall _lcd_out
	.dbline -2
L13:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r s 20 c
	.dbsym r dat 22 c
	.dbend
	.dbfunc e WR_control _WR_control fV
;              s -> R20
;            dat -> R22
	.even
_WR_control::
	xcall push_gset2
	mov R22,R16
	.dbline -1
	.dbline 49
; }
; }
; }
; }
	.dbline 51
; }
; }
	mov R20,R22
	andi R20,240
	.dbline 52
; }
	ldi R16,248
	xcall _lcd_out
	.dbline 53
; }
	mov R16,R20
	xcall _lcd_out
	.dbline 54
; }
	mov R20,R22
	andi R20,15
	.dbline 55
; }
	mov R24,R20
	andi R24,#0x0F
	swap R24
	mov R20,R24
	.dbline 56
; }
	mov R16,R24
	xcall _lcd_out
	.dbline -2
L14:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r s 20 c
	.dbsym r dat 22 c
	.dbend
	.dbfunc e lcd_control _lcd_control fV
	.even
_lcd_control::
	.dbline -1
	.dbline 60
; }
; }
; }
; }
	.dbline 61
; }
	ldi R16,48
	xcall _WR_control
	.dbline 62
; }
	ldi R16,12
	xcall _WR_control
	.dbline -2
L15:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e lcd_clear _lcd_clear fV
;              i -> R20,R21
	.even
_lcd_clear::
	xcall push_gset1
	.dbline -1
	.dbline 66
; }
; }
; }
; }
	.dbline 68
; }
; }
	ldi R16,1
	xcall _WR_control
	.dbline 69
; }
	clr R20
	clr R21
L17:
	.dbline 70
	.dbline 71
	nop
	.dbline 72
	nop
	.dbline 73
L18:
	.dbline 69
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 69
	cpi R20,136
	ldi R30,19
	cpc R21,R30
	brlt L17
	.dbline -2
L16:
	xcall pop_gset1
	.dbline 0 ; func end
	ret
	.dbsym r i 20 I
	.dbend
	.dbfunc e LCD_address _LCD_address fV
;        address -> R20
;              y -> R22
;              x -> R20
	.even
_LCD_address::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 82
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 84
; }
; }
	clr R21
	cpi R20,0
	cpc R20,R21
	breq L25
X0:
	cpi R20,1
	ldi R30,0
	cpc R21,R30
	breq L26
	cpi R20,2
	ldi R30,0
	cpc R21,R30
	breq L27
	cpi R20,3
	ldi R30,0
	cpc R21,R30
	breq L28
	xjmp L22
X1:
	.dbline 85
; }
L25:
	.dbline 87
; }
; }
	mov R20,R22
	subi R20,128    ; addi 128
	.dbline 88
; }
	xjmp L23
L26:
	.dbline 90
; }
; }
	mov R20,R22
	subi R20,112    ; addi 144
	.dbline 91
; }
	xjmp L23
L27:
	.dbline 93
; }
; }
	mov R20,R22
	subi R20,120    ; addi 136
	.dbline 94
; }
	xjmp L23
L28:
	.dbline 96
; }
; }
	mov R20,R22
	subi R20,104    ; addi 152
	.dbline 97
; }
	xjmp L23
L22:
	.dbline 98
; }
	mov R20,R22
	subi R20,128    ; addi 128
	.dbline 99
; }
L23:
	.dbline 100
; }
	mov R16,R20
	xcall _WR_control
	.dbline -2
L21:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r address 20 c
	.dbsym r y 22 c
	.dbsym r x 20 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 111
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 113
; }
; }
	mov R18,R10
	mov R16,R22
	xcall _LCD_address
	xjmp L31
L30:
	.dbline 115
	.dbline 116
	movw R30,R20
	ldd R16,z+0
	xcall _WR_dat
	.dbline 117
	subi R20,255  ; offset = 1
	sbci R21,255
	.dbline 118
L31:
	.dbline 114
; }
	movw R30,R20
	ldd R2,z+0
	tst R2
	brne L30
	.dbline -2
L29:
	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 BCD_ASCII _BCD_ASCII fc
;            bcd -> R16
	.even
_BCD_ASCII::
	.dbline -1
	.dbline 130
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 131
; }
	andi R16,15
	.dbline 132
; }
	ldi R24,9
	cp R24,R16
	brsh L34
	.dbline 133
; }
	subi R16,201    ; addi 55
	xjmp L35
L34:
	.dbline 135
; }
; }
	subi R16,208    ; addi 48
L35:
	.dbline 136
; }
	.dbline -2
L33:
	.dbline 0 ; func end
	ret
	.dbsym r bcd 16 c
	.dbend
	.dbfunc e LCD_writeasc _LCD_writeasc fV
;           data -> y+4
;              y -> R22
;              x -> R20
	.even
_LCD_writeasc::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 141
; }
; }
; }
; }
; }
	.dbline 142
; }
	mov R18,R22
	mov R16,R20
	xcall _LCD_address
	.dbline 143
; }
	ldd R16,y+4
	xcall _WR_dat
	.dbline -2
L36:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l data 4 c
	.dbsym r y 22 c
	.dbsym r x 20 c
	.dbend
	.dbfunc e Lcd_INT _Lcd_INT fV
	.even
_Lcd_INT::
	.dbline -1
	.dbline 147
; }
; }
; }
; }
	.dbline 149
; }
; }
	sbi 0x1a,1
	.dbline 150
; }
	sbi 0x1a,3
	.dbline 151
; }
	xcall _lcd_control
	.dbline -2
L37:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e lcd_writechar _lcd_writechar fV
;         number -> y+4
;              Y -> R22
;              X -> R20
	.even
_lcd_writechar::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 155
; }
; }
; }
; }
	.dbline 156
; }
	mov R18,R22
	mov R16,R20
	xcall _LCD_address
	.dbline 157
; }
	ldd R16,y+4
	swap R16
	andi R16,#0x0F
	xcall _BCD_ASCII
	xcall _WR_dat
	.dbline 158
; }
	ldd R16,y+4
	xcall _BCD_ASCII
	xcall _WR_dat
	.dbline -2
L38:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l number 4 c
	.dbsym r Y 22 c
	.dbsym r X 20 c
	.dbend
	.dbfunc e lcd_write2 _lcd_write2 fV
;         number -> y+4
;              Y -> R22
;              X -> R20
	.even
_lcd_write2::
	xcall push_gset2
	mov R22,R18
	mov R20,R16
	.dbline -1
	.dbline 170
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
; }
	.dbline 171
; }
	mov R18,R22
	mov R16,R20
	xcall _LCD_address
	.dbline 172
; }
	ldi R17,100
	ldd R16,y+4
	xcall div8u
	xcall _BCD_ASCII
	xcall _WR_dat
	.dbline 173
; }
	ldi R17,100
	ldd R16,y+4
	xcall mod8u
	ldi R17,10
	xcall div8u
	xcall _BCD_ASCII
	xcall _WR_dat
	.dbline 174
; }
	mov R18,R22
	subi R18,255    ; addi 1
	mov R16,R20
	xcall _LCD_address
	.dbline 175
; }
	ldi R17,10
	ldd R16,y+4
	xcall mod8u
	xcall _BCD_ASCII
	xcall _WR_dat
	.dbline -2
L39:
	xcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym l number 4 c
	.dbsym r Y 22 c
	.dbsym r X 20 c
	.dbend
	.dbfile H:\bbi项目源程序\AD转换\adc_16\ad.c
	.dbfunc e Adc_Init _Adc_Init fV
	.even
_Adc_Init::
	.dbline -1
	.dbline 7
	.dbline 8
	cbi 0x11,7
	.dbline 9
	cbi 0x12,7
	.dbline 10
	ldi R24,224
	out 0x7,R24
	.dbline 11
	clr R2
	out 0x6,R2
	.dbline 13
	ldi R24,128
	out 0x8,R24
	.dbline 14
	ldi R24,207
	out 0x6,R24
	.dbline -2
L40:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 56
	jmp _Adc_isr
	.area text(rom, con, rel)
	.dbfile H:\bbi项目源程序\AD转换\adc_16\ad.c
	.dbfunc e Adc_isr _Adc_isr fV
	.even
_Adc_isr::
	xcall push_lset
	sbiw R28,1
	.dbline -1
	.dbline 21
	.dbline 22
	in R2,0x5
	sts _time,R2
	.dbline 23
	std y+0,R2
	ldi R18,1
	ldi R16,2
	xcall _lcd_write2
	.dbline 24
	sbi 0x6,6
	.dbline -2
L41:
	adiw R28,1
	xcall pop_lset
	.dbline 0 ; func end
	reti
	.dbend
	.dbfunc e main _main fV
	.even
_main::
	.dbline -1
	.dbline 27
	.dbline 27
	cli
	.dbline 28
	xcall _Adc_Init
	.dbline 29
	xcall _Lcd_INT
	.dbline 30
	xcall _lcd_clear
	.dbline 31
	sei
	.dbline -2
L42:
	.dbline 0 ; func end
	ret
	.dbend
	.area bss(ram, con, rel)
	.dbfile H:\bbi项目源程序\AD转换\adc_16\ad.c
_time::
	.blkb 1
	.dbsym e time _time c
_Adc0_Conver::
	.blkb 2
	.dbsym e Adc0_Conver _Adc0_Conver A[2:1]i
_ADtmp::
	.blkb 1
	.dbfile H:\bbi项目源程序\AD转换\adc_16/lcd.h
	.dbsym e ADtmp _ADtmp c

⌨️ 快捷键说明

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