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

📄 dac.s

📁 AVR单片机DAC范例程序
💻 S
字号:
	.module DAC.c
	.area text(rom, con, rel)
	.dbfile C:\icc\examples.avr\mypractice\DAC_prj\DAC.c
	.dbfunc e delay _delay fV
;              i -> R20,R21
;              j -> R22,R23
;             ms -> R16,R17
	.even
_delay::
	rcall push_gset2
	.dbline -1
	.dbline 8
; #include <iom16v.h>
; #include <macros.h>
; #define  uchar unsigned char
; #define  uint  unsigned int
; //#include "Skey.c"
; 
; void delay(uint ms)
; {
	.dbline 10
;         uint i,j;
; 	for(i=0;i<ms;i++)
	clr R20
	clr R21
	rjmp L5
L2:
	.dbline 11
; 	   {
	.dbline 12
	clr R22
	clr R23
	rjmp L9
L6:
	.dbline 12
L7:
	.dbline 12
	subi R22,255  ; offset = 1
	sbci R23,255
L9:
	.dbline 12
	cpi R22,117
	ldi R30,4
	cpc R23,R30
	brlo L6
	.dbline 13
L3:
	.dbline 10
	subi R20,255  ; offset = 1
	sbci R21,255
L5:
	.dbline 10
	cp R20,R16
	cpc R21,R17
	brlo L2
	.dbline -2
	.dbline 14
; 	   for(j=0;j<1141;j++);
;        }
; }
L1:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r i 20 i
	.dbsym r j 22 i
	.dbsym r ms 16 i
	.dbend
	.dbfunc e key_press _key_press fc
;              j -> R16
	.even
_key_press::
	.dbline -1
	.dbline 17
; 
; uchar key_press()
; {
	.dbline 19
;     uchar j;
;     DDRD|=0X0F;
	in R24,0x11
	ori R24,15
	out 0x11,R24
	.dbline 20
; 	PORTD|=0X0F;
	in R24,0x12
	ori R24,15
	out 0x12,R24
	.dbline 22
; 	
; 	DDRD&=0XF0;
	in R24,0x11
	andi R24,240
	out 0x11,R24
	.dbline 24
; 	
; 	j=PIND;
	in R16,0x10
	.dbline 25
; 	j=j&0X0F;//00001111
	andi R16,15
	.dbline 26
; 	if(j==0X0F)
	cpi R16,15
	brne L11
	.dbline 27
; 	{
	.dbline 28
; 	  return 0;
	clr R16
	rjmp L10
L11:
	.dbline 31
; 	}
; 	else
; 	{
	.dbline 32
; 	 return 1;
	ldi R16,1
	.dbline -2
L10:
	.dbline 0 ; func end
	ret
	.dbsym r j 16 c
	.dbend
	.dbfunc e key_scan _key_scan fc
;            key -> R20
	.even
_key_scan::
	rcall push_gset2
	.dbline -1
	.dbline 38
; 	}
; 	
; }
; 
; uchar key_scan()
; {
	.dbline 40
;     uchar key;
;     delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 41
; 	if(key_press())
	rcall _key_press
	tst R16
	breq L14
	.dbline 42
; 	{
	.dbline 43
; 	key=PIND;
	in R20,0x10
	.dbline 44
; 	key&=0X0F;
	andi R20,15
	.dbline 45
; 	switch(key)
	mov R22,R20
	clr R23
	cpi R22,7
	ldi R30,0
	cpc R23,R30
	breq L22
	cpi R22,11
	ldi R30,0
	cpc R23,R30
	breq L21
	cpi R22,13
	ldi R30,0
	cpc R23,R30
	breq L20
	cpi R22,14
	ldi R30,0
	cpc R23,R30
	breq L19
	rjmp L16
X0:
	.dbline 46
; 	{
L19:
	.dbline 48
; 	   case 0X0E: 
; 	       key=0;
	clr R20
	.dbline 49
; 		   break;
	rjmp L24
L20:
	.dbline 51
; 	   case 0X0D:
; 	       key=1;
	ldi R20,1
	.dbline 52
; 		   break;
	rjmp L24
L21:
	.dbline 54
; 	   	 case 0X0B: 
; 	       key=2;
	ldi R20,2
	.dbline 55
; 		   break;
	rjmp L24
L22:
	.dbline 57
; 	   case 0X07:
; 	       key=3;
	ldi R20,3
	.dbline 58
; 		   break; 
	rjmp L24
L16:
	.dbline 60
; 	   default:	
; 	       key=0;     	   
	clr R20
	.dbline 61
; 	}
L23:
	.dbline 62
L24:
	.dbline 62
; 	  while(key_press());
	rcall _key_press
	tst R16
	brne L23
	.dbline 63
; 	}
	rjmp L15
L14:
	.dbline 65
; 	else
; 	{
	.dbline 66
; 	  key=0;
	clr R20
	.dbline 67
; 	}
L15:
	.dbline 68
; 	return key;
	mov R16,R20
	.dbline -2
L13:
	rcall pop_gset2
	.dbline 0 ; func end
	ret
	.dbsym r key 20 c
	.dbend
	.dbfunc e spi_init _spi_init fV
	.even
_spi_init::
	.dbline -1
	.dbline 72
; }
; 
; void spi_init()
; {
	.dbline 73
;      DDRB|=0XA0;
	in R24,0x17
	ori R24,160
	out 0x17,R24
	.dbline 74
; 	 DDRA|=BIT(PA1);
	sbi 0x1a,1
	.dbline 75
; 	 SPCR=0X57;
	ldi R24,87
	out 0xd,R24
	.dbline -2
	.dbline 76
; }
L26:
	.dbline 0 ; func end
	ret
	.dbend
	.dbfunc e ad5300 _ad5300 fV
;          temp2 -> R22
;          temp1 -> R20
;         status -> R22
;         daword -> R10
	.even
_ad5300::
	rcall push_gset3
	mov R10,R16
	.dbline -1
	.dbline 78
; void ad5300(uchar daword)
; {
	.dbline 79
;     uchar temp1=0,temp2=0,status;
	clr R20
	.dbline 79
	clr R22
	.dbline 80
;     temp1|=daword<<4;//1101 1001
	mov R24,R10
	andi R24,#0x0F
	swap R24
	or R20,R24
	.dbline 81
;     temp2|=daword>>4;
	mov R24,R10
	swap R24
	andi R24,#0x0F
	or R22,R24
	.dbline 83
; 	
; 	PORTA&=~BIT(PA1);
	cbi 0x1b,1
	.dbline 84
; 	SPSR=0;
	clr R2
	out 0xe,R2
	.dbline 85
; 	SPDR=temp2;
	out 0xf,R22
L28:
	.dbline 87
;     do
; 	{
	.dbline 88
; 	  status=SPSR;
	in R22,0xe
	.dbline 89
L29:
	.dbline 89
; 	}while(!(status&=0X80));
	mov R24,R22
	andi R24,128
	mov R22,R24
	tst R24
	breq L28
	.dbline 91
; 	
; 	delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 92
; 	SPSR=0;
	clr R2
	out 0xe,R2
	.dbline 93
; 	SPDR=temp1;
	out 0xf,R20
L31:
	.dbline 95
; 	do
; 	{
	.dbline 96
; 	  status=SPSR;
	in R22,0xe
	.dbline 97
L32:
	.dbline 97
; 	}while(!(status&=0X80));
	mov R24,R22
	andi R24,128
	mov R22,R24
	tst R24
	breq L31
	.dbline 98
; 	SPSR=0;
	clr R2
	out 0xe,R2
	.dbline 99
; 	delay(10);
	ldi R16,10
	ldi R17,0
	rcall _delay
	.dbline 100
; 	PORTA|=BIT(PA1);
	sbi 0x1b,1
	.dbline -2
	.dbline 101
; } 
L27:
	rcall pop_gset3
	.dbline 0 ; func end
	ret
	.dbsym r temp2 22 c
	.dbsym r temp1 20 c
	.dbsym r status 22 c
	.dbsym r daword 10 c
	.dbend
	.dbfunc e main _main fV
;           data -> R20
;              i -> R10
	.even
_main::
	.dbline -1
	.dbline 103
; void main()
; {
	.dbline 104
;     uchar i,data=128;
	ldi R20,128
	.dbline 105
;     DDRB=0XFF;
	ldi R24,255
	out 0x17,R24
	.dbline 106
; 	spi_init();
	rcall _spi_init
	.dbline 107
; 	ad5300(0);
	clr R16
	rcall _ad5300
	.dbline 108
; 	ad5300(data);
	mov R16,R20
	rcall _ad5300
	rjmp L36
L35:
	.dbline 111
; 	
; 	while(1)
; 	{
	.dbline 112
; 	   if(key_press())
	rcall _key_press
	tst R16
	breq L38
	.dbline 113
; 	   {
	.dbline 114
; 	      i=key_scan();
	rcall _key_scan
	mov R10,R16
	.dbline 115
; 		  switch(i)
	mov R22,R10
	clr R23
	cpi R22,0
	cpc R22,R23
	breq L43
X1:
	cpi R22,1
	ldi R30,0
	cpc R23,R30
	breq L44
	cpi R22,2
	ldi R30,0
	cpc R23,R30
	breq L45
	cpi R22,3
	ldi R30,0
	cpc R23,R30
	breq L46
	rjmp L40
X2:
	.dbline 116
; 		  {
L43:
	.dbline 118
; 		    case 0:
; 			  data=data+16;
	subi R20,240    ; addi 16
	.dbline 119
; 			  break;
	rjmp L41
L44:
	.dbline 121
; 			case 1:
; 			  data=data-16;
	subi R20,16
	.dbline 122
; 			  break;
	rjmp L41
L45:
	.dbline 124
; 			case 2:
; 			  data=0;
	clr R20
	.dbline 125
; 			  break;
	rjmp L41
L46:
	.dbline 127
; 			 case 3:
; 			  data=255;
	ldi R20,255
	.dbline 128
; 			  break;      
L40:
L41:
	.dbline 130
; 		  }
; 		  ad5300(data);
	mov R16,R20
	rcall _ad5300
	.dbline 131
; 	   }
L38:
	.dbline 132
L36:
	.dbline 110
	rjmp L35
X3:
	.dbline -2
	.dbline 133
; 	}
; }
L34:
	.dbline 0 ; func end
	ret
	.dbsym r data 20 c
	.dbsym r i 10 c
	.dbend

⌨️ 快捷键说明

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