📄 adc.lst
字号:
__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 + -