📄 hc595.lst
字号:
__start:
__text_start:
0065 EFCF LDI R28,0xFF
0066 E1D0 LDI R29,0x10
0067 BFCD OUT 0x3D,R28
0068 BFDE OUT 0x3E,R29
0069 51C0 SUBI R28,0x10
006A 40D0 SBCI R29,0
006B EA0A LDI R16,0xAA
006C 8308 STD Y+0,R16
006D 2400 CLR R0
006E E0E2 LDI R30,2
006F E0F1 LDI R31,1
0070 E011 LDI R17,1
0071 30E6 CPI R30,6
0072 07F1 CPC R31,R17
0073 F011 BEQ 0x0076
0074 9201 ST R0,Z+
0075 CFFB RJMP 0x0071
0076 8300 STD Z+0,R16
0077 ECE7 LDI R30,0xC7
0078 E0F0 LDI R31,0
0079 E0A0 LDI R26,0
007A E0B1 LDI R27,1
007B E010 LDI R17,0
007C 3CE9 CPI R30,0xC9
007D 07F1 CPC R31,R17
007E F021 BEQ 0x0083
007F 95C8 LPM
0080 9631 ADIW R30,1
0081 920D ST R0,X+
0082 CFF9 RJMP 0x007C
0083 940E0095 CALL _main
_exit:
0085 CFFF RJMP _exit
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\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)
(0012) void EEPROM_write(unsigned int uiAddress,unsigned char ucData)
(0013) {
(0014) while(EECR&(1<<EEWE));
_EEPROM_write:
ucData --> R18
uiAddress --> R16
0086 99E1 SBIC 0x1C,1
0087 CFFE RJMP _EEPROM_write
(0015) EEAR = uiAddress;
0088 BB1F OUT 0x1F,R17
0089 BB0E OUT 0x1E,R16
(0016) EEDR = ucData;
008A BB2D OUT 0x1D,R18
(0017) EECR |=(1<<EEMWE);
008B 9AE2 SBI 0x1C,2
(0018) EECR |=(1<<EEWE);
008C 9AE1 SBI 0x1C,1
008D 9508 RET
(0019) }
(0020)
(0021) unsigned char EEPROM_read(unsigned int uiAddress)
(0022) {
(0023) while(EECR&(1<<EEWE));
_EEPROM_read:
uiAddress --> R16
008E 99E1 SBIC 0x1C,1
008F CFFE RJMP _EEPROM_read
(0024) EEAR = uiAddress;
0090 BB1F OUT 0x1F,R17
0091 BB0E OUT 0x1E,R16
(0025) EECR |=(1<<EERE);
0092 9AE0 SBI 0x1C,0
(0026) return EEDR;
0093 B30D IN R16,0x1D
0094 9508 RET
(0027) }
(0028)
(0029) void main(void)
(0030) {
(0031) unsigned char temp;
(0032) HC_595_init();
_main:
temp --> R20
0095 940E00DB CALL _HC_595_init
(0033)
(0034) temp=EEPROM_read(0x01);
0097 E001 LDI R16,1
0098 E010 LDI R17,0
0099 DFF4 RCALL _EEPROM_read
009A 2F40 MOV R20,R16
(0035) temp++;
009B 9543 INC R20
(0036) EEPROM_write(0x01,temp);
009C 2F24 MOV R18,R20
009D E001 LDI R16,1
009E E010 LDI R17,0
009F DFE6 RCALL _EEPROM_write
00A0 C004 RJMP 0x00A5
(0037)
(0038) while(1)
(0039) {
(0040) Seg7_Led_display(temp);
00A1 2F04 MOV R16,R20
00A2 2711 CLR R17
00A3 940E0173 CALL _Seg7_Led_display
00A5 CFFB RJMP 0x00A1
00A6 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\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:
00A7 0000 NOP
00A8 9508 RET
_delay_nus:
i --> R20
n --> R22
00A9 940E03FD CALL push_gset2
00AB 01B8 MOVW R22,R16
(0013) }
(0014)
(0015) void delay_nus(unsigned int n) //N us延时函数
(0016) {
(0017) unsigned int i=0;
00AC 2744 CLR R20
00AD 2755 CLR R21
(0018) for (i=0;i<n;i++)
00AE C003 RJMP 0x00B2
(0019) delay_1us();
00AF DFF7 RCALL _delay_1us
00B0 5F4F SUBI R20,0xFF
00B1 4F5F SBCI R21,0xFF
00B2 1746 CP R20,R22
00B3 0757 CPC R21,R23
00B4 F3D0 BCS 0x00AF
00B5 940E03F4 CALL pop_gset2
00B7 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
00B8 2700 CLR R16
00B9 2711 CLR R17
00BA C002 RJMP 0x00BD
00BB 5F0F SUBI R16,0xFF
00BC 4F1F SBCI R17,0xFF
00BD 3704 CPI R16,0x74
00BE E0E4 LDI R30,4
00BF 071E CPC R17,R30
00C0 F3D0 BCS 0x00BB
00C1 9508 RET
_delay_nms:
i --> R20
n --> R22
00C2 940E03FD CALL push_gset2
00C4 01B8 MOVW R22,R16
(0026) }
(0027)
(0028) void delay_nms(unsigned int n) //N ms延时函数
(0029) {
(0030) unsigned int i=0;
00C5 2744 CLR R20
00C6 2755 CLR R21
(0031) for (i=0;i<n;i++)
00C7 C003 RJMP 0x00CB
(0032) delay_1ms();
00C8 DFEF RCALL _delay_1ms
00C9 5F4F SUBI R20,0xFF
00CA 4F5F SBCI R21,0xFF
00CB 1746 CP R20,R22
00CC 0757 CPC R21,R23
00CD F3D0 BCS 0x00C8
00CE 940E03F4 CALL pop_gset2
00D0 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\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:
00D1 B387 IN R24,0x17
00D2 6087 ORI R24,7
00D3 BB87 OUT 0x17,R24
(0023) SPCR = (1<<SPE)|(1<<MSTR)|(1<<SPR0)|(1<<SPR1);//使能SPI,主机模式
00D4 E583 LDI R24,0x53
00D5 B98D OUT 0x0D,R24
00D6 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
00D7 B90F OUT 0x0F,R16
(0039) /* 等待传输结束 */
(0040) while(!(SPSR & (1<<SPIF)))
00D8 9B77 SBIS 0x0E,7
00D9 CFFE RJMP 0x00D8
00DA 9508 RET
FILE: D:\avrvi\AVRVi_m128_Starter_Kit\EEPROM_HC595\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:
00DB 9AA7 SBI 0x14,7
(0027) OE_PORT &= (1<<OE);
00DC B385 IN R24,0x15
00DD 7880 ANDI R24,0x80
00DE BB85 OUT 0x15,R24
(0028) PORTB = 0x0F;
00DF E08F LDI R24,0xF
00E0 BB88 OUT 0x18,R24
(0029) spi_init();
00E1 940E00D1 CALL _spi_init
(0030) Seg7_Led_Buf[0]=16;
00E3 E180 LDI R24,0x10
00E4 93800102 STS Seg7_Led_Buf,R24
(0031) Seg7_Led_Buf[1]=16;
00E6 93800103 STS Seg7_Led_Buf+1,R24
(0032) Seg7_Led_Buf[2]=16;
00E8 93800104 STS Seg7_Led_Buf+2,R24
(0033) Seg7_Led_Buf[3]=16;
00EA 93800105 STS Seg7_Led_Buf+3,R24
00EC 9508 RET
_HC_595_OUT:
data --> R20
00ED 940E03FF CALL push_gset1
00EF 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();
00F0 98C0 CBI 0x18,0
(0048) SPI_MasterTransmit(data);
00F1 2F04 MOV R16,R20
00F2 940E00D7 CALL _SPI_MasterTransmit
(0049) SS_H();
00F4 9AC0 SBI 0x18,0
00F5 940E0402 CALL pop_gset1
00F7 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:
00F8 E88C LDI R24,0x8C
00F9 E090 LDI R25,0
00FA 91E00102 LDS R30,Seg7_Led_Buf
00FC 27FF CLR R31
00FD 0FE8 ADD R30,R24
00FE 1FF9 ADC R31,R25
00FF 9104 LPM R16,0(Z)
0100 DFEC RCALL _HC_595_OUT
(0064) Seg7_Bit0_En();
0101 9ABC SBI 0x17,4
0102 9AC4 SBI 0x18,4
(0065) delay_nus(60);
0103 E30C LDI R16,0x3C
0104 E010 LDI R17,0
0105 940E00A9 CALL _delay_nus
(0066) Seg7_Bit0_Dis();
0107 9ABC SBI 0x17,4
0108 98C4 CBI 0x18,4
(0067)
(0068) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[1]]);
0109 E88C LDI R24,0x8C
010A E090 LDI R25,0
010B 91E00103 LDS R30,Seg7_Led_Buf+1
010D 27FF CLR R31
010E 0FE8 ADD R30,R24
010F 1FF9 ADC R31,R25
0110 9104 LPM R16,0(Z)
0111 DFDB RCALL _HC_595_OUT
(0069) if((point==1)&&(point_pos==1))
0112 91800100 LDS R24,point
0114 3081 CPI R24,1
0115 F471 BNE 0x0124
0116 91800101 LDS R24,point_pos
0118 3081 CPI R24,1
0119 F451 BNE 0x0124
(0070) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
011A E88C LDI R24,0x8C
011B E090 LDI R25,0
011C 91E00103 LDS R30,Seg7_Led_Buf+1
011E 27FF CLR R31
011F 0FE8 ADD R30,R24
0120 1FF9 ADC R31,R25
0121 9104 LPM R16,0(Z)
0122 6800 ORI R16,0x80
0123 DFC9 RCALL _HC_595_OUT
(0071) Seg7_Bit1_En();
0124 9ABD SBI 0x17,5
0125 9AC5 SBI 0x18,5
(0072) delay_nus(60);
0126 E30C LDI R16,0x3C
0127 E010 LDI R17,0
0128 940E00A9 CALL _delay_nus
(0073) Seg7_Bit1_Dis();
012A 9ABD SBI 0x17,5
012B 98C5 CBI 0x18,5
(0074)
(0075) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]);
012C E88C LDI R24,0x8C
012D E090 LDI R25,0
012E 91E00104 LDS R30,Seg7_Led_Buf+2
0130 27FF CLR R31
0131 0FE8 ADD R30,R24
0132 1FF9 ADC R31,R25
0133 9104 LPM R16,0(Z)
0134 DFB8 RCALL _HC_595_OUT
(0076) if((point==1)&&(point_pos==2))
0135 91800100 LDS R24,point
0137 3081 CPI R24,1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -