📄 ad.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 + -