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

📄 dac.lst

📁 单片机开发资料光盘-双龙-686M.zip
💻 LST
📖 第 1 页 / 共 2 页
字号:
(0008) /******************************************/
(0009) //  1、使用ICCAVR的终端调试窗口(Terminal),进行通信调试。
(0010) //  2、对ICCAVR的终端调试窗口进行设置,设置串口为com1或com2,
(0011) //     通信波特率为19200(Tools->Environment Options...)。
(0012) //  3、将PC屏幕光标定位于调试窗口中。
(0013) #include <iom8v.h>
(0014) #define fosc 8000000 //晶振8MHZ
(0015) #define baud 19200	 //波特率
(0016) /*  		字符输出函数 		 */
(0017) void putchar(unsigned char c)
(0018) 	{	 
(0019)      while (!(UCSRA&(1<<UDRE)));
_putchar:
  c                    --> R16
    00E9 9B5D      SBIS	0x0B,5
    00EA CFFE      RJMP	_putchar
(0020) 	 UDR=c;    
    00EB B90C      OUT	0x0C,R16
(0021) 	}
    00EC 9508      RET
(0022) /*  		字符输入函数 		 */	
(0023) unsigned char getchar(void)
(0024)   	{
(0025) 	 while(!(UCSRA& (1<<RXC)));
_getchar:
    00ED 9B5F      SBIS	0x0B,7
    00EE CFFE      RJMP	_getchar
(0026)      return UDR;
    00EF B10C      IN	R16,0x0C
    00F0 9508      RET
_puts:
  s                    --> R20
    00F1 D08F      RCALL	push_gset1
    00F2 01A8      MOVW	R20,R16
(0027) 	}		
(0028) /*			字符串输出函数	   	 */	
(0029) void puts(char *s)
(0030) 	{
    00F3 C005      RJMP	0x00F9
(0031) 	while (*s)
(0032) 		{
(0033) 		putchar(*s);
    00F4 01FA      MOVW	R30,R20
    00F5 8100      LDD	R16,Z+0
    00F6 DFF2      RCALL	_putchar
(0034) 		s++;
    00F7 5F4F      SUBI	R20,0xFF
    00F8 4F5F      SBCI	R21,0xFF
    00F9 01FA      MOVW	R30,R20
    00FA 8020      LDD	R2,Z+0
    00FB 2022      TST	R2
    00FC F7B9      BNE	0x00F4
(0035) 		}	
(0036)     putchar(0x0a);//回车换行
    00FD E00A      LDI	R16,0xA
    00FE DFEA      RCALL	_putchar
(0037) 	putchar(0x0d);
    00FF E00D      LDI	R16,0xD
    0100 DFE8      RCALL	_putchar
(0038) 	}
    0101 D082      RCALL	pop_gset1
    0102 9508      RET
(0039) /*			UART初始化				*/	
(0040) void uart_init(void)
(0041) {
(0042)  UCSRB=(1<<RXEN)|(1<<TXEN);//允许发送和接收
_uart_init:
    0103 E188      LDI	R24,0x18
    0104 B98A      OUT	0x0A,R24
(0043)  UBRRL=(fosc/16/(baud+1))%256;
    0105 E18A      LDI	R24,0x1A
    0106 B989      OUT	0x09,R24
(0044)  UBRRH=(fosc/16/(baud+1))/256;
    0107 2422      CLR	R2
    0108 BC20      OUT	0x20,R2
(0045)  UCSRC=(1<<URSEL)|(1<<UCSZ1)|(1<<UCSZ0);//8位数据+1位STOP位
    0109 E886      LDI	R24,0x86
    010A BD80      OUT	0x20,R24
(0046) }
    010B 9508      RET
FILE: E:\icc\iccavr\mega8\mega8\DAC\adc.c
(0001) /******************************************/
(0002) /*           广州天河双龙电子公司         */
(0003) /*           http://www.sl.com.cn         */
(0004) /*              ADC驱动程序               */ 
(0005) /*           作者:ntzwq@wx88.net          */
(0006) /*              2002年5月11日             */
(0007) /*  目标MCU:MEGA8   晶振:外部(EXT) 8MHZ   */
(0008) /******************************************/
(0009) #include<iom8v.h>
(0010) unsigned int adc_rel;//AD转换结果
(0011) unsigned char adc_mux;//AD通道
(0012) extern unsigned int adc_old;
(0013) /*				微秒级延时程序	  		*/
(0014) void delay_us(int time)
(0015) 	 {     
(0016)   	  do
(0017) 	  	{
(0018) 		 time--;
_delay_us:
  time                 --> R16
    010C 5001      SUBI	R16,1
    010D 4010      SBCI	R17,0
(0019) 		}	
(0020)   	  while (time>1);
    010E E081      LDI	R24,1
    010F E090      LDI	R25,0
    0110 1780      CP	R24,R16
    0111 0791      CPC	R25,R17
    0112 F3CC      BLT	0x010C
(0021) 	 }	  
    0113 9508      RET
_delay_ms:
  time                 --> R20
    0114 D06C      RCALL	push_gset1
    0115 01A8      MOVW	R20,R16
(0022) /*	  		    毫秒级延时程序			*/	 
(0023) void delay_ms(unsigned int time)
(0024) 	 {
    0116 C005      RJMP	0x011C
(0025) 	  while(time!=0)
(0026) 	  	  {		
(0027) 		   delay_us(1000);
    0117 EE08      LDI	R16,0xE8
    0118 E013      LDI	R17,3
    0119 DFF2      RCALL	_delay_us
(0028) 		   time--;
    011A 5041      SUBI	R20,1
    011B 4050      SBCI	R21,0
    011C 3040      CPI	R20,0
    011D 0745      CPC	R20,R21
    011E F7C1      BNE	0x0117
(0029) 		  }
(0030) 	 }		
    011F D064      RCALL	pop_gset1
    0120 9508      RET
(0031) //ADC初始化	 
(0032) void adc_init(void)
(0033) {
(0034)  DDRC=0x00;
_adc_init:
    0121 2422      CLR	R2
    0122 BA24      OUT	0x14,R2
(0035)  PORTC=0x00; 
    0123 BA25      OUT	0x15,R2
(0036)  ADCSRA = 0x00; 
    0124 B826      OUT	0x06,R2
(0037)  ADMUX =(1<<REFS0)|(adc_mux&0x0f);//选择内部AVCC为基准
    0125 91800074  LDS	R24,_adc_mux
    0127 708F      ANDI	R24,0xF
    0128 6480      ORI	R24,0x40
    0129 B987      OUT	0x07,R24
(0038)  ACSR  =(1<<ACD);//关闭模拟比较器
    012A E880      LDI	R24,0x80
    012B B988      OUT	0x08,R24
(0039)  ADCSRA=(1<<ADEN)|(1<<ADSC)|(1<<ADIE)|(1<<ADPS2)|(1<<ADPS1) ;//64分频
    012C EC8E      LDI	R24,0xCE
    012D B986      OUT	0x06,R24
(0040) }
    012E 9508      RET
_adc_isr:
    012F 922A      ST	R2,-Y
    0130 923A      ST	R3,-Y
    0131 930A      ST	R16,-Y
    0132 931A      ST	R17,-Y
    0133 932A      ST	R18,-Y
    0134 933A      ST	R19,-Y
    0135 938A      ST	R24,-Y
    0136 939A      ST	R25,-Y
    0137 93EA      ST	R30,-Y
    0138 B62F      IN	R2,0x3F
    0139 922A      ST	R2,-Y
(0041) //ADC完成中断
(0042) #pragma interrupt_handler adc_isr:iv_ADC     
(0043) void adc_isr(void)
(0044) {
(0045)  static unsigned i;
(0046)  adc_rel+=ADC&0x3ff;
    013A B184      IN	R24,0x04
    013B B195      IN	R25,0x05
    013C 7093      ANDI	R25,3
    013D 90200075  LDS	R2,_adc_rel
    013F 90300076  LDS	R3,_adc_rel+1
    0141 0E28      ADD	R2,R24
    0142 1E39      ADC	R3,R25
    0143 92300076  STS	_adc_rel+1,R3
    0145 92200075  STS	_adc_rel,R2
(0047)  ADMUX=(1<<REFS0)|(adc_mux&0x0f);//选择内部AVCC为基准
    0147 91800074  LDS	R24,_adc_mux
    0149 708F      ANDI	R24,0xF
    014A 6480      ORI	R24,0x40
    014B B987      OUT	0x07,R24
(0048)  ADCSRA|=(1<<ADSC);//启动AD转换
    014C 9A36      SBI	0x06,6
(0049)  if (i<63)
    014D 91800072  LDS	R24,_adc_old+2
    014F 91900073  LDS	R25,_adc_old+3
    0151 338F      CPI	R24,0x3F
    0152 E0E0      LDI	R30,0
    0153 079E      CPC	R25,R30
    0154 F430      BCC	0x015B
(0050)    i++;
    0155 9601      ADIW	R24,1
    0156 93900073  STS	_adc_old+3,R25
    0158 93800072  STS	_adc_old+2,R24
    015A C015      RJMP	0x0170
(0051)  else
(0052)    {
(0053)     adc_old=adc_rel/64;//64点平均滤波
    015B E026      LDI	R18,6
    015C E030      LDI	R19,0
    015D 91000075  LDS	R16,_adc_rel
    015F 91100076  LDS	R17,_adc_rel+1
    0161 D064      RCALL	lsr16
    0162 93100071  STS	_adc_old+1,R17
    0164 93000070  STS	_adc_old,R16
(0054) 	i=0;
    0166 2422      CLR	R2
    0167 2433      CLR	R3
    0168 92300073  STS	_adc_old+3,R3
    016A 92200072  STS	_adc_old+2,R2
(0055) 	adc_rel=0;
    016C 92300076  STS	_adc_rel+1,R3
    016E 92200075  STS	_adc_rel,R2
(0056)    }
(0057) }
    0170 9029      LD	R2,Y+
    0171 BE2F      OUT	0x3F,R2
    0172 91E9      LD	R30,Y+
    0173 9199      LD	R25,Y+
    0174 9189      LD	R24,Y+
    0175 9139      LD	R19,Y+
    0176 9129      LD	R18,Y+
    0177 9119      LD	R17,Y+
    0178 9109      LD	R16,Y+
    0179 9039      LD	R3,Y+
    017A 9029      LD	R2,Y+
    017B 9518      RETI
FILE: E:\icc\iccavr\mega8\mega8\DAC\read_flash.s
(0001) ;unsigned char read_flash(unsigned int add);
(0002) _read_flash::
(0003)         mov r31,r17 
_read_flash:
    017C 2FF1      MOV	R31,R17
(0004) 		mov r30,r16 
    017D 2FE0      MOV	R30,R16
(0005) 		lpm r16,z
    017E 9104      LPM	R16,0(Z)
(0006) 		clr r17
    017F 2711      CLR	R17
(0007) 		ret	
FILE: <library>
    0180 9508      RET
push_gset1:
    0181 935A      ST	R21,-Y
    0182 934A      ST	R20,-Y
    0183 9508      RET
pop_gset1:
    0184 E0E1      LDI	R30,1
pop:
    0185 9149      LD	R20,Y+
    0186 9159      LD	R21,Y+
    0187 FDE0      SBRC	R30,0
    0188 9508      RET
    0189 9169      LD	R22,Y+
    018A 9179      LD	R23,Y+
    018B FDE1      SBRC	R30,1
    018C 9508      RET
    018D 90A9      LD	R10,Y+
    018E 90B9      LD	R11,Y+
    018F FDE2      SBRC	R30,2
    0190 9508      RET
    0191 90C9      LD	R12,Y+
    0192 90D9      LD	R13,Y+
    0193 FDE3      SBRC	R30,3
    0194 9508      RET
    0195 90E9      LD	R14,Y+
    0196 90F9      LD	R15,Y+
    0197 9508      RET
push_lset:
    0198 93FA      ST	R31,-Y
    0199 93EA      ST	R30,-Y
    019A 93BA      ST	R27,-Y
    019B 93AA      ST	R26,-Y
    019C 939A      ST	R25,-Y
    019D 938A      ST	R24,-Y
    019E 933A      ST	R19,-Y
    019F 932A      ST	R18,-Y
    01A0 931A      ST	R17,-Y
    01A1 930A      ST	R16,-Y
    01A2 929A      ST	R9,-Y
    01A3 928A      ST	R8,-Y
    01A4 927A      ST	R7,-Y
    01A5 926A      ST	R6,-Y
    01A6 925A      ST	R5,-Y
    01A7 924A      ST	R4,-Y
    01A8 923A      ST	R3,-Y
    01A9 922A      ST	R2,-Y
    01AA 921A      ST	R1,-Y
    01AB 920A      ST	R0,-Y
    01AC B60F      IN	R0,0x3F
    01AD 920A      ST	R0,-Y
    01AE 9508      RET
pop_lset:
    01AF 9009      LD	R0,Y+
    01B0 BE0F      OUT	0x3F,R0
    01B1 9009      LD	R0,Y+
    01B2 9019      LD	R1,Y+
    01B3 9029      LD	R2,Y+
    01B4 9039      LD	R3,Y+
    01B5 9049      LD	R4,Y+
    01B6 9059      LD	R5,Y+
    01B7 9069      LD	R6,Y+
    01B8 9079      LD	R7,Y+
    01B9 9089      LD	R8,Y+
    01BA 9099      LD	R9,Y+
    01BB 9109      LD	R16,Y+
    01BC 9119      LD	R17,Y+
    01BD 9129      LD	R18,Y+
    01BE 9139      LD	R19,Y+
    01BF 9189      LD	R24,Y+
    01C0 9199      LD	R25,Y+
    01C1 91A9      LD	R26,Y+
    01C2 91B9      LD	R27,Y+
    01C3 91E9      LD	R30,Y+
    01C4 91F9      LD	R31,Y+
    01C5 9508      RET
lsr16:
    01C6 2322      TST	R18
    01C7 F021      BEQ	0x01CC
    01C8 9516      LSR	R17
    01C9 9507      ROR	R16
    01CA 952A      DEC	R18
    01CB CFFA      RJMP	lsr16
    01CC 9508      RET

⌨️ 快捷键说明

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