📄 ac12-2.lst
字号:
__text_start:
__start:
0031 E5CF LDI R28,0x5F
0032 E0D4 LDI R29,4
0033 BFCD OUT 0x3D,R28
0034 BFDE OUT 0x3E,R29
0035 51C0 SUBI R28,0x10
0036 40D0 SBCI R29,0
0037 EA0A LDI R16,0xAA
0038 8308 STD Y+0,R16
0039 2400 CLR R0
003A E6E0 LDI R30,0x60
003B E0F0 LDI R31,0
003C E010 LDI R17,0
003D 36E8 CPI R30,0x68
003E 07F1 CPC R31,R17
003F F011 BEQ 0x0042
0040 9201 ST R0,Z+
0041 CFFB RJMP 0x003D
0042 8300 STD Z+0,R16
0043 E6E2 LDI R30,0x62
0044 E0F0 LDI R31,0
0045 E6A0 LDI R26,0x60
0046 E0B0 LDI R27,0
0047 E010 LDI R17,0
0048 36E2 CPI R30,0x62
0049 07F1 CPC R31,R17
004A F021 BEQ 0x004F
004B 95C8 LPM
004C 9631 ADIW R30,1
004D 920D ST R0,X+
004E CFF9 RJMP 0x0048
004F 940E006F CALL _main
_exit:
0051 CFFF RJMP _exit
FILE: d:\MYDOCU~1\ac12-2\ac12-2.c
(0001) #include <iom16v.h>
(0002) #include<eeprom.h>
(0003) #define uchar unsigned char
(0004) #define uint unsigned int
(0005) uchar const SEG7[10]={0x3f,0x06,0x5b,
(0006) 0x4f,0x66,0x6d,0x7d,0x07,0x7f,0x6f};
(0007) uchar const ACT[4]={0xfe,0xfd,0xfb,0xf7};
(0008) uint key_cnt,cnt;
(0009) uint Wide,Disval;
(0010) #define SINT0 (PIND&0x04)
(0011) #define SINT1 (PIND&0x08)
(0012)
(0013) void port_init(void)
(0014) {
(0015) PORTA = 0xFF;
_port_init:
0052 EF8F LDI R24,0xFF
0053 BB8B OUT 0x1B,R24
(0016) DDRA = 0xFF;
0054 BB8A OUT 0x1A,R24
(0017) PORTB = 0xFF;
0055 BB88 OUT 0x18,R24
(0018) DDRB = 0xFF;
0056 BB87 OUT 0x17,R24
(0019) PORTC = 0xFF;
0057 BB85 OUT 0x15,R24
(0020) DDRC = 0xFF;
0058 BB84 OUT 0x14,R24
(0021) PORTD = 0xFF;
0059 BB82 OUT 0x12,R24
(0022) DDRD = 0x20;
005A E280 LDI R24,0x20
005B BB81 OUT 0x11,R24
005C 9508 RET
(0023) }
(0024) //***************************
(0025) void timer0_init(void)
(0026) {
(0027) TCNT0 = 0x83;
_timer0_init:
005D E883 LDI R24,0x83
005E BF82 OUT 0x32,R24
(0028) TCCR0 = 0x03;
005F E083 LDI R24,3
0060 BF83 OUT 0x33,R24
(0029) TIMSK = 0x01;
0061 E081 LDI R24,1
0062 BF89 OUT 0x39,R24
0063 9508 RET
(0030) }
(0031) //TIMER1 initialize - prescale:8
(0032) // WGM: 0) Normal, TOP=0xFFFF
(0033) // desired value: 1000Hz
(0034) // actual value: 1000.000Hz (0.0%)
(0035) void timer1_init(void)
(0036) {
(0037) TCCR1A = 0x83;
_timer1_init:
0064 E883 LDI R24,0x83
0065 BD8F OUT 0x2F,R24
(0038) TCCR1B = 0x02;
0066 E082 LDI R24,2
0067 BD8E OUT 0x2E,R24
0068 9508 RET
(0039) }
(0040) /*********************************************/
(0041) void init_devices(void)
(0042) {
(0043) port_init();
_init_devices:
0069 DFE8 RCALL _port_init
(0044) timer0_init();
006A DFF2 RCALL _timer0_init
(0045) timer1_init();
006B DFF8 RCALL _timer1_init
(0046) SREG=0x80;
006C E880 LDI R24,0x80
006D BF8F OUT 0x3F,R24
006E 9508 RET
_main:
x --> Y+0
006F 9724 SBIW R28,4
(0047) }
(0048)
(0049) /******************主函数******************/
(0050) void main(void)
(0051) { long x;
(0052) init_devices();
0070 DFF8 RCALL _init_devices
0071 C03F RJMP 0x00B1
(0053) while(1)
(0054) {
(0055) x=(long)Wide;
0072 90200062 LDS R2,Wide
0074 90300063 LDS R3,Wide+1
0076 2444 CLR R4
0077 2455 CLR R5
0078 01FE MOVW R30,R28
0079 8220 STD Z+0,R2
007A 8231 STD Z+1,R3
007B 8242 STD Z+2,R4
007C 8253 STD Z+3,R5
(0056) x=x*5000/1023;
007D 01FE MOVW R30,R28
007E 8020 LDD R2,Z+0
007F 8031 LDD R3,Z+1
0080 8042 LDD R4,Z+2
0081 8053 LDD R5,Z+3
0082 E848 LDI R20,0x88
0083 E153 LDI R21,0x13
0084 E060 LDI R22,0
0085 E070 LDI R23,0
0086 925A ST R5,-Y
0087 924A ST R4,-Y
0088 923A ST R3,-Y
0089 922A ST R2,-Y
008A 018A MOVW R16,R20
008B 019B MOVW R18,R22
008C 940E0223 CALL empy32s
008E EF4F LDI R20,0xFF
008F E053 LDI R21,3
0090 E060 LDI R22,0
0091 E070 LDI R23,0
0092 937A ST R23,-Y
0093 936A ST R22,-Y
0094 935A ST R21,-Y
0095 934A ST R20,-Y
0096 940E01B8 CALL div32s
0098 01FE MOVW R30,R28
0099 8300 STD Z+0,R16
009A 8311 STD Z+1,R17
009B 8322 STD Z+2,R18
009C 8333 STD Z+3,R19
(0057) Disval=(uint)x;
009D 01FE MOVW R30,R28
009E 8020 LDD R2,Z+0
009F 8031 LDD R3,Z+1
00A0 92300061 STS Disval+1,R3
00A2 92200060 STS Disval,R2
(0058) OCR1AH=(uchar)(Wide>>8);
00A4 90200062 LDS R2,Wide
00A6 90300063 LDS R3,Wide+1
00A8 2C23 MOV R2,R3
00A9 2433 CLR R3
00AA BC2B OUT 0x2B,R2
(0059) OCR1AL=(uchar)(Wide&0x00ff);
00AB 91800062 LDS R24,Wide
00AD 91900063 LDS R25,Wide+1
00AF 7090 ANDI R25,0
00B0 BD8A OUT 0x2A,R24
00B1 CFC0 RJMP 0x0072
00B2 9624 ADIW R28,4
00B3 9508 RET
_timer0_ovf_isr:
00B4 922A ST R2,-Y
00B5 923A ST R3,-Y
00B6 930A ST R16,-Y
00B7 931A ST R17,-Y
00B8 932A ST R18,-Y
00B9 933A ST R19,-Y
00BA 938A ST R24,-Y
00BB 939A ST R25,-Y
00BC 93EA ST R30,-Y
00BD 93FA ST R31,-Y
00BE B62F IN R2,0x3F
00BF 922A ST R2,-Y
(0060) }
(0061) }
(0062) //**************T/C0中断服务子函数*************
(0063) #pragma interrupt_handler timer0_ovf_isr:10
(0064) void timer0_ovf_isr(void)
(0065) {
(0066) TCNT0 = 0x83;
00C0 E883 LDI R24,0x83
00C1 BF82 OUT 0x32,R24
(0067) if(++key_cnt>100)key_cnt=0;
00C2 91800066 LDS R24,key_cnt
00C4 91900067 LDS R25,key_cnt+1
00C6 9601 ADIW R24,1
00C7 011C MOVW R2,R24
00C8 92300067 STS key_cnt+1,R3
00CA 92200066 STS key_cnt,R2
00CC E684 LDI R24,0x64
00CD E090 LDI R25,0
00CE 1582 CP R24,R2
00CF 0593 CPC R25,R3
00D0 F430 BCC 0x00D7
00D1 2422 CLR R2
00D2 2433 CLR R3
00D3 92300067 STS key_cnt+1,R3
00D5 92200066 STS key_cnt,R2
(0068) if(++cnt>3)cnt=0;
00D7 91800064 LDS R24,cnt
00D9 91900065 LDS R25,cnt+1
00DB 9601 ADIW R24,1
00DC 011C MOVW R2,R24
00DD 92300065 STS cnt+1,R3
00DF 92200064 STS cnt,R2
00E1 E083 LDI R24,3
00E2 E090 LDI R25,0
00E3 1582 CP R24,R2
00E4 0593 CPC R25,R3
00E5 F430 BCC 0x00EC
00E6 2422 CLR R2
00E7 2433 CLR R3
00E8 92300065 STS cnt+1,R3
00EA 92200064 STS cnt,R2
(0069)
(0070) switch(cnt)
00EC 90200064 LDS R2,cnt
00EE 90300065 LDS R3,cnt+1
00F0 2022 TST R2
00F1 F411 BNE 0x00F4
00F2 2033 TST R3
00F3 F099 BEQ 0x0107
00F4 91800064 LDS R24,cnt
00F6 91900065 LDS R25,cnt+1
00F8 3081 CPI R24,1
00F9 E0E0 LDI R30,0
00FA 079E CPC R25,R30
00FB F0F9 BEQ 0x011B
00FC 3082 CPI R24,2
00FD E0E0 LDI R30,0
00FE 079E CPC R25,R30
00FF F409 BNE 0x0101
0100 C032 RJMP 0x0133
0101 3083 CPI R24,3
0102 E0E0 LDI R30,0
0103 079E CPC R25,R30
0104 F409 BNE 0x0106
0105 C045 RJMP 0x014B
0106 C058 RJMP 0x015F
(0071) {
(0072) case 0:PORTA=SEG7[Disval%10];PORTC=ACT[0];break;
0107 E02A LDI R18,0xA
0108 E030 LDI R19,0
0109 91000060 LDS R16,Disval
010B 91100061 LDS R17,Disval+1
010D 940E0196 CALL mod16u
010F 01F8 MOVW R30,R16
0110 E584 LDI R24,0x54
0111 E090 LDI R25,0
0112 0FE8 ADD R30,R24
0113 1FF9 ADC R31,R25
0114 91E4 LPM R30,0(Z)
0115 BBEB OUT 0x1B,R30
0116 E5EE LDI R30,0x5E
0117 E0F0 LDI R31,0
0118 91E4 LPM R30,0(Z)
0119 BBE5 OUT 0x15,R30
011A C044 RJMP 0x015F
(0073) case 1:PORTA=SEG7[(Disval%100)/10];PORTC=ACT[1];break;
011B E624 LDI R18,0x64
011C E030 LDI R19,0
011D 91000060 LDS R16,Disval
011F 91100061 LDS R17,Disval+1
0121 940E0196 CALL mod16u
0123 E02A LDI R18,0xA
0124 E030 LDI R19,0
0125 940E0198 CALL div16u
0127 01F8 MOVW R30,R16
0128 E584 LDI R24,0x54
0129 E090 LDI R25,0
012A 0FE8 ADD R30,R24
012B 1FF9 ADC R31,R25
012C 91E4 LPM R30,0(Z)
012D BBEB OUT 0x1B,R30
012E E5EF LDI R30,0x5F
012F E0F0 LDI R31,0
0130 91E4 LPM R30,0(Z)
0131 BBE5 OUT 0x15,R30
0132 C02C RJMP 0x015F
(0074) case 2:PORTA=SEG7[(Disval%1000)/100];PORTC=ACT[2];break;
0133 EE28 LDI R18,0xE8
0134 E033 LDI R19,3
0135 91000060 LDS R16,Disval
0137 91100061 LDS R17,Disval+1
0139 940E0196 CALL mod16u
013B E624 LDI R18,0x64
013C E030 LDI R19,0
013D 940E0198 CALL div16u
013F 01F8 MOVW R30,R16
0140 E584 LDI R24,0x54
0141 E090 LDI R25,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -