; 1. rész ; LED villogtatása mikrovezérlővel + 2 nyomógomb kezelése ; ; Létrehozva: 2005.05.25 ; ksasa .include "2313def.inc" ; változók definiálása .def temp = r16 .def osztasi_ertek = r17 .def timer_int = r18 ; konstansok definiálása .equ LED = 2 ;LED kimenet portb.2 .equ sw1 = 1 ;nyomógomb 1 portb.1 .equ sw2 = 0 ;nyomógomb 2 portb.0 ;program kezdete .CSEG ;IT vektortábla .org 0 rjmp stackinit ; reset it reti ; int0 it rjmp timer_int ; timer it ;Stack beállitás stackinit: ldi temp,ramend ;Stack inicializálás out SPL,temp ;Stack Pointer Low ;PORT B beállitások ldi temp,(1< out ddrb,temp ldi temp,(1< out portb,temp ;igy a bemeneteken lesz PULLUP (elvileg) ;timer init ;kvarc = 4MHz ldi temp, (1< out tccr0,temp ldi osztasi_ertek,0 ;osztási alapérték:256, vagyis 4MHz/1024/256=15,258Hz out tcnt0,osztasi_ertek ldi temp,1< out timsk,temp sei ;megszakítások engedélyezése ;végtelen ciklus ldi timer_int,0 ;timer int számláló inicializálás x: cpi timer_int,15 ;15 db timer megszakitás bevárása breq led_csere ;ha megvan, LED állapot váltása sbis portb,sw1 ;elenőrizzük, van e sw1 gombnyomás rjmp sw1_lenyomva ;ha van sw1, 1.5Hz-et állitunk be sbis portb,sw2 ;elenőrizzük, van e sw2 gombnyomás rjmp sw2_lenyomva ;ha van sw2, 2Hz-et állitunk be rjmp x ;ha egyik sincs lenyomva, vissza az elejére sw1_lenyomva: ;sw1 megnyomása esetén a freki legyen 1.5Hz ldi osztasi_ertek,82 ;4Mhz/1024/(256-82)/15 = 1.4966Hz out tcnt0,osztasi_ertek rjmp x ;majd vissza az elejére sw2_lenyomva: ;sw2 megnyomása esetén a freki legyen 2Hz ldi osztasi_ertek,126 ;4Mhz/1024/(256-126)/15 = 2.003Hz out tcnt0,osztasi_ertek rjmp x ;majd vissza az elejére led_csere: ldi timer_int,0 ;először is töröljök a timer int szálmálót sbic portb,LED rjmp clr_LED ;ha a led világit, akkor kikapcsoljuk sbi portb,LED ;ha nem világit, bekapcsoljuk rjmp x clr_led: cbi portb,LED ;itt történik a kikapcsolás rjmp x timer_int: out tcnt0,osztasi_ertek ;számláló újratöltése inc timer_int reti |