📄 adc.s
字号:
.module adc.c
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc/abs.h
.dbfunc e WDT_ON _WDT_ON fV
.even
_WDT_ON::
.dbline -1
.dbline 9
; #include<iom16v.h>
; #include<macros.h>
; #include "abs.h"
;
; /* 七段译码字形表 */
; /*const unsigned char tabel[]={0xc0,0xf9,0xa4,0xb0,0x99,0x92,0x82,0xf8,0x80,0x90,
; 0x88,0x83,0xc6,0xa1,0x86,0x8e};*/
; //放一个串口通讯时自己能看懂的数据简单处理
; const unsigned char tabel[]={0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x10,0x11,0x12,0x13,0x14,0x15};
.dbline 10
; /* 显示缓冲区 */
wdr
.dbline 11
; unsigned int d[]={0,0,0,0,0,0,0,0,0,0,0};
in R24,0x21
ori R24,31
out 0x21,R24
.dbline 12
; void port_init(void)//端口初始化
in R24,0x21
andi R24,239
out 0x21,R24
.dbline -2
L1:
.dbline 0 ; func end
ret
.dbend
.dbfunc e WDT_OFF _WDT_OFF fV
.even
_WDT_OFF::
.dbline -1
.dbline 16
; {
; PORTA = 0x00;DDRA = 0xff; PORTB = 0x00;DDRB = 0x00;
; PORTC = 0x00;DDRC = 0x00; PORTD = 0xff;DDRD = 0x00;
; DDRA =0xff&((~(1<<PA3))|(~(1<<PA6)) );
.dbline 17
; }
wdr
.dbline 18
; void display()
in R24,0x21
ori R24,24
out 0x21,R24
.dbline 19
; {
clr R2
out 0x21,R2
.dbline -2
L2:
.dbline 0 ; func end
ret
.dbend
.dbfunc e delay_1ms _delay_1ms fV
; i -> R16,R17
.even
_delay_1ms::
.dbline -1
.dbline 22
; USART_Transmit8(tabel[d[3]]); //送数据
; delay_nms(10);
; USART_Transmit8(tabel[d[2]]);
.dbline 24
; delay_nms(10);
; USART_Transmit8(tabel[d[1]]);
clr R16
clr R17
xjmp L7
L4:
.dbline 25
wdr
L5:
.dbline 24
subi R16,255 ; offset = 1
sbci R17,255
L7:
.dbline 24
cpi R16,150
ldi R30,0
cpc R17,R30
brlo L4
.dbline -2
L3:
.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 29
; delay_nms(10);
; USART_Transmit8(tabel[d[0]]);
; delay_nms(10);
; }
;
.dbline 31
; unsigned int ad_con;//存放PA0的AD转换结果
; /* 将AD结果转换成电压 */
clr R20
clr R21
xjmp L12
L9:
.dbline 32
.dbline 33
xcall _delay_1ms
.dbline 34
L10:
.dbline 31
subi R20,255 ; offset = 1
sbci R21,255
L12:
.dbline 31
cp R20,R22
cpc R21,R23
brlo L9
.dbline 35
; #define vref 502
; void adctovol(unsigned int adc)
; {
; unsigned int temp;
wdr
.dbline -2
L8:
xcall pop_gset2
.dbline 0 ; func end
ret
.dbsym r i 20 i
.dbsym r n 22 i
.dbend
.dbfunc e LED_Wait_ISP _LED_Wait_ISP fV
.even
_LED_Wait_ISP::
.dbline -1
.dbline 40
; unsigned char i;
; unsigned char *char_p;
; temp=(unsigned int)(((unsigned long)((unsigned long)adc*vref))/1024);
; for(i=0;i<3;i++)
; {
.dbline 41
; d[i]=temp%10;
cbi 0x1b,5
.dbline 41
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 41
sbi 0x1b,5
.dbline 41
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 42
; temp=temp/10;
cbi 0x1b,4
.dbline 42
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 42
sbi 0x1b,4
.dbline 42
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 43
; }
cbi 0x1b,5
.dbline 43
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 43
sbi 0x1b,5
.dbline 43
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 44
; }
cbi 0x1b,4
.dbline 44
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 44
sbi 0x1b,4
.dbline 44
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 45
;
cbi 0x1b,5
.dbline 45
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 45
sbi 0x1b,5
.dbline 45
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 46
; /* AD转换程序 */
cbi 0x1b,4
.dbline 46
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 46
sbi 0x1b,5
.dbline 46
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline -2
L13:
.dbline 0 ; func end
ret
.dbend
.dbfunc e LED_Texting_ISP _LED_Texting_ISP fV
.even
_LED_Texting_ISP::
.dbline -1
.dbline 49
; #pragma interrupt_handler adc_isr:15
; void adc_isr(void)
; {
.dbline 50
; unsigned int temp=0;
cbi 0x1b,4
.dbline 51
; while(temp<6)
cbi 0x1b,5
.dbline 51
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 51
sbi 0x1b,5
.dbline 51
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 52
; temp++;
cbi 0x1b,5
.dbline 52
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 52
sbi 0x1b,5
.dbline 52
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 53
; ad_con=ADC;
cbi 0x1b,5
.dbline 53
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline 53
sbi 0x1b,5
.dbline 53
ldi R16,200
ldi R17,0
xcall _delay_nms
.dbline -2
L14:
.dbline 0 ; func end
ret
.dbend
.dbfunc e USART_InitM1681 _USART_InitM1681 fV
; tmp -> R10,R11
; baud -> R10,R11
.even
_USART_InitM1681::
xcall push_gset3
movw R10,R16
.dbline -1
.dbline 57
; ADCSR|=(1<<ADSC);//启动转换
; }
; //将AD转换结果转换成电压数值
; void main(void)
.dbline 60
; {
; unsigned char i;
; port_init();
movw R2,R10
clr R4
clr R5
ldi R20,0
ldi R21,64
ldi R22,56
ldi R23,0
st -y,R5
st -y,R4
st -y,R3
st -y,R2
movw R16,R20
movw R18,R22
xcall div32s
ldi R20,16
ldi R21,0
ldi R22,0
ldi R23,0
st -y,R23
st -y,R22
st -y,R21
st -y,R20
xcall div32s
movw R2,R16
movw R4,R18
ldi R20,1
ldi R21,0
ldi R22,0
ldi R23,0
sub R2,R20
sbc R3,R21
sbc R4,R22
sbc R5,R23
movw R10,R2
.dbline 61
; WDT_ON();
mov R2,R3
clr R3
out 0x20,R2
.dbline 62
; USART_InitM1681(9600);
out 0x9,R10
.dbline 64
; Red_LedON;Green_LedON;
; delay_nms(500); //延时1秒
ldi R24,24
out 0xa,R24
.dbline 70
; Red_LedOFF; Green_LedOFF;
; USART_Transmit8(2);
; USART_Transmit8(0x0d); //发送一个回车
; USART_Transmit8(0x0a); //发送一个换行
;
; MCUCSR=0;
ldi R24,134
out 0x20,R24
.dbline -2
L15:
xcall pop_gset3
.dbline 0 ; func end
ret
.dbsym r tmp 10 i
.dbsym r baud 10 i
.dbend
.dbfunc e USART_Transmit8 _USART_Transmit8 fV
; data -> R16
.even
_USART_Transmit8::
.dbline -1
.dbline 73
; //ADMUX=0x00;//0通道
; ADMUX=0x03;//3
; // ADMUX=0x06;//6
L17:
.dbline 75
L18:
.dbline 75
; ADCSR=(1<<ADEN)|(1<<ADSC)|(1<<ADIF)|(1<<ADIE)|0x06;
; SEI();
sbis 0xb,5
rjmp L17
.dbline 77
;
; i=0;
out 0xc,R16
L20:
.dbline 78
L21:
.dbline 78
; USART_Transmit_2();//发个Hello
sbis 0xb,5
rjmp L20
.dbline -2
L16:
.dbline 0 ; func end
ret
.dbsym r data 16 c
.dbend
.dbfunc e USART_Transmit_2 _USART_Transmit_2 fV
.even
_USART_Transmit_2::
.dbline -1
.dbline 82
; while(1)
; {
; if((i==127)|(i==0))
; adctovol(ad_con);//降低AD结果刷新速率
L24:
.dbline 83
L25:
.dbline 83
; display(); //使末位闪烁不太明显
sbis 0xb,5
rjmp L24
.dbline 84
; Red_D1glint;delay_nms(500);//红绿灯交替亮灭
ldi R24,72
out 0xc,R24
L27:
.dbline 85
L28:
.dbline 85
; Green_D1glint;delay_nms(500);
sbis 0xb,5
rjmp L27
.dbline 86
; i++;
ldi R24,101
out 0xc,R24
L30:
.dbline 87
L31:
.dbline 87
; }
sbis 0xb,5
rjmp L30
.dbline 88
; }
ldi R24,108
out 0xc,R24
L33:
.dbline 89
L34:
.dbline 89
; }
sbis 0xb,5
rjmp L33
.dbline 90
; }
ldi R24,108
out 0xc,R24
L36:
.dbline 91
L37:
.dbline 91
; }
sbis 0xb,5
rjmp L36
.dbline 92
; }
ldi R24,111
out 0xc,R24
.dbline -2
L23:
.dbline 0 ; func end
ret
.dbend
.area lit(rom, con, rel)
_tabel::
.byte 0,1
.byte 2,3
.byte 4,5
.byte 6,7
.byte 8,9
.byte 16,17
.byte 18,19
.byte 20,21
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.dbsym e tabel _tabel A[16:16]kc
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
_d::
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.blkb 2
.area idata
.word 0
.area data(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.dbsym e d _d A[22:11]i
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.dbfunc e port_init _port_init fV
.even
_port_init::
.dbline -1
.dbline 13
.dbline 14
clr R2
out 0x1b,R2
.dbline 14
ldi R24,255
out 0x1a,R24
.dbline 14
out 0x18,R2
.dbline 14
out 0x17,R2
.dbline 15
out 0x15,R2
.dbline 15
out 0x14,R2
.dbline 15
out 0x12,R24
.dbline 15
out 0x11,R2
.dbline 16
out 0x1a,R24
.dbline -2
L39:
.dbline 0 ; func end
ret
.dbend
.dbfunc e display _display fV
.even
_display::
.dbline -1
.dbline 19
.dbline 20
ldi R24,<_tabel
ldi R25,>_tabel
lds R30,_d+6
lds R31,_d+6+1
add R30,R24
adc R31,R25
lpm R16,Z
xcall _USART_Transmit8
.dbline 21
ldi R16,10
ldi R17,0
xcall _delay_nms
.dbline 22
ldi R24,<_tabel
ldi R25,>_tabel
lds R30,_d+4
lds R31,_d+4+1
add R30,R24
adc R31,R25
lpm R16,Z
xcall _USART_Transmit8
.dbline 23
ldi R16,10
ldi R17,0
xcall _delay_nms
.dbline 24
ldi R24,<_tabel
ldi R25,>_tabel
lds R30,_d+2
lds R31,_d+2+1
add R30,R24
adc R31,R25
lpm R16,Z
xcall _USART_Transmit8
.dbline 25
ldi R16,10
ldi R17,0
xcall _delay_nms
.dbline 26
ldi R24,<_tabel
ldi R25,>_tabel
lds R30,_d
lds R31,_d+1
add R30,R24
adc R31,R25
lpm R16,Z
xcall _USART_Transmit8
.dbline 27
ldi R16,10
ldi R17,0
xcall _delay_nms
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.dbfunc e adctovol _adctovol fV
; char_p -> <dead>
; i -> R10
; temp -> R12,R13
; adc -> R10,R11
.even
_adctovol::
xcall push_gset4
movw R10,R16
.dbline -1
.dbline 34
.dbline 38
movw R2,R10
clr R4
clr R5
ldi R20,246
ldi R21,1
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 R24,10
ldi R25,0
st -y,R24
xcall lsr32
movw R12,R16
.dbline 39
clr R10
xjmp L48
L45:
.dbline 40
.dbline 41
ldi R24,2
mul R24,R10
movw R30,R0
ldi R24,<_d
ldi R25,>_d
add R30,R24
adc R31,R25
ldi R18,10
ldi R19,0
movw R16,R12
xcall mod16u
std z+1,R17
std z+0,R16
.dbline 42
ldi R18,10
ldi R19,0
movw R16,R12
xcall div16u
movw R12,R16
.dbline 43
L46:
.dbline 39
inc R10
L48:
.dbline 39
mov R24,R10
cpi R24,3
brlo L45
.dbline -2
L44:
xcall pop_gset4
.dbline 0 ; func end
ret
.dbsym l char_p 1 pc
.dbsym r i 10 c
.dbsym r temp 12 i
.dbsym r adc 10 i
.dbend
.area vector(rom, abs)
.org 56
jmp _adc_isr
.area text(rom, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
.dbfunc e adc_isr _adc_isr fV
; temp -> R16,R17
.even
_adc_isr::
st -y,R2
st -y,R3
st -y,R16
st -y,R17
st -y,R30
in R2,0x3f
st -y,R2
.dbline -1
.dbline 49
.dbline 50
clr R16
clr R17
xjmp L51
L50:
.dbline 52
subi R16,255 ; offset = 1
sbci R17,255
L51:
.dbline 51
cpi R16,6
ldi R30,0
cpc R17,R30
brlo L50
.dbline 53
in R2,0x4
in R3,0x5
sts _ad_con+1,R3
sts _ad_con,R2
.dbline 54
sbi 0x6,6
.dbline -2
L49:
ld R2,y+
out 0x3f,R2
ld R30,y+
ld R17,y+
ld R16,y+
ld R3,y+
ld R2,y+
.dbline 0 ; func end
reti
.dbsym r temp 16 i
.dbend
.dbfunc e main _main fV
; i -> R20
.even
_main::
.dbline -1
.dbline 58
.dbline 60
xcall _port_init
.dbline 61
xcall _WDT_ON
.dbline 62
ldi R16,9600
ldi R17,37
xcall _USART_InitM1681
.dbline 63
cbi 0x1b,5
.dbline 63
cbi 0x1b,4
.dbline 64
ldi R16,500
ldi R17,1
xcall _delay_nms
.dbline 65
sbi 0x1b,5
.dbline 65
sbi 0x1b,4
.dbline 66
ldi R16,2
xcall _USART_Transmit8
.dbline 67
ldi R16,13
xcall _USART_Transmit8
.dbline 68
ldi R16,10
xcall _USART_Transmit8
.dbline 70
clr R2
out 0x34,R2
.dbline 72
ldi R24,3
out 0x7,R24
.dbline 74
ldi R24,222
out 0x6,R24
.dbline 75
sei
.dbline 77
clr R20
.dbline 78
xcall _USART_Transmit_2
xjmp L55
L54:
.dbline 80
.dbline 81
cpi R20,127
brne L59
ldi R24,1
ldi R25,0
movw R10,R24
xjmp L60
L59:
clr R10
clr R11
L60:
tst R20
brne L61
ldi R22,1
ldi R23,0
xjmp L62
L61:
clr R22
clr R23
L62:
movw R2,R10
or R2,R22
or R3,R23
tst R2
brne X0
tst R3
breq L57
X0:
.dbline 82
lds R16,_ad_con
lds R17,_ad_con+1
xcall _adctovol
L57:
.dbline 83
xcall _display
.dbline 84
.dbline 84
in R2,0x19
clr R3
sbrc R2,5
rjmp L63
.dbline 84
.dbline 84
sbi 0x1b,5
.dbline 84
xjmp L64
L63:
.dbline 84
.dbline 84
cbi 0x1b,5
.dbline 84
L64:
.dbline 84
.dbline 84
.dbline 84
ldi R16,500
ldi R17,1
xcall _delay_nms
.dbline 85
.dbline 85
in R2,0x19
clr R3
sbrc R2,4
rjmp L65
.dbline 85
.dbline 85
sbi 0x1b,4
.dbline 85
xjmp L66
L65:
.dbline 85
.dbline 85
cbi 0x1b,4
.dbline 85
L66:
.dbline 85
.dbline 85
.dbline 85
ldi R16,500
ldi R17,1
xcall _delay_nms
.dbline 86
inc R20
.dbline 87
L55:
.dbline 79
xjmp L54
X1:
.dbline -2
L53:
.dbline 0 ; func end
ret
.dbsym r i 20 c
.dbend
.area bss(ram, con, rel)
.dbfile C:\DOCUME~1\Administrator\桌面\调试成功\adc\adc.c
_ad_con::
.blkb 2
.dbsym e ad_con _ad_con i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -