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

📄 adconv.s

📁 使用mega16单片机进行片上自带的AD转换编程
💻 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 + -