📄 adconv.s
字号:
.module ADCONV.c
.area text(rom, con, rel)
.dbfile D:\单片机编程\iccavr\AD转换\ADCONV.c
.dbfunc e SETB _SETB fV
; k -> R20
.even
_SETB::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 8
; #include <iom16v.h>
; #define CS 0
; #define CLK 1
; #define DIO 2
; #define KEY 3
;
; void SETB(unsigned char k)
; {//这里的PORTB根据自己的程序修改
.dbline 9
; PORTB=PORTB|(1<<k);
ldi R16,1
mov R17,R20
xcall lsl8
in R2,0x18
or R2,R16
out 0x18,R2
.dbline -2
L1:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r k 20 c
.dbend
.dbfunc e CLRS _CLRS fV
; l -> R20
.even
_CLRS::
xcall push_gset1
mov R20,R16
.dbline -1
.dbline 13
; }
;
; void CLRS(unsigned char l)
; {//这里的PORTB根据自己的程序修改
.dbline 14
; PORTB=PORTB&~(1<<l);
ldi R16,1
mov R17,R20
xcall lsl8
mov R2,R16
com R2
in R3,0x18
and R3,R2
out 0x18,R3
.dbline -2
L2:
xcall pop_gset1
.dbline 0 ; func end
ret
.dbsym r l 20 c
.dbend
.dbfunc e Display _Display fV
; DataPos -> y+1
; datanum -> R14
; cToDIO -> R20
; iToDIO -> R10,R11
; num -> y+0
; transdata -> R22,R23
; wait -> R12
; position -> y+14
; Data -> y+12
.even
_Display::
xcall push_arg4
xcall push_gset5
sbiw R28,2
.dbline -1
.dbline 22
; }
;
; //初始化显示时Data=0xA4,position=0xFF
; //Data为显示数据,position为数据显示位置
; //Data为10进制或16进制数,只能一位一位发送
; //position为1-8的数字
; void Display(unsigned char Data,unsigned char position)
; {
.dbline 23
; unsigned char DataPos=~0;
ldi R24,255
std y+1,R24
.dbline 24
; unsigned char num=~0;
std y+0,R24
.dbline 25
; unsigned char wait=~0;
mov R12,R24
.dbline 26
; unsigned char datanum=~0;
.dbline 27
; unsigned int transdata=~0;
ldi R22,-1
ldi R23,-1
.dbline 28
; unsigned int iToDIO=~0;
ldi R24,-1
ldi R25,-1
movw R10,R24
.dbline 29
; unsigned char cToDIO=~0;
ldi R20,255
.dbline 30
; DDRB=0xFF;
out 0x17,R10
.dbline 31
; SETB(KEY);
ldi R16,3
xcall _SETB
.dbline 32
; SETB(CS);
clr R16
xcall _SETB
.dbline 33
; SETB(DIO);
ldi R16,2
xcall _SETB
.dbline 34
; datanum=2;
ldi R24,2
mov R14,R24
.dbline 35
; CLRS(CS);
clr R16
xcall _CLRS
.dbline 36
; if(Data!=0xA4)
ldd R24,y+12
cpi R24,164
brne X1
xjmp L4
X1:
.dbline 37
; {
.dbline 38
; DataPos=0xC8+position-1;
ldd R24,y+14
subi R24,56 ; addi 200
subi R24,1
std y+1,R24
.dbline 39
; transdata=DataPos;
mov R22,R24
clr R23
.dbline 40
; transdata=transdata<<8;
mov R23,R22
clr R22
.dbline 41
; transdata=transdata+Data;
ldd R2,y+12
clr R3
add R22,R2
adc R23,R3
xjmp L7
L6:
.dbline 43
; while(datanum--)
; {
.dbline 44
; wait=25;
ldi R24,25
mov R12,R24
L9:
.dbline 46
.dbline 46
.dbline 46
L10:
.dbline 45
; while(wait--)
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L9
.dbline 47
; {;}
; for(num=0;num<8;num++)
clr R0
std y+0,R0
xjmp L15
L12:
.dbline 48
; {
.dbline 49
; iToDIO=transdata&0x8000;
movw R24,R22
andi R24,0
andi R25,128
movw R10,R24
.dbline 50
; transdata=transdata<<1;
lsl R22
rol R23
.dbline 51
; if(iToDIO==0x0000)
cpi R24,0
cpc R24,R25
brne L16
X0:
.dbline 52
; {
.dbline 53
; CLRS(DIO);
ldi R16,2
xcall _CLRS
.dbline 54
; }
xjmp L17
L16:
.dbline 56
; else
; {
.dbline 57
; SETB(DIO);
ldi R16,2
xcall _SETB
.dbline 58
; }
L17:
.dbline 59
; SETB(CLK);
ldi R16,1
xcall _SETB
.dbline 60
; wait=4;
ldi R24,4
mov R12,R24
L18:
.dbline 62
.dbline 62
.dbline 62
L19:
.dbline 61
; while(wait--)
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L18
.dbline 63
; {;}
; CLRS(CLK);
ldi R16,1
xcall _CLRS
.dbline 64
; wait=4;
ldi R24,4
mov R12,R24
L21:
.dbline 66
.dbline 66
.dbline 66
L22:
.dbline 65
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L21
.dbline 67
L13:
.dbline 47
ldd R0,y+0
inc R0
std y+0,R0
L15:
.dbline 47
ldd R24,y+0
cpi R24,8
brlo L12
.dbline 68
L7:
.dbline 42
mov R2,R14
clr R3
mov R24,R2
subi R24,1
mov R14,R24
tst R2
breq X2
xjmp L6
X2:
.dbline 69
; while(wait--)
; {;}
; }
; }
; }
xjmp L5
L4:
.dbline 71
; else
; {
.dbline 72
; wait=25;
ldi R24,25
mov R12,R24
L24:
.dbline 73
L25:
.dbline 73
; while(wait--);
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L24
.dbline 74
; for(num=0;num<8;num++)
clr R0
std y+0,R0
xjmp L30
L27:
.dbline 75
; {
.dbline 76
; cToDIO=Data&0x80;
ldd R20,y+12
andi R20,128
.dbline 77
; Data=Data<<1;
ldd R2,y+12
lsl R2
std y+12,R2
.dbline 78
; if(cToDIO==0x00)
tst R20
brne L31
.dbline 79
; {
.dbline 80
; CLRS(DIO);
ldi R16,2
xcall _CLRS
.dbline 81
; }
xjmp L32
L31:
.dbline 83
; else
; {
.dbline 84
; SETB(DIO);
ldi R16,2
xcall _SETB
.dbline 85
; }
L32:
.dbline 86
; SETB(CLK);
ldi R16,1
xcall _SETB
.dbline 87
; wait=4;
ldi R24,4
mov R12,R24
L33:
.dbline 88
L34:
.dbline 88
; while(wait--);
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L33
.dbline 89
; CLRS(CLK);
ldi R16,1
xcall _CLRS
.dbline 90
; wait=4;
ldi R24,4
mov R12,R24
L36:
.dbline 91
L37:
.dbline 91
mov R2,R12
clr R3
mov R24,R2
subi R24,1
mov R12,R24
tst R2
brne L36
.dbline 92
L28:
.dbline 74
ldd R0,y+0
inc R0
std y+0,R0
L30:
.dbline 74
ldd R24,y+0
cpi R24,8
brlo L27
.dbline 93
; while(wait--);
; }
; }
L5:
.dbline 94
; SETB(CS);
clr R16
xcall _SETB
.dbline -2
L3:
adiw R28,2
xcall pop_gset5
adiw R28,4
.dbline 0 ; func end
ret
.dbsym l DataPos 1 c
.dbsym r datanum 14 c
.dbsym r cToDIO 20 c
.dbsym r iToDIO 10 i
.dbsym l num 0 c
.dbsym r transdata 22 i
.dbsym r wait 12 c
.dbsym l position 14 c
.dbsym l Data 12 c
.dbend
.dbfunc e ADC_Conv _ADC_Conv fi
; temp1 -> R18,R19
; temp2 -> R16,R17
.even
_ADC_Conv::
.dbline -1
.dbline 98
; }
;
; unsigned int ADC_Conv(void)
; {
.dbline 100
; unsigned int temp1,temp2;
; temp1=(unsigned int)ADCL;
in R18,0x4
clr R19
.dbline 101
; temp2=(unsigned int)ADCH;
in R16,0x5
clr R17
.dbline 102
; temp2=(temp2<<8)+temp1;
movw R2,R16
mov R3,R2
clr R2
add R2,R18
adc R3,R19
movw R16,R2
.dbline 103
; return temp2;
.dbline -2
L39:
.dbline 0 ; func end
ret
.dbsym r temp1 18 i
.dbsym r temp2 16 i
.dbend
.dbfunc e main _main fV
.even
_main::
.dbline -1
.dbline 109
; }
;
; unsigned int count,i;
; unsigned int j;
; void main()
; {
.dbline 110
; ADMUX=0x00;
clr R2
out 0x7,R2
.dbline 111
; ADCSRA=0xE6;
ldi R24,230
out 0x6,R24
.dbline 113
;
; Display(0xA4,0xff);
ldi R18,255
ldi R16,164
xcall _Display
xjmp L42
L41:
.dbline 115
; while(1)
; {
.dbline 116
; count=20000;
ldi R24,20000
ldi R25,78
sts _count+1,R25
sts _count,R24
L44:
.dbline 117
L45:
.dbline 117
; while(count--);
lds R2,_count
lds R3,_count+1
movw R24,R2
sbiw R24,1
sts _count+1,R25
sts _count,R24
tst R2
brne L44
tst R3
brne L44
X3:
.dbline 118
; i=ADC_Conv();
xcall _ADC_Conv
sts _i+1,R17
sts _i,R16
.dbline 119
; for(j=0;j<4;j++)
clr R2
clr R3
sts _j+1,R3
sts _j,R2
xjmp L50
L47:
.dbline 120
; {
.dbline 121
; Display(i%10,j+1);
lds R18,_j
subi R18,255 ; offset = 1
sbci R19,255
ldi R24,10
ldi R25,0
lds R16,_i
lds R17,_i+1
push R18
push R19
movw R18,R24
xcall mod16u
pop R19
pop R18
xcall _Display
.dbline 122
; if(i!=0)
lds R2,_i
lds R3,_i+1
tst R2
brne X4
tst R3
breq L51
X4:
.dbline 123
; {
.dbline 124
; i=i/10;
ldi R18,10
ldi R19,0
lds R16,_i
lds R17,_i+1
xcall div16u
sts _i+1,R17
sts _i,R16
.dbline 125
; }
L51:
.dbline 126
L48:
.dbline 119
lds R24,_j
lds R25,_j+1
adiw R24,1
sts _j+1,R25
sts _j,R24
L50:
.dbline 119
lds R24,_j
lds R25,_j+1
cpi R24,4
ldi R30,0
cpc R25,R30
brlo L47
.dbline 127
L42:
.dbline 114
xjmp L41
X5:
.dbline -2
L40:
.dbline 0 ; func end
ret
.dbend
.area bss(ram, con, rel)
.dbfile D:\单片机编程\iccavr\AD转换\ADCONV.c
_j::
.blkb 2
.dbsym e j _j i
_i::
.blkb 2
.dbsym e i _i i
_count::
.blkb 2
.dbsym e count _count i
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -