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

📄 hc595.lst

📁 ATMEGA128的EEPROM驱动程序
💻 LST
📖 第 1 页 / 共 4 页
字号:
__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 + -