📄 wash.lis
字号:
.module wash.c
.area vector(rom, abs)
.org 60
003C 0C948301 jmp _timer0_100ms_isr
.area text(rom, con, rel)
0000 .dbfile C:\icc\wash\wash.c
0000 .dbfunc e init_devices _init_devices fV
.even
0000 _init_devices::
0000 .dbline -1
0000 .dbline 21
0000 ; // 改:不加上拉,在读时加然后去除
0000 ;
0000 ;
0000 ; //ICC-AVR application builder : 2006-12-30 21:44:52
0000 ; // Target : M128
0000 ; // Crystal: 1.0000Mhz
0000 ;
0000 ; #include <iom128v.h>
0000 ; #include <macros.h>
0000 ; #include "wash.h"
0000 ;
0000 ; int loop_cs, loop_cs0; //Wash times num, First store with cs<3
0000 ; int TimeCount, TimeCount0; //decin Timer(100ms);
0000 ; int k0, k_tim; //Keybrd: k0 old, k_tim:press time
0000 ; int KP; // Keybra value
0000 ; int beep_num, beep_delay, beep_delay0; //Beep Time and delay, num=num*2, if num&1 On
0000 ;
0000 ;
0000 ; //call this routine to initialize all peripherals
0000 ; void init_devices(void)
0000 ; {
0000 .dbline 23
0000 ; //Init var
0000 ; loop_cs=loop_cs0=TimeCount=TimeCount0=k0=k_tim=KP=beep_num=beep_delay=0;
0000 2224 clr R2
0002 3324 clr R3
0004 30920300 sts _beep_delay+1,R3
0008 20920200 sts _beep_delay,R2
000C 30920500 sts _beep_num+1,R3
0010 20920400 sts _beep_num,R2
0014 30920700 sts _KP+1,R3
0018 20920600 sts _KP,R2
001C 30920900 sts _k_tim+1,R3
0020 20920800 sts _k_tim,R2
0024 30920B00 sts _k0+1,R3
0028 20920A00 sts _k0,R2
002C 30920D00 sts _TimeCount0+1,R3
0030 20920C00 sts _TimeCount0,R2
0034 30920F00 sts _TimeCount+1,R3
0038 20920E00 sts _TimeCount,R2
003C 30921100 sts _loop_cs0+1,R3
0040 20921000 sts _loop_cs0,R2
0044 30921300 sts _loop_cs+1,R3
0048 20921200 sts _loop_cs,R2
004C .dbline 25
004C ; //stop errant interrupts until set up
004C ; CLI(); //disable all interrupts
004C F894 cli
004E .dbline 26
004E ; XDIV = 0x00; //xtal divider
004E 2CBE out 0x3c,R2
0050 .dbline 27
0050 ; XMCRA = 0x00; //external memory
0050 20926D00 sts 109,R2
0054 .dbline 28
0054 ; WDTCR=0x18; //Watch Off
0054 88E1 ldi R24,24
0056 81BD out 0x21,R24
0058 .dbline 29
0058 ; WDTCR=0;
0058 21BC out 0x21,R2
005A .dbline 30
005A ; port_init();
005A 0DD0 xcall _port_init
005C .dbline 31
005C ; timer_init();
005C 26D0 xcall _timer_init
005E .dbline 33
005E ;
005E ; MCUCR = 0x00; //No sleep
005E 2224 clr R2
0060 25BE out 0x35,R2
0062 .dbline 34
0062 ; EICRA = 0x00; EICRB = 0x00; EIMSK = 0x00; //extended ext ints
0062 20926A00 sts 106,R2
0066 .dbline 34
0066 2ABE out 0x3a,R2
0068 .dbline 34
0068 29BE out 0x39,R2
006A .dbline 35
006A ; TIMSK = 0x02; // OCIE0timer interrupt sources /???
006A 82E0 ldi R24,2
006C 87BF out 0x37,R24
006E .dbline 36
006E ; ETIMSK = 0x00; //extended timer interrupt sources
006E 20927D00 sts 125,R2
0072 .dbline 37
0072 ; SEI(); //re-enable interrupts
0072 7894 sei
0074 .dbline -2
0074 L1:
0074 .dbline 0 ; func end
0074 0895 ret
0076 .dbend
0076 .dbfunc e port_init _port_init fV
.even
0076 _port_init::
0076 .dbline -1
0076 .dbline 43
0076 ; //all peripherals are now initialized
0076 ; }
0076 ;
0076 ;
0076 ; void port_init(void)
0076 ; {
0076 .dbline 54
0076 ; /***** Port ***************************************************
0076 ; Input:
0076 ; PA[7..5]: In/Out time PA[4..2]:Wait time, PA[1,0]:CiShu
0076 ; PB[2,1,0]: YeMian detect PB[5,4]:SW for Auto
0076 ; PE[5..0]: Select line, to panel switch
0076 ; PF[0] :KeyRight PF[1]:KeyLeft
0076 ; Output:
0076 ; PB[3,6]: Light PB[7]:buzer
0076 ; PC[5..0]:to in SSR PD[5..0]:to OFF SSR
0076 ; **************************************************************/
0076 ; PORTA = 0xFF; DDRA = 0x00; //PINA = 0x0FF;
0076 8FEF ldi R24,255
0078 8BBB out 0x1b,R24
007A .dbline 54
007A 2224 clr R2
007C 2ABA out 0x1a,R2
007E .dbline 55
007E ; PORTB = 0x37; DDRB = 0xC8; //PINB = 7; //PB3+PB6 LIGHT
007E 87E3 ldi R24,55
0080 88BB out 0x18,R24
0082 .dbline 55
0082 88EC ldi R24,200
0084 87BB out 0x17,R24
0086 .dbline 56
0086 ; PORTC = 0x00; DDRC = 0xFF;
0086 25BA out 0x15,R2
0088 .dbline 56
0088 8FEF ldi R24,255
008A 84BB out 0x14,R24
008C .dbline 57
008C ; PORTD = 0x00; DDRD = 0xFF; // Out SSR
008C 22BA out 0x12,R2
008E .dbline 57
008E 81BB out 0x11,R24
0090 .dbline 58
0090 ; PORTE = 0x3F; DDRE = 0x00; //PINE=0x0FF; //Switch for select_SWway
0090 8FE3 ldi R24,63
0092 83B9 out 0x3,R24
0094 .dbline 58
0094 22B8 out 0x2,R2
0096 .dbline 59
0096 ; PORTF = 0x03; DDRF = 0x00; //PING=3; //Keyboard F0 F1
0096 83E0 ldi R24,3
0098 80936200 sts 98,R24
009C .dbline 59
009C 20926100 sts 97,R2
00A0 .dbline 60
00A0 ; PORTG = 0x00; DDRG = 0x00;
00A0 20926500 sts 101,R2
00A4 .dbline 60
00A4 20926400 sts 100,R2
00A8 .dbline -2
00A8 L2:
00A8 .dbline 0 ; func end
00A8 0895 ret
00AA .dbend
00AA .dbfunc e timer_init _timer_init fV
.even
00AA _timer_init::
00AA .dbline -1
00AA .dbline 66
00AA ; }
00AA ;
00AA ; //IntCLK=1MHz
00AA ; // desired value: timer0:10Hz timer2:1KHz
00AA ; void timer_init(void)
00AA ; {
00AA .dbline 68
00AA ; //Setup Timer0, Use 8bit counter
00AA ; TCCR0 = 0x00; //stop
00AA 2224 clr R2
00AC 23BE out 0x33,R2
00AE .dbline 69
00AE ; ASSR = 0x00; //set async mode
00AE 20BE out 0x30,R2
00B0 .dbline 70
00B0 ; TCNT0 = 0x00;
00B0 22BE out 0x32,R2
00B2 .dbline 71
00B2 ; OCR0 = 90; //OCN=f_0/(2*N*f_n)-1 {N=1024 O=46.8}
00B2 8AE5 ldi R24,90
00B4 81BF out 0x31,R24
00B6 .dbline 72
00B6 ; TCCR0 = 0x0f; //0x0f; // start timer: div:1024 mode:OCR
00B6 8FE0 ldi R24,15
00B8 83BF out 0x33,R24
00BA .dbline -2
00BA L3:
00BA .dbline 0 ; func end
00BA 0895 ret
00BC .dbend
00BC .dbfunc e main _main fV
00BC ; x -> R22,R23
.even
00BC _main::
00BC .dbline -1
00BC .dbline 76
00BC ; }
00BC ;
00BC ; void main(void)
00BC ; {
00BC .dbline 78
00BC ; int x;
00BC ; init_devices();
00BC A1DF xcall _init_devices
00BE .dbline 79
00BE ; Light(1);
00BE 01E0 ldi R16,1
00C0 10E0 ldi R17,0
00C2 EED1 xcall _Light
00C4 .dbline 80
00C4 ; Beep(1, 5);
00C4 25E0 ldi R18,5
00C6 30E0 ldi R19,0
00C8 01E0 ldi R16,1
00CA 10E0 ldi R17,0
00CC D7D1 xcall _Beep
00CE 19C1 xjmp L6
00D0 L5:
00D0 .dbline 82
00D0 ;
00D0 ; while (1) {
00D0 .dbline 83
00D0 ; if (loop_cs != 0) {
00D0 20901200 lds R2,_loop_cs
00D4 30901300 lds R3,_loop_cs+1
00D8 2220 tst R2
00DA 19F4 brne X0
00DC 3320 tst R3
00DE 09F4 brne X10
00E0 68C0 xjmp L8
00E2 X10:
00E2 X0:
00E2 .dbline 83
00E2 .dbline 84
00E2 ; if (TimeCount==0) {
00E2 20900E00 lds R2,_TimeCount
00E6 30900F00 lds R3,_TimeCount+1
00EA 2220 tst R2
00EC 09F0 breq X11
00EE 61C0 xjmp L10
00F0 X11:
00F0 3320 tst R3
00F2 09F0 breq X12
00F4 5EC0 xjmp L10
00F6 X12:
00F6 X1:
00F6 .dbline 84
00F6 .dbline 85
00F6 ; switchway = (~PINE) & 0x7e;
00F6 81B1 in R24,0x1
00F8 8095 com R24
00FA 8E77 andi R24,126
00FC 80931400 sts _switchway,R24
0100 .dbline 86
0100 ; loop_cs--;
0100 80911200 lds R24,_loop_cs
0104 90911300 lds R25,_loop_cs+1
0108 0197 sbiw R24,1
010A 90931300 sts _loop_cs+1,R25
010E 80931200 sts _loop_cs,R24
0112 .dbline 87
0112 AC01 movw R20,R24
0114 4370 andi R20,3
0116 5070 andi R21,0
0118 4030 cpi R20,0
011A 4507 cpc R20,R21
011C 81F1 breq L18
011E X2:
011E 4130 cpi R20,1
0120 E0E0 ldi R30,0
0122 5E07 cpc R21,R30
0124 01F1 breq L17
0126 4230 cpi R20,2
0128 E0E0 ldi R30,0
012A 5E07 cpc R21,R30
012C 89F0 breq L16
012E 4330 cpi R20,3
0130 E0E0 ldi R30,0
0132 5E07 cpc R21,R30
0134 09F0 breq L15
0136 3DC0 xjmp L12
0138 X3:
0138 .dbline 87
0138 ; switch (loop_cs & 3) {
0138 L15:
0138 .dbline 89
0138 ; case 3:
0138 ; AddOn;
0138 80911400 lds R24,_switchway
013C 8170 andi R24,1
013E 82BB out 0x12,R24
0140 .dbline 89
0140 .dbline 90
0140 ; TimeCount=ReadPara(0);
0140 0027 clr R16
0142 1127 clr R17
0144 BBD1 xcall _ReadPara
0146 10930F00 sts _TimeCount+1,R17
014A 00930E00 sts _TimeCount,R16
014E .dbline 91
014E ; break;
014E 31C0 xjmp L13
0150 L16:
0150 .dbline 93
0150 ; case 2:
0150 ; AddOff; DecOff;
0150 2224 clr R2
0152 22BA out 0x12,R2
0154 .dbline 93
0154 .dbline 93
0154 22BA out 0x12,R2
0156 .dbline 93
0156 .dbline 94
0156 ; TimeCount=ReadPara(1);
0156 01E0 ldi R16,1
0158 10E0 ldi R17,0
015A B0D1 xcall _ReadPara
015C 10930F00 sts _TimeCount+1,R17
0160 00930E00 sts _TimeCount,R16
0164 .dbline 95
0164 ; break;
0164 26C0 xjmp L13
0166 L17:
0166 .dbline 97
0166 ; case 1:
0166 ; DecOn;
0166 80911400 lds R24,_switchway
016A 8078 andi R24,128
016C 82BB out 0x12,R24
016E .dbline 97
016E .dbline 98
016E ; TimeCount=ReadPara(0);
016E 0027 clr R16
0170 1127 clr R17
0172 A4D1 xcall _ReadPara
0174 10930F00 sts _TimeCount+1,R17
0178 00930E00 sts _TimeCount,R16
017C .dbline 99
017C ; break;
017C 1AC0 xjmp L13
017E L18:
017E .dbline 101
017E ; case 0:
017E ; AddOff; DecOff;
017E 2224 clr R2
0180 22BA out 0x12,R2
0182 .dbline 101
0182 .dbline 101
0182 22BA out 0x12,R2
0184 .dbline 101
0184 .dbline 102
0184 ; TimeCount=ReadPara(3);
0184 03E0 ldi R16,3
0186 10E0 ldi R17,0
0188 99D1 xcall _ReadPara
018A 10930F00 sts _TimeCount+1,R17
018E 00930E00 sts _TimeCount,R16
0192 .dbline 103
0192 ; if (loop_cs==0) {
0192 20901200 lds R2,_loop_cs
0196 30901300 lds R3,_loop_cs+1
019A 2220 tst R2
019C 51F4 brne L13
019E 3320 tst R3
01A0 41F4 brne L13
01A2 X4:
01A2 .dbline 103
01A2 .dbline 104
01A2 ; Beep(10, 10);
01A2 2AE0 ldi R18,10
01A4 30E0 ldi R19,0
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -