
- •Стек. Реализация программной задержки
- •«Стек. Реализация программной задержки»
- •3. Программа
- •In r17,sreg ;сохранение регистра sreg
- •In r17,sreg ;сохранение регистра sreg
- •4. Функциональная схема
- •5. Задержка
- •6. Таблица значений стека
- •7. Дизассемблированная программа
- •15: In r17,sreg ;сохранение регистра sreg
- •21: In r17,sreg ;сохранение регистра sreg
- •27: In r17,sreg ;сохранение регистра sreg
- •7. Блок схема
7. Дизассемблированная программа
5: ldi r16,$2 ;размещение вершины стека по адресу
+00000000: E002 LDI R16,0x02 Load immediate
6: out sph,r16
+00000001: BF0E OUT 0x3E,R16 Out to I/O location
7: ldi r17,$5F ;старшей ячейки ОЗУ
+00000002: E51F LDI R17,0x5F Load immediate
8: out spl,r17
+00000003: BF1D OUT 0x3D,R17 Out to I/O location
9: ldi r16,0xFF ;инициализация портов ввода/вывода
+00000004: EF0F SER R16 Set Register
10: out DDRD,r16 ;PORTC - на вывод
+00000005: BB01 OUT 0x11,R16 Out to I/O location
@00000006: main
13: ldi r16,0x15 ; 1 ТАКТ занесение в РОН r16 числа $15 (чётные биты)
+00000006: E105 LDI R16,0x15 Load immediate
14: out PORTD,r16 ;вывод на PORTC значения r16
+00000007: BB02 OUT 0x12,R16 Out to I/O location
15: In r17,sreg ;сохранение регистра sreg
+00000008: B71F IN R17,0x3F In from I/O location
16: rcall delay1 ;вызов подпрограммы задержки
+00000009: D00D RCALL PC+0x000E Relative call subroutine
17: out SREG,r17 ;восстановление SREG после возврата из delay
+0000000A: BF1F OUT 0x3F,R17 Out to I/O location
19: ldi r16,0x2A ; 2 ТАКТ занесение в РОН r16 числа $2A (нечётные биты)
+0000000B: E20A LDI R16,0x2A Load immediate
20: out PORTD,r16 ; вывод на PORTC значения r16
+0000000C: BB02 OUT 0x12,R16 Out to I/O location
21: In r17,sreg ;сохранение регистра sreg
+0000000D: B71F IN R17,0x3F In from I/O location
22: rcall delay1 ;вызов подпрограммы задержки
+0000000E: D008 RCALL PC+0x0009 Relative call subroutine
23: out SREG,r17 ;восстановление SREG после возврата из delay
+0000000F: BF1F OUT 0x3F,R17 Out to I/O location
25: ldi r16,0x00 ; 3 ТАКТ занесение в РОН r16 числа 0 (ничего не горит)
+00000010: E000 LDI R16,0x00 Load immediate
26: out PORTD,r16 ; вывод на PORTC значения r16
+00000011: BB02 OUT 0x12,R16 Out to I/O location
27: In r17,sreg ;сохранение регистра sreg
+00000012: B71F IN R17,0x3F In from I/O location
28: rcall delay1 ;вызов подпрограммы задержки
+00000013: D003 RCALL PC+0x0004 Relative call subroutine
29: rcall delay1 ;вызов подпрограммы задержки
+00000014: D002 RCALL PC+0x0003 Relative call subroutine
30: out SREG,r17 ;восстановление SREG после возврата из delay
+00000015: BF1F OUT 0x3F,R17 Out to I/O location
31: rjmp main ;возврат на main
+00000016: CFEF RJMP PC-0x0010 Relative jump
@00000017: delay1
34: clr r18 ;очистка регистра r18
+00000017: 2722 CLR R18 Clear Register
@00000018: met1
36: rcall delay2 ;переход на delay2
+00000018: D004 RCALL PC+0x0005 Relative call subroutine
37: inc r18 ;инкремент r18
+00000019: 9523 INC R18 Increment
38: cpi r18,0xC8 ;сравнение значения r18 с числом 200 ( 1100 0100 $C4 )
+0000001A: 3C28 CPI R18,0xC8 Compare with immediate
39: brne met1 ;если значение в r18?200, то переход на met1
+0000001B: F7E1 BRNE PC-0x03 Branch if not equal
40: ret ;иначе - возврат в основную программу
+0000001C: 9508 RET Subroutine return
@0000001D: delay2
43: clr r19 ;очистка регистра r19
+0000001D: 2733 CLR R19 Clear Register
@0000001E: met2
45: rcall delay3 ;переход на delay3
+0000001E: D004 RCALL PC+0x0005 Relative call subroutine
46: inc r19 ;инкремент r19
+0000001F: 9533 INC R19 Increment
47: cpi r19,0xC8 ;сравнение значения r19 с числом 200 ( 1100 0100 $C4 )
+00000020: 3C38 CPI R19,0xC8 Compare with immediate
48: brne met2 ;если значение в r19?200, то переход на met2
+00000021: F7E1 BRNE PC-0x03 Branch if not equal
49: ret ;иначе - возврат в подпрограмму №1
+00000022: 9508 RET Subroutine return
@00000023: delay3
52: clr r20 ;очистка регистра r20
+00000023: 2744 CLR R20 Clear Register
@00000024: met3
54: inc r20 ;инкремент r20
+00000024: 9543 INC R20 Increment
55: cpi r20,0xFA ;сравнение значения r20 с числом 250 ( 1111 1010 $FA )
+00000025: 3F4A CPI R20,0xFA Compare with immediate
56: brne met3 ;если значение в r20?250, то переход на met3
+00000026: F7E9 BRNE PC-0x02 Branch if not equal
57: ret ;иначе - возврат в подпрограмму №2
+00000027: 9508 RET Subroutine return