62931 (588862), страница 12
Текст из файла (страница 12)
57 | lpm | XL Z+ | Извлекаем адрес из таблицы | |||
58 | lpm | XH Z | И помещаем в x | |||
Воспроизведение мелодии | ||||||
59 | m4 | mov | ZH. XH | Записываем в Z начало мелодии | ||
60 | mov | ZL .XL | ||||
61 | m5 | ln | temp PINO | Читаем содержимое порта D | ||
62 | cpl | temp 0x7F | Проверяем на равенство 7FH | |||
63 | dreg | m1 | Если равно(скобки опущены) в начало | |||
64 | lpm | temp Z | Извлекаем код ноты | |||
65 | cpl | temp 0xFF | Проверяем не конец ли мелодии | |||
66 | dreg | m4 | Если конец начинаем мелодию сначала | |||
67 | and1 | temp 0x1f | Выделяем код тона из кода ноты | |||
68 | mov | tnota temp | Записываем в регистр кода тона | |||
69 | lpm | temp Z+ | Еще раз берем код ноты | |||
70 | col | temp | Производим сдвиг кода ноты | |||
71 | col | temp | ||||
72 | col | temp | ||||
73 | col | temp | ||||
74 | and1 | temp. 0х07 | выделяем код длительности | |||
75 | mov | dnota temp | помещаем ее в регистр длительности | |||
76 | rcall | nota | к подпрограмме воспроизведения ноты | |||
77 | rjmp | m S | В начало цикла (следующая нота) | |||
Вспомогательные подпрограммы | ||||||
78 | addw | duch | YH | подпрограмма 16 разрядного сложения | ||
79 | lsl | YL | Умножение первого слагаемого на 2 | |||
80 | ld1 | YH.O | второй байт первого слагаемого | |||
81 | add | ZL. YL | Складывается два слагаемых | |||
82 | adc | ZH. YH | ||||
83 | pop | YH | ||||
84 | ret | |||||
Подпрограмма исполнения одной ноты | ||||||
85 | nota. | push | ZH | |||
86 | push | ZL | ||||
87 | push | YL | ||||
88 | push | temp | ||||
89 | col | fnota. 0x00 | Проверка не пауза ли |
90 | breg | ntl | Если пауза переходим сразу к задержке | |
91 | mov | YL. fnota | Вычисляем адрес где храниться | |
92 | idi | ZL low (tabkd*2) | коэффициент деления текущей ноты | |
93 | idi | ZH high (tabkd*2) | ||
94 | rcali | addw | К подпрограмме 16-разрядного сложения | |
95 | lpm | temp Z+ | Извлекаем ид. Разряд КД для текущей ноты | |
96 | lpm | templ Z | Извлекаем ст. разряд КД для текущей ноты | |
97 | out | OCRIAH temp | Записать в старш. Часть регистра совпадения | |
98 | out | OCRIAL temp | Записать в младш. Часть регистра совпадения | |
99 | idi | temp 0x40 | Включить звук | |
100 | out | TCCRIA temp | ||
101 | ntl: | rcall | wait | К программе задержки |
102 | idi | temp 0x00 | Выключить звук | |
103 | out | TCCRIA temp | ||
104 | idi | dnota 0 | Отбрасываем задержку для паузы между нотами | |
105 | rcall | wait | Пауза между нотами | |
106 | pop | temp | Завершение подпрограммы | |
107 | pop | YL | ||
108 | pop | ZL | ||
109 | pop | ZH | ||
110 | ret | |||
Подпрограмма формирования задержки | ||||
111 | wait | push | ZH | |
112 | push | ZL | ||
113 | push | YH | ||
114 | push | YL | ||
115 | mov | YL dnota | Вычисляем адрес где храниться | |
116 | ld1 | ZL low(tabz*2) | нужный коэффициент задержки | |
117 | ld1 | ZH high(tabz*2) |
118 | rcall | addw | К программе 16-разрядного сложения | ||
119 | lpm | YL Z+ | Читаем первый байт коэффициента задержки | ||
120 | lpm | YH Z | Читаем второй байт коэффициента задержки | ||
121 | ctr | ZL | обнуляем регистровую пару Z | ||
122 | ctr | ZH | |||
Цикл задержки | |||||
123 | w1 | ldl | loop 255 | Пустой внутренний цикл | |
124 | w2 | dec | loop | ||
125 | brne | w2 | |||
126 | adlw | R3O 1 | Увеличение регистровой пары Z на единицу | ||
127 | co | YL ZL | Проверка младшего раздела | ||
128 | brne | w1 | |||
129 | cp | YH ZH | Проверка старшего разряда | ||
130 | brne | w1 | |||
131 | pop | YL | Завершение подпрограммы | ||
132 | pop | YH | |||
133 | pop | ZL | |||
134 | pop | ZH | |||
135 | ret | ||||
Таблица длительности задержек | |||||
136 | tabz | dw | 128.256/512/1024.2048.4096.8192 | ||
Таблица коэффициента деления | |||||
137 | tabkd | dw | 0 | ||
138 | dw | 4748.4480.4228.3992.3768.3556.3358.3168.2990.2822.2664.2514 | |||
139 | dw | 2374.2240.2114.1996.1884.1778.1678.1584.1495.1411.1332.1257 | |||
140 | dw | 1187.1120/1057.998.942.889.839.792 | |||
Таблица начал всех мелодий | |||||
141 | tabа | dw | mei1*2, mei2*2, mei3*2, mei4*2, | ||
142 | dw | mei5*2, mei6*2, mei7*2, | |||
Таблица мелодий | |||||
В траве сидел кузнечек | |||||
143 | mel1 | db | 109.104.109.104.109.108.108.96.108.104 | ||
144 | db | 108.104.108.109.109.96.109.104.109.104 | |||
145 | db | 109.108.108.96.108.104. 109.104.109.104 | |||
146 | db | 112.112.112.111. 108.109.109.96.109.104 | |||
147 | db | 111.79.79.111.111.112.80.80.112.112.80 | |||
148 | db | 112.112.112.111. 108.109. 104.109.104 | |||
149 | db | 109.108.108.96.108.141.128.96.255 | |||
Песенка крокодила Гены | |||||
150 | mel2 | db | 109.110.141.102.104.105.102.109.110.141 | ||
151 | db | 111.79.79.111.111.112.80.80. 108.96.108 | |||
152 | db | 108.96.108.141.104.105.102.109.110.141 | |||
153 | db | 79.111.111.112.80. 96.108.104. 109 | |||
154 | db | 146.109.105.136.107.105.134.128.128.102 | |||
155 | db | 79.111.111.112.80. 96.110.176.112.108.109 | |||
156 | db | 109.105.136.107.105.134.105.142.146.144. | |||
157 | db | 105.136.107.105.134. 134.128.128.102.141 | |||
158 | db | 111.111.112.80. 96.110.176.136.107.105.134 | |||
159 | db | 105.134. 134.128.128.142.141.105.109.139 | |||
160 | db | 126.173.146.128.96.255 | |||
В лесу родилась елочка | |||||
161 | mel3 | db | 132.141.141.139.141.137.132.132.132.141 | ||
162 | db | 141.142.139.176.128.144.146.146.154.154 | |||
163 | db | 153.151.149.144.153.153.151.153.181.128 | |||
164 | db | 96.255 | |||
Happy births to you | |||||
165 | mel4 | db | 107.107.141.139.144.143.128.107.107.141 | ||
166 | db | 139.146.144.128.107.107.151.148.146.112 | |||
167 | db | 111.149.117.117.148.144.146.144.128.255 | |||
С чего начинается родина | |||||
168 | mel5 | db | 99.175.109.107.106.102.99.144.111.175 | ||
169 | db | 96.99.107.107.107.107.102.104.170.96 | |||
170 | db | 99.109.109.109.109.107.106.143.109.141 | |||
171 | db | 99.109.109.109.109.104.106.171.96.99 | |||
172 | db | 111.109.107.106.102.99.144.111.143.104 | |||
173 | db | 114.114.114.114.109.111.176.96.104.116 | |||
174 | db | 112.109.107.106.64.73.143.107.131.99 | |||
175 | db | 144.80.80.112.111.64.75.173.128.255 | |||
Песня из кинофильма «Веселые ребята» | |||||
176 | mel6 | db | 105.109.112.149.116.64.80.148.114.64 | ||
177 | db | 78.146.112.96.105.105.109.144.111.64 | |||
178 | db | 80.145.112.64.81.178.96.117.117.117 | |||
179 | db | 149.116.64.82.146.112.64.79.146.144 | |||
180 | db | 96.105.105.107.141.108.109.112.110.102 | |||
181 | db | 104.137.128.96.105.105.105.137.102.64 | |||
182 | db | 73.142.105.107.109.64.75.137.96.105 | |||
183 | db | 105.105.137.102.105.142.112.64.82.180 | |||
184 | db | 96.116.116.116.148.114.112.142.109.64 | |||
185 | db | 78.146.144.96.105.105.107.141.108.109 | |||
186 | db | 112.110.102.104.169.96.96.255 | |||
Улыбка | |||||
187 | mel7 | db | 107.104.141.139.102.105.104.102.164.128 | ||
188 | db | 104.107.109.109.109.111.114.112.111.109 | |||
189 | db | 144.139.128.109.111.144.96.111.109.104 | |||
190 | db | 107.105.173.128.111.109.112.107.111.109 | |||
191 | db | 109.107.102.104.134.132.128.100.103.107 | |||
192 | db | 107.107.107.139.112.100.103.102.102.102 | |||
193 | db | 134.102.103.107.105.107.108.108.108.108 | |||
194 | db | 107.105.107.108.144.142.128.112.107.110 | |||
195 | db | 140.112.105.108.107.107.107.105.140.139 | |||
196 | db | 139.112.103.102.103.105.108.107.105.103 | |||
197 | db | 128.112.107.110.108.108.108.108.140.112.105 | |||
198 | db | 108.107.107.107.139.112.103.102.103.105 | |||
199 | db | 108.107.105.103.105.1039.132.128.96.96 | |||
200 | db | 96.255 |
ПРИЛОЖЕНИЕ Б