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

📄 adc.lst

📁 ATMEGA128的ADC驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
__text_start:
__start:
    0069 EFCF      LDI	R28,0xFF
    006A E1D0      LDI	R29,0x10
    006B BFCD      OUT	0x3D,R28
    006C BFDE      OUT	0x3E,R29
    006D 51C0      SUBI	R28,0x10
    006E 40D0      SBCI	R29,0
    006F EA0A      LDI	R16,0xAA
    0070 8308      STD	Y+0,R16
    0071 2400      CLR	R0
    0072 E0E2      LDI	R30,2
    0073 E0F1      LDI	R31,1
    0074 E011      LDI	R17,1
    0075 30EA      CPI	R30,0xA
    0076 07F1      CPC	R31,R17
    0077 F011      BEQ	0x007A
    0078 9201      ST	R0,Z+
    0079 CFFB      RJMP	0x0075
    007A 8300      STD	Z+0,R16
    007B ECEF      LDI	R30,0xCF
    007C E0F0      LDI	R31,0
    007D E0A0      LDI	R26,0
    007E E0B1      LDI	R27,1
    007F E010      LDI	R17,0
    0080 3DE1      CPI	R30,0xD1
    0081 07F1      CPC	R31,R17
    0082 F021      BEQ	0x0087
    0083 95C8      LPM
    0084 9631      ADIW	R30,1
    0085 920D      ST	R0,X+
    0086 CFF9      RJMP	0x0080
    0087 940E00C8  CALL	_main
_exit:
    0089 CFFF      RJMP	_exit
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC\source\main.c
(0001) /************************************************
(0002) 文件:main.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) 创建:2008.4.1
(0006) 修改:2008.4.1
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) #include "config.h"
(0011) float adc_result;
(0012) void adc_init(void)
(0013) {
(0014)  ADCSRA = 0x00; //disable adc
_adc_init:
    008A 2422      CLR	R2
    008B B826      OUT	0x06,R2
(0015)  ADMUX = (1<<REFS0)|(1<<ADLAR);
    008C E680      LDI	R24,0x60
    008D B987      OUT	0x07,R24
(0016)  ACSR = (1<<ACD);
    008E E880      LDI	R24,0x80
    008F B988      OUT	0x08,R24
(0017)  ADCSRA = (1<<ADEN);
    0090 B986      OUT	0x06,R24
    0091 9508      RET
_get_adc:
  value                --> R20
  adc_channel          --> R20
    0092 940E0432  CALL	push_gset1
    0094 01A8      MOVW	R20,R16
(0018) }
(0019) 
(0020) void get_adc(unsigned adc_channel)
(0021) {
(0022)  unsigned char value; 
(0023)  adc_init();
    0095 DFF4      RCALL	_adc_init
(0024)  ADMUX += adc_channel;
    0096 B027      IN	R2,0x07
    0097 2433      CLR	R3
    0098 0E24      ADD	R2,R20
    0099 1E35      ADC	R3,R21
    009A B827      OUT	0x07,R2
(0025)  ADCSRA |= (1<<ADSC);
    009B 9A36      SBI	0x06,6
(0026)  
(0027)  delay_nus(100);
    009C E604      LDI	R16,0x64
    009D E010      LDI	R17,0
    009E 940E00E6  CALL	_delay_nus
(0028)  value=ADCH;
    00A0 B145      IN	R20,0x05
(0029)  adc_result=(value*4.98)/256; 
    00A1 E900      LDI	R16,0x90
    00A2 E010      LDI	R17,0
    00A3 940E0452  CALL	lpm32
    00A5 933A      ST	R19,-Y
    00A6 932A      ST	R18,-Y
    00A7 931A      ST	R17,-Y
    00A8 930A      ST	R16,-Y
    00A9 2F04      MOV	R16,R20
    00AA 2711      CLR	R17
    00AB 940E04AE  CALL	int2fp
    00AD 933A      ST	R19,-Y
    00AE 932A      ST	R18,-Y
    00AF 931A      ST	R17,-Y
    00B0 930A      ST	R16,-Y
    00B1 940E05F7  CALL	empy32fs
    00B3 E80C      LDI	R16,0x8C
    00B4 E010      LDI	R17,0
    00B5 940E0452  CALL	lpm32
    00B7 933A      ST	R19,-Y
    00B8 932A      ST	R18,-Y
    00B9 931A      ST	R17,-Y
    00BA 930A      ST	R16,-Y
    00BB 940E056C  CALL	div32f
    00BD 93100103  STS	adc_result+1,R17
    00BF 93000102  STS	adc_result,R16
    00C1 93300105  STS	adc_result+3,R19
    00C3 93200104  STS	adc_result+2,R18
    00C5 940E0435  CALL	pop_gset1
    00C7 9508      RET
(0030) }
(0031) 
(0032) void main(void)
(0033) { 
(0034)  HC_595_init();
_main:
    00C8 940E010E  CALL	_HC_595_init
    00CA C00D      RJMP	0x00D8
(0035)  
(0036)  while(1)
(0037)  {
(0038)   get_adc(1);
    00CB E001      LDI	R16,1
    00CC E010      LDI	R17,0
    00CD DFC4      RCALL	_get_adc
(0039)   Seg7_Led_float(adc_result);
    00CE 91200104  LDS	R18,adc_result+2
    00D0 91300105  LDS	R19,adc_result+3
    00D2 91000102  LDS	R16,adc_result
    00D4 91100103  LDS	R17,adc_result+1
    00D6 940E0236  CALL	_Seg7_Led_float
    00D8 CFF2      RJMP	0x00CB
    00D9 9508      RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC\source\lib\spi.c
(0001) /************************************************
(0002) 文件:spi.c
(0003) 用途:SPI驱动
(0004) 注意:
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010) /*************************************************************************
(0011) ** 函数名称: spi_init(void)
(0012) ** 功能描述: SPI初始化
(0013) ** 输 入: 
(0014) ** 输出	 : 
(0015) ** 全局变量: 无
(0016) ** 调用模块: 
(0017) ** 说明:
(0018) ** 注意:
(0019) **************************************************************************/
(0020) void spi_init(void)
(0021) {
(0022)  	 DDRB |= (1<<MOSI)|(1<<SCK)|(1<<SS);//设置MOSI,SCK输出
_spi_init:
    00DA B387      IN	R24,0x17
    00DB 6087      ORI	R24,7
    00DC BB87      OUT	0x17,R24
(0023)  	 SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);//使能SPI,主机模式
    00DD E583      LDI	R24,0x53
    00DE B98D      OUT	0x0D,R24
    00DF 9508      RET
(0024) }
(0025) /*************************************************************************
(0026) ** 函数名称: SPI_MasterTransmit(char Data)
(0027) ** 功能描述: SPI主机发送数据
(0028) ** 输 入: Data 需要通过SPI传输的数据
(0029) ** 输出	 : 
(0030) ** 全局变量: 无
(0031) ** 调用模块: 
(0032) ** 说明:
(0033) ** 注意:
(0034) **************************************************************************/
(0035) void SPI_MasterTransmit(char Data)
(0036) {
(0037)  	 /* 启动数据传输 */
(0038)  	 SPDR = Data;
_SPI_MasterTransmit:
  Data                 --> R16
    00E0 B90F      OUT	0x0F,R16
(0039)  	 /* 等待传输结束 */
(0040)  	 while(!(SPSR & (1<<SPIF)))
    00E1 9B77      SBIS	0x0E,7
    00E2 CFFE      RJMP	0x00E1
    00E3 9508      RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC\source\lib\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) 创建:2008.1.25
(0006) 修改:2008.1.25
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) 
(0010) void delay_1us(void)                 //1us延时函数
(0011)   {
(0012)    asm("nop");
_delay_1us:
    00E4 0000      NOP
    00E5 9508      RET
_delay_nus:
  i                    --> R20
  n                    --> R22
    00E6 940E0430  CALL	push_gset2
    00E8 01B8      MOVW	R22,R16
(0013)   }
(0014) 
(0015) void delay_nus(unsigned int n)       //N us延时函数
(0016)   {
(0017)    unsigned int i=0;
    00E9 2744      CLR	R20
    00EA 2755      CLR	R21
(0018)    for (i=0;i<n;i++)
    00EB C003      RJMP	0x00EF
(0019)    delay_1us();
    00EC DFF7      RCALL	_delay_1us
    00ED 5F4F      SUBI	R20,0xFF
    00EE 4F5F      SBCI	R21,0xFF
    00EF 1746      CP	R20,R22
    00F0 0757      CPC	R21,R23
    00F1 F3D0      BCS	0x00EC
    00F2 940E0427  CALL	pop_gset2
    00F4 9508      RET
(0020)   }
(0021)   
(0022) void delay_1ms(void)                 //1ms延时函数
(0023)   {
(0024)    unsigned int i;
(0025)    for (i=0;i<1140;i++);
_delay_1ms:
  i                    --> R16
    00F5 2700      CLR	R16
    00F6 2711      CLR	R17
    00F7 C002      RJMP	0x00FA
    00F8 5F0F      SUBI	R16,0xFF
    00F9 4F1F      SBCI	R17,0xFF
    00FA 3704      CPI	R16,0x74
    00FB E0E4      LDI	R30,4
    00FC 071E      CPC	R17,R30
    00FD F3D0      BCS	0x00F8
    00FE 9508      RET
_delay_nms:
  i                    --> R20
  n                    --> R22
    00FF 940E0430  CALL	push_gset2
    0101 01B8      MOVW	R22,R16
(0026)   }
(0027)   
(0028) void delay_nms(unsigned int n)       //N ms延时函数
(0029)   {
(0030)    unsigned int i=0;
    0102 2744      CLR	R20
    0103 2755      CLR	R21
(0031)    for (i=0;i<n;i++)
    0104 C003      RJMP	0x0108
(0032)    delay_1ms();
    0105 DFEF      RCALL	_delay_1ms
    0106 5F4F      SUBI	R20,0xFF
    0107 4F5F      SBCI	R21,0xFF
    0108 1746      CP	R20,R22
    0109 0757      CPC	R21,R23
    010A F3D0      BCS	0x0105
    010B 940E0427  CALL	pop_gset2
    010D 9508      RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\ADC\source\lib\hc595.c
(0001) /************************************************
(0002) 文件:hc595.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) 创建:2008.4.1
(0006) 修改:2008.4.1
(0007) Copy Right  (c)  www.avrvi.com  AVR与虚拟仪器
(0008) ************************************************/
(0009) #include "..\config.h"
(0010) const unsigned char Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66,             //0,1,2,3,4
(0011)                                  0x6D,0x7D,0x07,0x7F,0x6F,             //5,6,7,8,9
(0012) 						         0x77,0x7C,0x39,0x5E,0x79,0x71,0x00};  //a,b,c,d,e,f
(0013) volatile unsigned char Seg7_Led_Buf[4],point=0,point_pos=0;//point是小数点标志1代表有小数点point_pos表示小数点位置
(0014) /*************************************************************************
(0015) ** 函数名称:HC595初始化
(0016) ** 功能描述:
(0017) ** 输 入:
(0018) ** 输出	 :
(0019) ** 全局变量:
(0020) ** 调用模块:
(0021) ** 说明:
(0022) ** 注意:
(0023) **************************************************************************/
(0024) void HC_595_init(void)
(0025) {
(0026)  OE_DDR |= (1<<OE);
_HC_595_init:
    010E 9AA7      SBI	0x14,7
(0027)  OE_PORT &= (1<<OE);
    010F B385      IN	R24,0x15
    0110 7880      ANDI	R24,0x80
    0111 BB85      OUT	0x15,R24
(0028)  PORTB = 0x0F;
    0112 E08F      LDI	R24,0xF
    0113 BB88      OUT	0x18,R24
(0029)  spi_init();
    0114 940E00DA  CALL	_spi_init
(0030)  Seg7_Led_Buf[0]=16;
    0116 E180      LDI	R24,0x10
    0117 93800106  STS	Seg7_Led_Buf,R24
(0031)  Seg7_Led_Buf[1]=16;
    0119 93800107  STS	Seg7_Led_Buf+1,R24
(0032)  Seg7_Led_Buf[2]=16;
    011B 93800108  STS	Seg7_Led_Buf+2,R24
(0033)  Seg7_Led_Buf[3]=16;
    011D 93800109  STS	Seg7_Led_Buf+3,R24
    011F 9508      RET
_HC_595_OUT:
  data                 --> R20
    0120 940E0432  CALL	push_gset1
    0122 2F40      MOV	R20,R16
(0034) }
(0035) /*************************************************************************
(0036) ** 函数名称:HC595送数据
(0037) ** 功能描述:
(0038) ** 输 入:
(0039) ** 输出	 :
(0040) ** 全局变量:
(0041) ** 调用模块: 
(0042) ** 说明:
(0043) ** 注意:
(0044) **************************************************************************/
(0045) void HC_595_OUT(unsigned char data)
(0046) {
(0047)  	 SS_L();
    0123 98C0      CBI	0x18,0
(0048) 	 SPI_MasterTransmit(data);
    0124 2F04      MOV	R16,R20
    0125 940E00E0  CALL	_SPI_MasterTransmit
(0049)  	 SS_H();
    0127 9AC0      SBI	0x18,0
    0128 940E0435  CALL	pop_gset1
    012A 9508      RET
(0050) }
(0051) /*************************************************************************
(0052) ** 函数名称:HC595刷新显示
(0053) ** 功能描述:
(0054) ** 输 入:
(0055) ** 输出	 :
(0056) ** 全局变量:
(0057) ** 调用模块: 
(0058) ** 说明:
(0059) ** 注意:
(0060) **************************************************************************/
(0061) void Seg7_Led_Update(void)
(0062) {
(0063)  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[0]]); 
_Seg7_Led_Update:
    012B E984      LDI	R24,0x94
    012C E090      LDI	R25,0
    012D 91E00106  LDS	R30,Seg7_Led_Buf
    012F 27FF      CLR	R31
    0130 0FE8      ADD	R30,R24
    0131 1FF9      ADC	R31,R25
    0132 9104      LPM	R16,0(Z)
    0133 DFEC      RCALL	_HC_595_OUT
(0064)  Seg7_Bit0_En(); 
    0134 9ABC      SBI	0x17,4
    0135 9AC4      SBI	0x18,4
(0065)  delay_nus(60); 
    0136 E30C      LDI	R16,0x3C
    0137 E010      LDI	R17,0
    0138 940E00E6  CALL	_delay_nus
(0066)  Seg7_Bit0_Dis();
    013A 9ABC      SBI	0x17,4
    013B 98C4      CBI	0x18,4
(0067)  
(0068)  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[1]]);
    013C E984      LDI	R24,0x94
    013D E090      LDI	R25,0
    013E 91E00107  LDS	R30,Seg7_Led_Buf+1
    0140 27FF      CLR	R31
    0141 0FE8      ADD	R30,R24
    0142 1FF9      ADC	R31,R25
    0143 9104      LPM	R16,0(Z)
    0144 DFDB      RCALL	_HC_595_OUT
(0069)  if((point==1)&&(point_pos==1))
    0145 91800100  LDS	R24,point
    0147 3081      CPI	R24,1
    0148 F471      BNE	0x0157
    0149 91800101  LDS	R24,point_pos
    014B 3081      CPI	R24,1
    014C F451      BNE	0x0157
(0070)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
    014D E984      LDI	R24,0x94
    014E E090      LDI	R25,0
    014F 91E00107  LDS	R30,Seg7_Led_Buf+1
    0151 27FF      CLR	R31
    0152 0FE8      ADD	R30,R24
    0153 1FF9      ADC	R31,R25
    0154 9104      LPM	R16,0(Z)
    0155 6800      ORI	R16,0x80
    0156 DFC9      RCALL	_HC_595_OUT
(0071)  Seg7_Bit1_En();
    0157 9ABD      SBI	0x17,5
    0158 9AC5      SBI	0x18,5
(0072)  delay_nus(60);
    0159 E30C      LDI	R16,0x3C
    015A E010      LDI	R17,0
    015B 940E00E6  CALL	_delay_nus
(0073)  Seg7_Bit1_Dis();
    015D 9ABD      SBI	0x17,5
    015E 98C5      CBI	0x18,5
(0074)  
(0075)  HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]); 
    015F E984      LDI	R24,0x94
    0160 E090      LDI	R25,0
    0161 91E00108  LDS	R30,Seg7_Led_Buf+2
    0163 27FF      CLR	R31
    0164 0FE8      ADD	R30,R24
    0165 1FF9      ADC	R31,R25
    0166 9104      LPM	R16,0(Z)
    0167 DFB8      RCALL	_HC_595_OUT
(0076)  if((point==1)&&(point_pos==2))
    0168 91800100  LDS	R24,point
    016A 3081      CPI	R24,1
    016B F471      BNE	0x017A
    016C 91800101  LDS	R24,point_pos
    016E 3082      CPI	R24,2
    016F F451      BNE	0x017A
(0077)  HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
    0170 E984      LDI	R24,0x94
    0171 E090      LDI	R25,0
    0172 91E00108  LDS	R30,Seg7_Led_Buf+2
    0174 27FF      CLR	R31
    0175 0FE8      ADD	R30,R24
    0176 1FF9      ADC	R31,R25
    0177 9104      LPM	R16,0(Z)
    0178 6800      ORI	R16,0x80
    0179 DFA6      RCALL	_HC_595_OUT

⌨️ 快捷键说明

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