📄 eeprom开机记忆存储实验.lst
字号:
__text_start:
__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 940E03B7 CALL _main
_exit:
0085 CFFF RJMP _exit
FILE: H:\MEGA128开发板\TS8900-M128\EEPROM开机记忆存储实验\EEPROM开机记忆存储实验\delay.c
(0001) /************************************************
(0002) 文件:delay.c
(0003) 用途:延时函数
(0004) 注意:系统时钟8M
(0005) ************************************************/
(0006)
(0007) void delay_1us(void) //1us延时函数
(0008) {
(0009) asm("nop");
_delay_1us:
0086 0000 NOP
0087 9508 RET
_delay_nus:
i --> R20
n --> R22
0088 940E03FD CALL push_gset2
008A 01B8 MOVW R22,R16
(0010) }
(0011)
(0012) void delay_nus(unsigned int n) //N us延时函数
(0013) {
(0014) unsigned int i=0;
008B 2744 CLR R20
008C 2755 CLR R21
(0015) for (i=0;i<n;i++)
008D C003 RJMP 0x0091
(0016) delay_1us();
008E DFF7 RCALL _delay_1us
008F 5F4F SUBI R20,0xFF
0090 4F5F SBCI R21,0xFF
0091 1746 CP R20,R22
0092 0757 CPC R21,R23
0093 F3D0 BCS 0x008E
0094 940E03F4 CALL pop_gset2
0096 9508 RET
(0017) }
(0018)
(0019) void delay_1ms(void) //1ms延时函数
(0020) {
(0021) unsigned int i;
(0022) for (i=0;i<1140;i++);
_delay_1ms:
i --> R16
0097 2700 CLR R16
0098 2711 CLR R17
0099 C002 RJMP 0x009C
009A 5F0F SUBI R16,0xFF
009B 4F1F SBCI R17,0xFF
009C 3704 CPI R16,0x74
009D E0E4 LDI R30,4
009E 071E CPC R17,R30
009F F3D0 BCS 0x009A
00A0 9508 RET
_delay_nms:
i --> R20
n --> R22
00A1 940E03FD CALL push_gset2
00A3 01B8 MOVW R22,R16
(0023) }
(0024)
(0025) void delay_nms(unsigned int n) //N ms延时函数
(0026) {
(0027) unsigned int i=0;
00A4 2744 CLR R20
00A5 2755 CLR R21
(0028) for (i=0;i<n;i++)
00A6 C003 RJMP 0x00AA
(0029) delay_1ms();
00A7 DFEF RCALL _delay_1ms
00A8 5F4F SUBI R20,0xFF
00A9 4F5F SBCI R21,0xFF
00AA 1746 CP R20,R22
00AB 0757 CPC R21,R23
00AC F3D0 BCS 0x00A7
00AD 940E03F4 CALL pop_gset2
00AF 9508 RET
FILE: H:\MEGA128开发板\TS8900-M128\EEPROM开机记忆存储实验\EEPROM开机记忆存储实验\hc595.c
(0001) /************************************************
(0002) 文件:hc595.c
(0003) 用途:
(0004) 注意:内部8M晶振
(0005) ************************************************/
(0006) #include "config.h"
(0007) const unsigned char Seg7_Data[]={0x3F,0x06,0x5B,0x4F,0x66, //0,1,2,3,4
(0008) 0x6D,0x7D,0x07,0x7F,0x6F, //5,6,7,8,9
(0009) 0x77,0x7C,0x39,0x5E,0x79,0x71,0x00}; //a,b,c,d,e,f
(0010) volatile unsigned char Seg7_Led_Buf[4],point=0,point_pos=0;//point是小数点标志1代表有小数点point_pos表示小数点位置
(0011) /*************************************************************************
(0012) ** 函数名称:HC595初始化
(0013) ** 功能描述:
(0014) ** 输 入:
(0015) ** 输出 :
(0016) ** 全局变量:
(0017) ** 调用模块:
(0018) ** 说明:
(0019) ** 注意:
(0020) **************************************************************************/
(0021) void HC_595_init(void)
(0022) {
(0023) OE_DDR |= (1<<OE);
_HC_595_init:
00B0 9AA7 SBI 0x14,7
(0024) OE_PORT &= (1<<OE);
00B1 B385 IN R24,0x15
00B2 7880 ANDI R24,0x80
00B3 BB85 OUT 0x15,R24
(0025) PORTB = 0x0F;
00B4 E08F LDI R24,0xF
00B5 BB88 OUT 0x18,R24
(0026) spi_init();
00B6 940E03C9 CALL _spi_init
(0027) Seg7_Led_Buf[0]=16;
00B8 E180 LDI R24,0x10
00B9 93800102 STS Seg7_Led_Buf,R24
(0028) Seg7_Led_Buf[1]=16;
00BB 93800103 STS Seg7_Led_Buf+1,R24
(0029) Seg7_Led_Buf[2]=16;
00BD 93800104 STS Seg7_Led_Buf+2,R24
(0030) Seg7_Led_Buf[3]=16;
00BF 93800105 STS Seg7_Led_Buf+3,R24
00C1 9508 RET
_HC_595_OUT:
data --> R20
00C2 940E03FF CALL push_gset1
00C4 2F40 MOV R20,R16
(0031) }
(0032) /*************************************************************************
(0033) ** 函数名称:HC595送数据
(0034) ** 功能描述:
(0035) ** 输 入:
(0036) ** 输出 :
(0037) ** 全局变量:
(0038) ** 调用模块:
(0039) ** 说明:
(0040) ** 注意:
(0041) **************************************************************************/
(0042) void HC_595_OUT(unsigned char data)
(0043) {
(0044) SS_L();
00C5 98C0 CBI 0x18,0
(0045) SPI_MasterTransmit(data);
00C6 2F04 MOV R16,R20
00C7 940E03CF CALL _SPI_MasterTransmit
(0046) SS_H();
00C9 9AC0 SBI 0x18,0
00CA 940E0402 CALL pop_gset1
00CC 9508 RET
(0047) }
(0048) /*************************************************************************
(0049) ** 函数名称:HC595刷新显示
(0050) ** 功能描述:
(0051) ** 输 入:
(0052) ** 输出 :
(0053) ** 全局变量:
(0054) ** 调用模块:
(0055) ** 说明:
(0056) ** 注意:
(0057) **************************************************************************/
(0058) void Seg7_Led_Update(void)
(0059) {
(0060) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[0]]);
_Seg7_Led_Update:
00CD E88C LDI R24,0x8C
00CE E090 LDI R25,0
00CF 91E00102 LDS R30,Seg7_Led_Buf
00D1 27FF CLR R31
00D2 0FE8 ADD R30,R24
00D3 1FF9 ADC R31,R25
00D4 9104 LPM R16,0(Z)
00D5 DFEC RCALL _HC_595_OUT
(0061) Seg7_Bit0_En();
00D6 9ABC SBI 0x17,4
00D7 9AC4 SBI 0x18,4
(0062) delay_nus(60);
00D8 E30C LDI R16,0x3C
00D9 E010 LDI R17,0
00DA 940E0088 CALL _delay_nus
(0063) Seg7_Bit0_Dis();
00DC 9ABC SBI 0x17,4
00DD 98C4 CBI 0x18,4
(0064)
(0065) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[1]]);
00DE E88C LDI R24,0x8C
00DF E090 LDI R25,0
00E0 91E00103 LDS R30,Seg7_Led_Buf+1
00E2 27FF CLR R31
00E3 0FE8 ADD R30,R24
00E4 1FF9 ADC R31,R25
00E5 9104 LPM R16,0(Z)
00E6 DFDB RCALL _HC_595_OUT
(0066) if((point==1)&&(point_pos==1))
00E7 91800100 LDS R24,point
00E9 3081 CPI R24,1
00EA F471 BNE 0x00F9
00EB 91800101 LDS R24,point_pos
00ED 3081 CPI R24,1
00EE F451 BNE 0x00F9
(0067) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[1]])|(1<<dp));
00EF E88C LDI R24,0x8C
00F0 E090 LDI R25,0
00F1 91E00103 LDS R30,Seg7_Led_Buf+1
00F3 27FF CLR R31
00F4 0FE8 ADD R30,R24
00F5 1FF9 ADC R31,R25
00F6 9104 LPM R16,0(Z)
00F7 6800 ORI R16,0x80
00F8 DFC9 RCALL _HC_595_OUT
(0068) Seg7_Bit1_En();
00F9 9ABD SBI 0x17,5
00FA 9AC5 SBI 0x18,5
(0069) delay_nus(60);
00FB E30C LDI R16,0x3C
00FC E010 LDI R17,0
00FD 940E0088 CALL _delay_nus
(0070) Seg7_Bit1_Dis();
00FF 9ABD SBI 0x17,5
0100 98C5 CBI 0x18,5
(0071)
(0072) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[2]]);
0101 E88C LDI R24,0x8C
0102 E090 LDI R25,0
0103 91E00104 LDS R30,Seg7_Led_Buf+2
0105 27FF CLR R31
0106 0FE8 ADD R30,R24
0107 1FF9 ADC R31,R25
0108 9104 LPM R16,0(Z)
0109 DFB8 RCALL _HC_595_OUT
(0073) if((point==1)&&(point_pos==2))
010A 91800100 LDS R24,point
010C 3081 CPI R24,1
010D F471 BNE 0x011C
010E 91800101 LDS R24,point_pos
0110 3082 CPI R24,2
0111 F451 BNE 0x011C
(0074) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[2]])|(1<<dp));
0112 E88C LDI R24,0x8C
0113 E090 LDI R25,0
0114 91E00104 LDS R30,Seg7_Led_Buf+2
0116 27FF CLR R31
0117 0FE8 ADD R30,R24
0118 1FF9 ADC R31,R25
0119 9104 LPM R16,0(Z)
011A 6800 ORI R16,0x80
011B DFA6 RCALL _HC_595_OUT
(0075) Seg7_Bit2_En();
011C 9ABE SBI 0x17,6
011D 9AC6 SBI 0x18,6
(0076) delay_nus(60);
011E E30C LDI R16,0x3C
011F E010 LDI R17,0
0120 940E0088 CALL _delay_nus
(0077) Seg7_Bit2_Dis();
0122 9ABE SBI 0x17,6
0123 98C6 CBI 0x18,6
(0078)
(0079) HC_595_OUT(Seg7_Data[Seg7_Led_Buf[3]]);
0124 E88C LDI R24,0x8C
0125 E090 LDI R25,0
0126 91E00105 LDS R30,Seg7_Led_Buf+3
0128 27FF CLR R31
0129 0FE8 ADD R30,R24
012A 1FF9 ADC R31,R25
012B 9104 LPM R16,0(Z)
012C DF95 RCALL _HC_595_OUT
(0080) if((point==1)&&(point_pos==3))
012D 91800100 LDS R24,point
012F 3081 CPI R24,1
0130 F471 BNE 0x013F
0131 91800101 LDS R24,point_pos
0133 3083 CPI R24,3
0134 F451 BNE 0x013F
(0081) HC_595_OUT((Seg7_Data[Seg7_Led_Buf[3]])|(1<<dp));
0135 E88C LDI R24,0x8C
0136 E090 LDI R25,0
0137 91E00105 LDS R30,Seg7_Led_Buf+3
0139 27FF CLR R31
013A 0FE8 ADD R30,R24
013B 1FF9 ADC R31,R25
013C 9104 LPM R16,0(Z)
013D 6800 ORI R16,0x80
013E DF83 RCALL _HC_595_OUT
(0082) Seg7_Bit3_En();
013F 9ABF SBI 0x17,7
0140 9AC7 SBI 0x18,7
(0083) delay_nus(60);
0141 E30C LDI R16,0x3C
0142 E010 LDI R17,0
0143 940E0088 CALL _delay_nus
(0084) Seg7_Bit3_Dis();
0145 9ABF SBI 0x17,7
0146 98C7 CBI 0x18,7
0147 9508 RET
_Seg7_Led_display:
data --> R20
0148 940E03FF CALL push_gset1
014A 01A8 MOVW R20,R16
(0085) }
(0086) /*************************************************************************
(0087) ** 函数名称:Hc595显示整形数据
(0088) ** 功能描述:
(0089) ** 输 入:0~9999
(0090) ** 输出 :
(0091) ** 全局变量:
(0092) ** 调用模块:
(0093) ** 说明:
(0094) ** 注意:
(0095) **************************************************************************/
(0096) void Seg7_Led_display(unsigned int data)
(0097) {
(0098) if(data>9999) //错误处理,超出显示范围则全亮
014B E08F LDI R24,0xF
014C E297 LDI R25,0x27
014D 1784 CP R24,R20
014E 0795 CPC R25,R21
014F F430 BCC 0x0156
(0099) {
(0100) HC_595_OUT(0xFF);
0150 EF0F LDI R16,0xFF
0151 DF70 RCALL _HC_595_OUT
(0101) Seg7_Bitselect_PORT|=((1<<Seg7_Bit0)|(1<<Seg7_Bit1)|(1<<Seg7_Bit2)|(1<<Seg7_Bit3));
0152 B388 IN R24,0x18
0153 6F80 ORI R24,0xF0
0154 BB88 OUT 0x18,R24
(0102) }
0155 C07F RJMP 0x01D5
(0103) else if(data>999)
0156 EE87 LDI R24,0xE7
0157 E093 LDI R25,3
0158 1784 CP R24,R20
0159 0795 CPC R25,R21
015A F530 BCC 0x0181
(0104) {
(0105) Seg7_Led_Buf[3]=data/1000;
015B EE28 LDI R18,0xE8
015C E033 LDI R19,3
015D 018A MOVW R16,R20
015E 940E03DA CALL div16u
0160 93000105 STS Seg7_Led_Buf+3,R16
(0106) Seg7_Led_Buf[2]=(data%1000)/100;
0162 EE28 LDI R18,0xE8
0163 E033 LDI R19,3
0164 018A MOVW R16,R20
0165 940E03D8 CALL mod16u
0167 E624 LDI R18,0x64
0168 E030 LDI R19,0
0169 940E03DA CALL div16u
016B 93000104 STS Seg7_Led_Buf+2,R16
(0107) Seg7_Led_Buf[1]=(data%100)/10;
016D E624 LDI R18,0x64
016E E030 LDI R19,0
016F 018A MOVW R16,R20
0170 940E03D8 CALL mod16u
0172 E02A LDI R18,0xA
0173 E030 LDI R19,0
0174 940E03DA CALL div16u
0176 93000103 STS Seg7_Led_Buf+1,R16
(0108) Seg7_Led_Buf[0]=data%10;
0178 E02A LDI R18,0xA
0179 E030 LDI R19,0
017A 018A MOVW R16,R20
017B 940E03D8 CALL mod16u
017D 93000102 STS Seg7_Led_Buf,R16
(0109) Seg7_Led_Update();
017F DF4D RCALL _Seg7_Led_Update
(0110) }
0180 C054 RJMP 0x01D5
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -