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

📄 dac.s

📁 ATMEL AVR MEGA8 MCU DAC 驱动控制源代码
💻 S
字号:
	.module dac.c
	.area text(rom, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
	.dbfunc e timer1_init _timer1_init fV
	.even
_timer1_init::
	.dbline -1
	.dbline 14
; //使用内部RC振荡,PB6-G,PB7-DP短路块连接
; //使用INT0/INT1按键改变DAC输出电压大小
; //可以使用ADC0通道测量DAC的输出电压
; //演示了使用PC机对MEGA8开发板进行控制的方法
; #include <iom48v.h>
; #include <macros.h>
; #define osccal 0x9A//内部RC校正常数
; #define Vref   500//参考电压值
; #include"uart.h"
; #include"adc.h"
; unsigned int adc_old;
; //T1初始化程序 
; void timer1_init(void)
; {
	.dbline 15
;  TCCR1B = 0; //stop
	clr R2
	sts 129,R2
	.dbline 16
;  TCNT1H = 0; 
	sts 133,R2
	.dbline 17
;  OCR1A=0;
	clr R3
	sts 136+1,R3
	sts 136,R2
	.dbline 18
;  TCCR1A =(1<<WGM11)|(1<<WGM10)|(1<<COM1A1);
	ldi R24,131
	sts 128,R24
	.dbline 19
;  TCCR1B =(1<<CS10);//(1<<WGM13)|(1<<WGM12)|(1<<CS10); //0x1A //start Timer
	ldi R24,1
	sts 129,R24
	.dbline -2
L1:
	.dbline 0 ; func end
	ret
	.dbend
	.area vector(rom, abs)
	.org 2
	rjmp _int_isr
	.area text(rom, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
	.area vector(rom, abs)
	.org 4
	rjmp _int_isr
	.area text(rom, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
	.dbfunc e int_isr _int_isr fV
;              i -> R20
	.even
_int_isr::
	rcall push_lset
	rcall push_gset1
	.dbline -1
	.dbline 24
; } 
; //两个中断向量使用同一个中断处理函数,实现对INT0/INT1按键的处理
; #pragma interrupt_handler int_isr:2 int_isr:3
; void int_isr(void)
; {
	.dbline 26
;  unsigned char i;
;  delay_ms(10);
	ldi R16,10
	ldi R17,0
	rcall _delay_ms
	.dbline 27
;  i=PIND&0x0c;//键盘消抖动
	in R20,0x9
	andi R20,12
	.dbline 28
;  if(i==0x0c) 
	cpi R20,12
	brne L3
	.dbline 29
;     return;	
	rjmp L2
L3:
	.dbline 31
;  else
;    {
	.dbline 32
;     if (i==0x08)//INT0键按下
	cpi R20,8
	brne L5
	.dbline 33
; 		    {
	.dbline 34
; 			 if(OCR1A<0x3ef)
	lds R24,136
	lds R25,136+1
	cpi R24,239
	ldi R30,3
	cpc R25,R30
	brsh L7
	.dbline 35
; 			    OCR1A+=0x10;//递增
	lds R24,136
	lds R25,136+1
	adiw R24,16
	sts 136+1,R25
	sts 136,R24
	rjmp L8
L7:
	.dbline 37
; 		     else
; 			    OCR1A=0x3ff;		
	ldi R24,1023
	ldi R25,3
	sts 136+1,R25
	sts 136,R24
L8:
	.dbline 38
; 			}
L5:
	.dbline 39
; 	if (i==0x04)//INT1键按下
	cpi R20,4
	brne L14
	.dbline 40
; 		    {
	.dbline 41
; 			 if(OCR1A>0x10)
	ldi R24,16
	ldi R25,0
	lds R2,136
	lds R3,136+1
	cp R24,R2
	cpc R25,R3
	brsh L11
	.dbline 42
; 			    OCR1A-=0x10;//递减
	lds R24,136
	lds R25,136+1
	sbiw R24,16
	sts 136+1,R25
	sts 136,R24
	rjmp L14
L11:
	.dbline 44
; 			 else
; 			    OCR1A=0;	
	clr R2
	clr R3
	sts 136+1,R3
	sts 136,R2
	.dbline 45
; 			}
L13:
	.dbline 47
L14:
	.dbline 46
;     while((PIND&0x0c)!=0x0c)//检查按键释放
	in R24,0x9
	andi R24,12
	cpi R24,12
	brne L13
	.dbline 48
;        ;
; 	} 
	.dbline -2
L2:
	rcall pop_gset1
	rcall pop_lset
	.dbline 0 ; func end
	reti
	.dbsym r i 20 c
	.dbend
	.dbfunc e main _main fV
;           temp -> R22,R23
;              i -> R10
	.even
_main::
	.dbline -1
	.dbline 52
; }
; //MAIN程序
; void main(void)
; {
	.dbline 55
;  unsigned char i;
;  unsigned int temp;
;  DDRB=(1<<PB1);    //置输出比较oc1a为高电平
	ldi R24,2
	out 0x4,R24
	.dbline 56
;  DDRD=0xf0;
	ldi R24,240
	out 0xa,R24
	.dbline 57
;  PORTD=0xff;
	ldi R24,255
	out 0xb,R24
	.dbline 58
;  OSCCAL=osccal;
	ldi R24,154
	sts 102,R24
	.dbline 59
;  adc_mux=0;
	clr R2
	sts _adc_mux,R2
	.dbline 60
;  uart_init();
	rcall _uart_init
	.dbline 61
;  timer1_init();
	rcall _timer1_init
	.dbline 62
;  adc_init();
	rcall _adc_init
	.dbline 64
;  //GICR  = 0xC0;//int0,int1中断使能
;  SEI();
	sei
	.dbline 65
;  EIMSK=3;
	ldi R24,3
	out 0x1d,R24
	.dbline 67
; // EICRA=0;
;  adc_rel=0;
	clr R2
	clr R3
	sts _adc_rel+1,R3
	sts _adc_rel,R2
	.dbline 68
;  puts("广州天河双龙电子公司");
	ldi R16,<L17
	ldi R17,>L17
	rcall _puts
	.dbline 69
;  puts("HTTP://WWW.SL.COM.CN");
	ldi R16,<L18
	ldi R17,>L18
	rcall _puts
	.dbline 70
; puts("MEGA48开发板DAC测试程序");
	ldi R16,<L19
	ldi R17,>L19
	rcall _puts
	rjmp L21
L20:
	.dbline 73
; 
;  while(1)
;     {
	.dbline 74
; 	 i=getchar();
	rcall _getchar
	mov R10,R16
	.dbline 75
; 	 switch (i)
	mov R20,R10
	clr R21
	cpi R20,77
	ldi R30,0
	cpc R21,R30
	brne X2
	rjmp L32
X2:
	cpi R20,79
	ldi R30,0
	cpc R21,R30
	breq L31
	cpi R20,82
	ldi R30,0
	cpc R21,R30
	brne X3
	rjmp L33
X3:
	cpi R20,83
	ldi R30,0
	cpc R21,R30
	breq L26
	cpi R20,84
	ldi R30,0
	cpc R21,R30
	breq L28
	rjmp L23
X0:
	.dbline 76
; 	  {
L26:
	.dbline 78
; 	   case 'S'://MEGA8 DAC程序ID
; 	          {
	.dbline 79
; 			   puts("DAC TEST ver1.0");
	ldi R16,<L27
	ldi R17,>L27
	rcall _puts
	.dbline 80
; 			   break;			   
	rjmp L24
L28:
	.dbline 83
; 			  }
; 	   case 'T'://调节输出电压
; 	          {
	.dbline 84
; 			   temp=getchar();
	rcall _getchar
	mov R22,R16
	clr R23
	.dbline 85
; 			   temp=temp<<8;
	mov R23,R22
	clr R22
	.dbline 86
; 			   temp|=getchar();
	rcall _getchar
	mov R2,R16
	clr R3
	or R22,R2
	or R23,R3
	.dbline 87
; 			   if (temp<0x400)
	cpi R22,0
	ldi R30,4
	cpc R23,R30
	brsh L29
	.dbline 88
; 			   	  OCR1A=temp;
	sts 136+1,R23
	sts 136,R22
	rjmp L24
L29:
	.dbline 90
; 			   else
; 			      OCR1A=0x3ff;	   
	ldi R24,1023
	ldi R25,3
	sts 136+1,R25
	sts 136,R24
	.dbline 91
; 			   break;
	rjmp L24
L31:
	.dbline 94
; 			  }
; 	   case 'O'://读取OCR1A寄存器值
; 	           {
	.dbline 95
; 			    temp=OCR1A;
	lds R22,136
	lds R23,136+1
	.dbline 96
; 				putchar(temp/256);
	movw R16,R22
	mov R16,R17
	clr R17
	rcall _putchar
	.dbline 97
; 				putchar(temp%256);
	mov R16,R22
	andi R17,0
	rcall _putchar
	.dbline 98
; 			    break;
	rjmp L24
L32:
	.dbline 101
; 	           }		  
; 	   case 'M'://设置ADC工作通道
; 	           {
	.dbline 102
; 			    adc_mux=getchar()&0x03;
	rcall _getchar
	mov R24,R16
	andi R24,3
	sts _adc_mux,R24
	.dbline 103
; 				break;
	rjmp L24
L33:
	.dbline 106
; 			   }		  
; 	   case 'R'://读取ADC通道及ADC转换结果
; 	           {			   
	.dbline 107
; 			    putchar(adc_mux);				
	lds R16,_adc_mux
	rcall _putchar
	.dbline 108
; 	            putchar(adc_old/256);
	lds R16,_adc_old
	lds R17,_adc_old+1
	mov R16,R17
	clr R17
	rcall _putchar
	.dbline 109
; 				putchar(adc_old%256);
	lds R16,_adc_old
	andi R17,0
	rcall _putchar
	.dbline 110
; 	           }
	.dbline 111
; 	  }  
L23:
L24:
	.dbline 112
L21:
	.dbline 72
	rjmp L20
X1:
	.dbline -2
L16:
	.dbline 0 ; func end
	ret
	.dbsym r temp 22 i
	.dbsym r i 10 c
	.dbend
	.area bss(ram, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
_adc_old::
	.blkb 2
	.dbsym e adc_old _adc_old i
	.area data(ram, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
L27:
	.blkb 16
	.area idata
	.byte 'D,'A,'C,32,'T,'E,'S,'T,32,'v,'e,'r,49,46,48,0
	.area data(ram, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
L19:
	.blkb 24
	.area idata
	.byte 'M,'E,'G,'A,52,56,191,170,183,162,176,229,'D,'A,'C,178
	.byte 226,202,212,179,204,208,242,0
	.area data(ram, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
L18:
	.blkb 21
	.area idata
	.byte 'H,'T,'T,'P,58,47,47,'W,'W,'W,46,'S,'L,46,'C,'O
	.byte 'M,46,'C,'N,0
	.area data(ram, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c
L17:
	.blkb 21
	.area idata
	.byte 185,227,214,221,204,236,186,211,203,171,193,250,181,231,215,211
	.byte 185,171,203,190,0
	.area data(ram, con, rel)
	.dbfile C:\调试程序\mega48\DAC\dac.c

⌨️ 快捷键说明

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