Данный проект объединяет в себе несколько разработок на основе PIC контроллера (PIC16F84). Цель разработок изучение архитектуры микроконтроллера и языка программирования ассемблер. В принципе я и начинал изучение контроллера с этих разработок (пока сам руками не сделаешь, ничего не поймёшь и не запомнишь).
В проект входят три разработки, две из них реализованы в железе, но последнюю в железе так и не реализовал (только прогнал в эмуляторе).
В проекте использовалось следующие среды разработок:
Схема переключателя световых эффектов.
Прошивка для PIC контроллера написана на ассемблере в среде разработки MPLAB X IDE.
1 LIST P=PIC16F84A 2 __CONFIG 03FF1H 3 STATUS equ 03h 4 PORTB equ 06h 5 TRISB equ 06h 6 KNOPS equ 0Fh ; Скорость переключения 7 KNREZH equ 1Fh ; Режим работы (счётчик) 8 Schet1 equ 1Ch ; Счётчик на переполнение 9 Schet2 equ 1Dh ; Счётчик на 0 10 Rezhim equ 1Eh ; Режим работы (опред. по битам) 11 F equ 0x1 12 Reg_1 equ 0Ch 13 Reg_2 equ 0Dh 14 Reg_3 equ 0Eh 15 org 0 16 bsf STATUS,5 17 bcf TRISB,1 18 bcf TRISB,2 19 bcf TRISB,3 20 bcf TRISB,4 21 bsf TRISB,0 22 bcf STATUS,5 23 clrf PORTB 24 clrf KNOPS 25 bsf KNOPS,0 26 movlw .194 27 movwf Schet2 28 clrf Schet1 29 clrf Rezhim 30 movlw .1 31 movwf KNREZH 32 wwww btfss KNOPS,2 ; бит-проверка, сброс на 0 "Скорость" 33 goto m1 34 clrf KNOPS 35 m1 btfsc Rezhim,3 ; бит проверка, день/ночь 36 goto vx 37 btfsc Rezhim,2 ; бит-проверка, переключ. свет/тень *** 38 goto ten 39 btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 40 goto rev1 41 goto re1 42 vx call den 43 goto osn1 44 re1 bsf PORTB,1 45 bcf PORTB,2 46 bcf PORTB,3 47 bcf PORTB,4 48 goto osn1 49 rev1 bsf PORTB,4 50 bcf PORTB,3 51 bcf PORTB,2 52 bcf PORTB,1 53 goto osn1 54 ten btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 55 goto ruv1 56 goto ru1 57 ru1 bcf PORTB,1 58 bsf PORTB,2 59 bsf PORTB,3 60 bsf PORTB,4 61 goto osn1 62 ruv1 bcf PORTB,4 63 bsf PORTB,3 64 bsf PORTB,2 65 bsf PORTB,1 66 goto osn1 67 osn1 btfss KNOPS,0 68 goto m2 69 btfss KNOPS,1 70 goto k1 71 call mks800 ; 11 - пауза 800 мкС 72 goto ms1 73 k1 call mks200 ;01 - пауза 100 мкС 74 m2 btfss KNOPS,1 75 goto m3 76 call mks400 ;10 - пауза 400 мкС 77 m3 btfsc KNOPS,0 78 goto ms1 79 btfsc KNOPS,1 80 goto ms1 81 call sek10 ;00 - пауза 10 С 82 ms1 btfsc Rezhim,3 ; бит проверка, день/ночь 83 goto vx1 84 btfsc Rezhim,2 ; бит-проверка, переключ. свет/тень *** 85 goto ten1 86 btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 87 goto rev2 88 goto re2 89 vx1 call den 90 goto osn2 91 re2 bcf PORTB,1 92 bsf PORTB,2 93 bcf PORTB,3 94 bcf PORTB,4 95 goto osn2 96 rev2 bcf PORTB,4 97 bsf PORTB,3 98 bcf PORTB,2 99 bcf PORTB,1 100 goto osn2 101 ten1 btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 102 goto ruv2 103 goto ru2 104 ru2 bsf PORTB,1 105 bcf PORTB,2 106 bsf PORTB,3 107 bsf PORTB,4 108 goto osn2 109 ruv2 bsf PORTB,4 110 bcf PORTB,3 111 bsf PORTB,2 112 bsf PORTB,1 113 goto osn2 114 osn2 btfss KNOPS,0 115 goto m4 116 btfss KNOPS,1 117 goto k2 118 call mks800 ; 11 - пауза 800 мкС 119 goto ms2 120 k2 call mks200 121 m4 btfss KNOPS,1 122 goto m5 123 call mks400 124 m5 btfsc KNOPS,0 125 goto ms2 126 btfsc KNOPS,1 127 goto ms2 128 call sek10 129 ms2 btfsc Rezhim,3 ; бит проверка, день/ночь 130 goto vx2 131 btfsc Rezhim,2 ; бит-проверка, переключ. свет/тень *** 132 goto ten2 133 btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 134 goto rev3 135 goto re3 136 vx2 call den 137 goto osn3 138 re3 bcf PORTB,1 139 bcf PORTB,2 140 bsf PORTB,3 141 bcf PORTB,4 142 goto osn3 143 rev3 bcf PORTB,4 144 bcf PORTB,3 145 bsf PORTB,2 146 bcf PORTB,1 147 goto osn3 148 ten2 btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 149 goto ruv3 150 goto ru3 151 ru3 bsf PORTB,1 152 bsf PORTB,2 153 bcf PORTB,3 154 bsf PORTB,4 155 goto osn3 156 ruv3 bsf PORTB,4 157 bsf PORTB,3 158 bcf PORTB,2 159 bsf PORTB,1 160 goto osn3 161 osn3 btfss KNOPS,0 162 goto m6 163 btfss KNOPS,1 164 goto k3 165 call mks800 ; 11 - пауза 800 мкС 166 goto ms3 167 k3 call mks200 168 m6 btfss KNOPS,1 169 goto m7 170 call mks400 171 m7 btfsc KNOPS,0 172 goto ms3 173 btfsc KNOPS,1 174 goto ms3 175 call sek10 176 ms3 btfsc Rezhim,3 ; бит проверка, день/ночь 177 goto vx3 178 btfsc Rezhim,2 ; бит-проверка, переключ. свет/тень *** 179 goto ten3 180 btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 181 goto rev4 182 goto re4 183 vx3 call den 184 goto osn4 185 re4 bcf PORTB,1 186 bcf PORTB,2 187 bcf PORTB,3 188 bsf PORTB,4 189 goto osn4 190 rev4 bcf PORTB,4 191 bcf PORTB,3 192 bcf PORTB,2 193 bsf PORTB,1 194 goto osn4 195 ten3 btfsc Rezhim,1 ; бит-проверка, переключ. вперёд/назад 196 goto ruv4 197 goto ru4 198 ru4 bsf PORTB,1 199 bsf PORTB,2 200 bsf PORTB,3 201 bcf PORTB,4 202 goto osn4 203 ruv4 bsf PORTB,4 204 bsf PORTB,3 205 bsf PORTB,2 206 bcf PORTB,1 207 goto osn4 208 osn4 btfss KNOPS,0 209 goto m8 210 btfss KNOPS,1 211 goto k4 212 call mks800 ; 11 - пауза 800 мкС 213 goto wwww 214 k4 call mks200 215 m8 btfss KNOPS,1 216 goto m9 217 call mks400 218 m9 btfsc KNOPS,0 219 goto wwww 220 btfsc KNOPS,1 221 goto wwww 222 call sek10 223 goto wwww 224 ; Нажатие кнопки Режим 225 kn_rezh btfsc PORTB,7 226 goto wra 227 rk1 btfss PORTB,7 228 goto rk1 229 incf KNREZH,1 230 btfss KNREZH,2 231 goto sche 232 movlw .1 233 movwf KNREZH 234 sche btfss KNREZH,0 235 goto rq2 236 btfss KNREZH,1 237 goto rq2 238 bsf Rezhim,3 239 goto wra 240 rq2 btfsc KNREZH,0 241 btfsc KNREZH,1 242 goto r1 243 goto rq1 244 rq1 bcf Rezhim,3 245 bcf Rezhim,2 246 goto wra 247 r1 bcf Rezhim,3 248 bsf Rezhim,2 249 wra return 250 ;delay = 100'000 machine cycles 251 mks200 movlw .221 252 movwf Reg_1 253 movlw .130 254 movwf Reg_2 255 btfsc PORTB,0 ; Нажатие кнопки Скорость 256 goto wr 257 s1 btfss PORTB,0 258 goto s1 259 incf KNOPS,1 260 btfss KNOPS,2 261 goto mm1 262 clrf KNOPS 263 mm1 movlw .97 264 movwf Schet2 265 goto ssss 266 wr call kn_rezh ; Нажатие кнопки Режим 267 decfsz Reg_1, F 268 goto wr 269 decfsz Reg_2, F 270 goto wr 271 decfsz Schet2,1 272 goto ssss 273 btfss Rezhim,1 274 goto Rez1 275 bcf Rezhim,1 276 goto Rez2 277 Rez1 bsf Rezhim,1 278 Rez2 movlw .194 279 movwf Schet2 280 ssss return 281 ;delay = 400'000 machine cycles 282 mks400 movlw .119 283 movwf Reg_1 284 movlw .8 285 movwf Reg_2 286 movlw .3 287 movwf Reg_3 288 btfsc PORTB,0 289 goto wrs 290 ft btfss PORTB,0 291 goto ft 292 incf KNOPS,1 293 btfss KNOPS,2 294 goto mm2 295 clrf KNOPS 296 mm2 movlw .48 297 movwf Schet2 298 clrf Schet1 299 goto ft2 300 wrs call kn_rezh ; Нажатие кнопки Режим 301 decfsz Reg_1, F 302 goto wrs 303 decfsz Reg_2, F 304 goto wrs 305 decfsz Reg_3, F 306 goto wrs 307 decfsz Schet2,1 308 goto ft2 309 btfss Rezhim,1 310 goto Rez3 311 bcf Rezhim,1 312 goto Rez4 313 Rez3 bsf Rezhim,1 314 Rez4 movlw .97 315 movwf Schet2 316 ft2 return 317 ;delay = 800'000 machine cycles 318 mks800 movlw .241 319 movwf Reg_1 320 movlw .15 321 movwf Reg_2 322 movlw .5 323 movwf Reg_3 324 btfsc PORTB,0 325 goto wr9 326 ww1 btfss PORTB,0 327 goto ww1 328 incf KNOPS,1 329 btfss KNOPS,2 330 goto mm3 331 clrf KNOPS 332 mm3 movlw .4 333 movwf Schet2 334 goto df1 335 wr9 call kn_rezh ; Нажатие кнопки Режим 336 decfsz Reg_1, F 337 goto wr 338 decfsz Reg_2, F 339 goto wr9 340 decfsz Reg_3, F 341 goto wr9 342 decfsz Schet2,1 343 goto df1 344 btfss Rezhim,1 345 goto Rez5 346 bcf Rezhim,1 347 goto Rez6 348 Rez5 bsf Rezhim,1 349 Rez6 movlw .48 350 movwf Schet2 351 df1 return 352 ;delay = 10'000'000 machine cycles 353 sek10 movlw .223 354 movwf Reg_1 355 movlw .187 356 movwf Reg_2 357 movlw .51 358 movwf Reg_3 359 wr6 decfsz Reg_1, F 360 goto wr6 361 btfsc PORTB,0 362 goto wr7 363 ww btfss PORTB,0 364 goto ww 365 incf KNOPS,1 366 movlw .194 367 movwf Schet2 368 goto wr8 369 wr7 call kn_rezh ; Нажатие кнопки Режим 370 decfsz Reg_2, F 371 goto wr6 372 decfsz Reg_3, F 373 goto wr6 374 decfsz Schet2,1 375 goto wr8 376 btfss Rezhim,1 377 goto Rez7 378 bcf Rezhim,1 379 goto Rez8 380 Rez7 bsf Rezhim,1 381 Rez8 movlw .4 382 movwf Schet2 383 wr8 return 384 ; ======================================== 385 den btfss Rezhim,1 386 goto noch 387 bcf PORTB,1 388 bsf PORTB,2 389 bcf PORTB,3 390 bsf PORTB,4 391 goto noch1 392 noch bsf PORTB,1 393 bcf PORTB,2 394 bsf PORTB,3 395 bcf PORTB,4 396 noch1 return 397 end 398
Прошивка проводиться через программатор Mini Pro TL866A с помощью программы WizardProg87.
Файлы со схемой, разводкой платы и кодом прошивки можно скачать с яндекса.
Напишите отзыв.
Переключатель световых эффектов для новогодней звезды
Схема создана в ISIS и затем переносилась в ARES (редактор печатных плат, оснащенный автотрассировщиком Electra), поэтому схема немного отличается от обычной. В схеме добавлены разъёмы (для последующей установки на плате). Светодиоды изображены по одному, это сделано для того чтобы на плате ненужно было добавлять дополнительный разъём, параллельно каждому светодиоду устанавливаются ещё четыре светодиода (по одному в каждый луч звезды). Питание схемы от зарядного бока сотового телефона (или от другого источника напряжения 5 В).
Прошивка производиться через программатор Mini Pro TL866A с помощью программы WizardProg87.