Помогите разобратся с кодом для PIC12F629
Добавлено: Пн мар 29, 2010 11:23:36
Дизасемблировал прошивку для PIC12f629, начал разбиратся что к чему и уперся в кусок кода , подпрограмма частенько вызывается из других подпрограмм, думал что задержка но изучив понял что ничего не понял.
Может кто свежим взглядом оценит. met1....met3, метки по которым вызывают процедуры эту подпрограмму отличаются константой входа в подпрограмму, тоисть если бы задержка то понятно что разное время задержки, но тут какаято проверка чтоли
met1: 61 003C 00A2 MOVWF 0x22 ; сохраняем содержимое аккумулятора
62 003D 3003 MOVLW 0x3 ; константу в аккумулятор
63 003E 2845 GOTO 0x45
met2: 64 003F 00A2 MOVWF 0x22
65 0040 3001 MOVLW 0x1
66 0041 2845 GOTO 0x45
met3: 67 0042 00A2 MOVWF 0x22
68 0043 3006 MOVLW 0x6
69 0044 2845 GOTO 0x45
70 0045 00A8 MOVWF 0x28 ; начало
71 0046 0823 MOVF 0x23, W ; содержимое аккумулятора в 0х23 содержимое 0х23 в аккумулятор
72 0047 0221 SUBWF 0x21, W ;вычитаем из 0х21 (что туда попадает пока не разобрался)
73 0048 1D03 BTFSS 0x3, 0x2 ;если результат не равен 0 то на 0х4с
74 0049 284C GOTO 0x4c
75 004A 0822 MOVF 0x22, W ; если равен 0
76 004B 0220 SUBWF 0x20, W
77 004C 3004 MOVLW 0x4
78 004D 1803 BTFSC 0x3, 0
79 004E 3001 MOVLW 0x1
80 004F 1903 BTFSC 0x3, 0x2
81 0050 3002 MOVLW 0x2
82 0051 0528 ANDWF 0x28, W
83 0052 1D03 BTFSS 0x3, 0x2
84 0053 30FF MOVLW 0xff
85 0054 2855 GOTO 0x55
86 0055 1383 BCF 0x3, 0x7
87 0056 1303 BCF 0x3, 0x6
88 0057 1283 BCF 0x3, 0x5 ;переключаем в 0 банк
89 0058 0064 CLRWDT
90 0059 0008 RETURN возврат
Может кто свежим взглядом оценит. met1....met3, метки по которым вызывают процедуры эту подпрограмму отличаются константой входа в подпрограмму, тоисть если бы задержка то понятно что разное время задержки, но тут какаято проверка чтоли
met1: 61 003C 00A2 MOVWF 0x22 ; сохраняем содержимое аккумулятора
62 003D 3003 MOVLW 0x3 ; константу в аккумулятор
63 003E 2845 GOTO 0x45
met2: 64 003F 00A2 MOVWF 0x22
65 0040 3001 MOVLW 0x1
66 0041 2845 GOTO 0x45
met3: 67 0042 00A2 MOVWF 0x22
68 0043 3006 MOVLW 0x6
69 0044 2845 GOTO 0x45
70 0045 00A8 MOVWF 0x28 ; начало
71 0046 0823 MOVF 0x23, W ; содержимое аккумулятора в 0х23 содержимое 0х23 в аккумулятор
72 0047 0221 SUBWF 0x21, W ;вычитаем из 0х21 (что туда попадает пока не разобрался)
73 0048 1D03 BTFSS 0x3, 0x2 ;если результат не равен 0 то на 0х4с
74 0049 284C GOTO 0x4c
75 004A 0822 MOVF 0x22, W ; если равен 0
76 004B 0220 SUBWF 0x20, W
77 004C 3004 MOVLW 0x4
78 004D 1803 BTFSC 0x3, 0
79 004E 3001 MOVLW 0x1
80 004F 1903 BTFSC 0x3, 0x2
81 0050 3002 MOVLW 0x2
82 0051 0528 ANDWF 0x28, W
83 0052 1D03 BTFSS 0x3, 0x2
84 0053 30FF MOVLW 0xff
85 0054 2855 GOTO 0x55
86 0055 1383 BCF 0x3, 0x7
87 0056 1303 BCF 0x3, 0x6
88 0057 1283 BCF 0x3, 0x5 ;переключаем в 0 банк
89 0058 0064 CLRWDT
90 0059 0008 RETURN возврат