📄 1302.lst
字号:
__start:
__text_start:
0018 E5CF LDI R28,0x5F
0019 E0D2 LDI R29,2
001A BFCD OUT 0x3D,R28
001B BFDE OUT 0x3E,R29
001C 51C0 SUBI R28,0x10
001D 40D0 SBCI R29,0
001E EA0A LDI R16,0xAA
001F 8308 STD Y+0,R16
0020 2400 CLR R0
0021 E6EE LDI R30,0x6E
0022 E0F0 LDI R31,0
0023 E010 LDI R17,0
0024 38E0 CPI R30,0x80
0025 07F1 CPC R31,R17
0026 F011 BEQ 0x0029
0027 9201 ST R0,Z+
0028 CFFB RJMP 0x0024
0029 8300 STD Z+0,R16
002A E2E2 LDI R30,0x22
002B E0F0 LDI R31,0
002C E6A0 LDI R26,0x60
002D E0B0 LDI R27,0
002E E010 LDI R17,0
002F 33E0 CPI R30,0x30
0030 07F1 CPC R31,R17
0031 F021 BEQ 0x0036
0032 95C8 LPM
0033 9631 ADIW R30,1
0034 920D ST R0,X+
0035 CFF9 RJMP 0x002F
0036 D092 RCALL _main
_exit:
0037 CFFF RJMP _exit
_update_display_dp:
byte_counter --> R20
bit_count --> R22
temp_i --> R10
k --> R12
0038 D19E RCALL push_gset4
0039 0168 MOVW R12,R16
FILE: D:\AVR实验\DS1302时间芯片\m4094.c
(0001) /*4094显示模式
(0002) 基于实验板接线方式
(0003) */
(0004) #include "d4094.h"
(0005)
(0006)
(0007) uchar table2[10]={0x81,0xB7,0xC2,0x92,0xB4,0x98,0x88,0xB3,0x80,0x90};
(0008) uchar led_buffer[4]={0,3};
(0009)
(0010) void update_display_dp(uint k)
(0011) {
(0012) uchar bit_count=0;
003A 2766 CLR R22
(0013) uchar byte_counter=0;
003B 2744 CLR R20
(0014) uchar temp_i=0;
003C 24AA CLR R10
(0015)
(0016) led_buffer[0]=k/1000;
003D EE28 LDI R18,0xE8
003E E033 LDI R19,3
003F 0186 MOVW R16,R12
0040 D166 RCALL div16u
0041 9300006A STS led_buffer,R16
(0017) led_buffer[1]=(k%1000)/100;
0043 EE28 LDI R18,0xE8
0044 E033 LDI R19,3
0045 0186 MOVW R16,R12
0046 D15E RCALL mod16u
0047 E624 LDI R18,0x64
0048 E030 LDI R19,0
0049 D15D RCALL div16u
004A 9300006B STS led_buffer+1,R16
(0018) led_buffer[2]=(k%100)/10;
004C E624 LDI R18,0x64
004D E030 LDI R19,0
004E 0186 MOVW R16,R12
004F D155 RCALL mod16u
0050 E02A LDI R18,0xA
0051 E030 LDI R19,0
0052 D154 RCALL div16u
0053 9300006C STS led_buffer+2,R16
(0019) led_buffer[3]=k%10;
0055 E02A LDI R18,0xA
0056 E030 LDI R19,0
0057 0186 MOVW R16,R12
0058 D14C RCALL mod16u
0059 9300006D STS led_buffer+3,R16
(0020)
(0021) CLR_STR_4094;//led_str_off;
005B 98AE CBI 0x15,6
(0022) CLR_CLK_4094;//led_clk_off;
005C 98AD CBI 0x15,5
(0023)
(0024) for(byte_counter=0;byte_counter<4;byte_counter++)
005D C01C RJMP 0x007A
(0025) {
(0026) bit_count=8;
005E E068 LDI R22,0x8
(0027) temp_i=table2[led_buffer[byte_counter]];
005F E68A LDI R24,0x6A
0060 E090 LDI R25,0
0061 2FE4 MOV R30,R20
0062 27FF CLR R31
0063 0FE8 ADD R30,R24
0064 1FF9 ADC R31,R25
0065 81E0 LDD R30,Z+0
0066 27FF CLR R31
0067 E680 LDI R24,0x60
0068 E090 LDI R25,0
0069 0FE8 ADD R30,R24
006A 1FF9 ADC R31,R25
006B 80A0 LDD R10,Z+0
006C C009 RJMP 0x0076
(0028)
(0029) while(bit_count>0)
(0030) {
(0031) if((temp_i&0x01)==0)
006D FCA0 SBRC R10,0
006E C002 RJMP 0x0071
(0032) {
(0033) CLR_DATA_4094;//led_d_off;
006F 98AC CBI 0x15,4
(0034) }
0070 C001 RJMP 0x0072
(0035) else
(0036) {
(0037) SET_DATA_4094;//led_d_on;
0071 9AAC SBI 0x15,4
(0038) }
(0039) temp_i=(temp_i>>1);
0072 94A6 LSR R10
(0040)
(0041)
(0042) SET_CLK_4094;//led_clk_on;
0073 9AAD SBI 0x15,5
(0043)
(0044) CLR_CLK_4094;//led_clk_off;
0074 98AD CBI 0x15,5
(0045)
(0046) bit_count--;
0075 956A DEC R22
0076 2422 CLR R2
0077 1626 CP R2,R22
0078 F3A0 BCS 0x006D
0079 9543 INC R20
007A 3044 CPI R20,4
007B F310 BCS 0x005E
(0047)
(0048) }
(0049)
(0050) }
(0051) SET_STR_4094;
007C 9AAE SBI 0x15,6
007D D155 RCALL pop_gset4
007E 9508 RET
_jisuan:
d --> R20
e --> R22
b_data --> R16
007F D15B RCALL push_gset2
FILE: D:\AVR实验\DS1302时间芯片\main.c
(0001) #include <iom8515v.h>
(0002)
(0003) #include "ds1302.h"
(0004) #include "d4094.h"
(0005)
(0006)
(0007) uint gewei,shiwei;
(0008) uint sec,min,hour,n1,n2,n3,n4;
(0009)
(0010)
(0011) void jisuan(uchar b_data)
(0012) {
(0013) uchar e,d;
(0014) e=b_data;
0080 2F60 MOV R22,R16
(0015) d=e;
0081 2F46 MOV R20,R22
(0016) e=e&0x0f;
0082 706F ANDI R22,0xF
(0017) d=d>>4;
0083 2F84 MOV R24,R20
0084 9582 SWAP R24
0085 708F ANDI R24,0xF
0086 2F48 MOV R20,R24
(0018) gewei=(e&0x01)+((e>>1)&0x01)*2+((e>>2)&0x01)*4+((e>>3)&0x01)*8;
0087 2F86 MOV R24,R22
0088 9586 LSR R24
0089 7081 ANDI R24,1
008A E092 LDI R25,2
008B 9F98 MUL R25,R24
008C 2F86 MOV R24,R22
008D 2799 CLR R25
008E 7081 ANDI R24,1
008F 7090 ANDI R25,0
0090 0D80 ADD R24,R0
0091 1D91 ADC R25,R1
0092 2FE6 MOV R30,R22
0093 95E6 LSR R30
0094 95E6 LSR R30
0095 70E1 ANDI R30,1
0096 E0F4 LDI R31,4
0097 9FFE MUL R31,R30
0098 0D80 ADD R24,R0
0099 1D91 ADC R25,R1
009A 2FE6 MOV R30,R22
009B 95E6 LSR R30
009C 95E6 LSR R30
009D 95E6 LSR R30
009E 70E1 ANDI R30,1
009F E0F8 LDI R31,0x8
00A0 9FFE MUL R31,R30
00A1 0D80 ADD R24,R0
00A2 1D91 ADC R25,R1
00A3 9390007F STS gewei+1,R25
00A5 9380007E STS gewei,R24
(0019) shiwei=(d&0x01)+((d>>1)&0x01)*2+((d>>2)&0x01)*4+((d>>3)&0x01)*8;
00A7 2F84 MOV R24,R20
00A8 9586 LSR R24
00A9 7081 ANDI R24,1
00AA E092 LDI R25,2
00AB 9F98 MUL R25,R24
00AC 2F84 MOV R24,R20
00AD 2799 CLR R25
00AE 7081 ANDI R24,1
00AF 7090 ANDI R25,0
00B0 0D80 ADD R24,R0
00B1 1D91 ADC R25,R1
00B2 2FE4 MOV R30,R20
00B3 95E6 LSR R30
00B4 95E6 LSR R30
00B5 70E1 ANDI R30,1
00B6 E0F4 LDI R31,4
00B7 9FFE MUL R31,R30
00B8 0D80 ADD R24,R0
00B9 1D91 ADC R25,R1
00BA 2FE4 MOV R30,R20
00BB 95E6 LSR R30
00BC 95E6 LSR R30
00BD 95E6 LSR R30
00BE 70E1 ANDI R30,1
00BF E0F8 LDI R31,0x8
00C0 9FFE MUL R31,R30
00C1 0D80 ADD R24,R0
00C2 1D91 ADC R25,R1
00C3 9390007D STS shiwei+1,R25
00C5 9380007C STS shiwei,R24
00C7 D109 RCALL pop_gset2
00C8 9508 RET
(0020)
(0021) }
(0022)
(0023)
(0024)
(0025) void main()
(0026) {
(0027)
(0028) uint num;
(0029) DDRC=0xFF;
_main:
num --> R20
00C9 EF8F LDI R24,0xFF
00CA BB84 OUT 0x14,R24
(0030) PORTC=0xFF;
00CB BB85 OUT 0x15,R24
(0031) WriteSec(0x14);
00CC E104 LDI R16,0x14
00CD E010 LDI R17,0
00CE D073 RCALL _WriteSec
(0032) WriteMin(0x00);
00CF 2700 CLR R16
00D0 2711 CLR R17
00D1 D079 RCALL _WriteMin
(0033) WriteHour(0x00);
00D2 2700 CLR R16
00D3 2711 CLR R17
00D4 D07F RCALL _WriteHour
00D5 C058 RJMP 0x012E
(0034) while(1)
(0035) {
(0036)
(0037) sec= ReadSec();
00D6 D05F RCALL _ReadSec
00D7 9310007B STS sec+1,R17
00D9 9300007A STS sec,R16
(0038) min = ReadMin();
00DB D05E RCALL _ReadMin
00DC 93100079 STS min+1,R17
00DE 93000078 STS min,R16
(0039) hour=ReadHour();
00E0 D05D RCALL _ReadHour
00E1 93100077 STS hour+1,R17
00E3 93000076 STS hour,R16
(0040) jisuan(sec);
00E5 9100007A LDS R16,sec
00E7 DF97 RCALL _jisuan
(0041) n1=gewei;
00E8 9020007E LDS R2,gewei
00EA 9030007F LDS R3,gewei+1
00EC 92300075 STS n1+1,R3
00EE 92200074 STS n1,R2
(0042) n2=shiwei;
00F0 9020007C LDS R2,shiwei
00F2 9030007D LDS R3,shiwei+1
00F4 92300073 STS n2+1,R3
00F6 92200072 STS n2,R2
(0043) jisuan(min);
00F8 91000078 LDS R16,min
00FA DF84 RCALL _jisuan
(0044) n3=gewei;
00FB 9020007E LDS R2,gewei
00FD 9030007F LDS R3,gewei+1
00FF 92300071 STS n3+1,R3
0101 92200070 STS n3,R2
(0045) n4=shiwei;
0103 9020007C LDS R2,shiwei
0105 9030007D LDS R3,shiwei+1
0107 9230006F STS n4+1,R3
0109 9220006E STS n4,R2
(0046) num=n4*1000+n3*100+n2*10+n1;
010B 91200070 LDS R18,n3
010D 91300071 LDS R19,n3+1
010F E604 LDI R16,0x64
0110 E010 LDI R17,0
0111 D0AF RCALL empy16s
0112 0118 MOVW R2,R16
0113 9120006E LDS R18,n4
0115 9130006F LDS R19,n4+1
0117 EE08 LDI R16,0xE8
0118 E013 LDI R17,3
0119 D0A7 RCALL empy16s
011A 01A8 MOVW R20,R16
011B 0D42 ADD R20,R2
011C 1D53 ADC R21,R3
011D 91200072 LDS R18,n2
011F 91300073 LDS R19,n2+1
0121 E00A LDI R16,0xA
0122 E010 LDI R17,0
0123 D09D RCALL empy16s
0124 0F40 ADD R20,R16
0125 1F51 ADC R21,R17
0126 90200074 LDS R2,n1
0128 90300075 LDS R3,n1+1
012A 0D42 ADD R20,R2
012B 1D53 ADC R21,R3
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -