





Mikrovezérlő: LED villogtatása + 2 nyomógomb kezelése
1. rész
Egy egyszerű hardver + a működtető szoftver első lépésnek. Direkt a legkisebb tokozású ATMEL AT90S2323 mikrokonrollert választottam, ebből is sok mindent ki lehet hozni, igaz drágább mint pl a DIP20 vagy SO20-as tokozású. A program persze egy az egyben használható más procikkal is, Pl AT90S1200 -SO20/DIP20, AT90S2323 -SO8/DIP8 stb, megkötés csak annyi, hogy mindig a PORTB legyen használva és a kiosztás se változzon (LED,SW1,SW2 ugyanaz a bit legyen).
Letöltéskor a nyomógombok ne legyenek lenyomva!!
A működtető program:
A program letölthető (uc_part1.asm).
Egy egyszerű hardver + a működtető szoftver első lépésnek. Direkt a legkisebb tokozású ATMEL AT90S2323 mikrokonrollert választottam, ebből is sok mindent ki lehet hozni, igaz drágább mint pl a DIP20 vagy SO20-as tokozású. A program persze egy az egyben használható más procikkal is, Pl AT90S1200 -SO20/DIP20, AT90S2323 -SO8/DIP8 stb, megkötés csak annyi, hogy mindig a PORTB legyen használva és a kiosztás se változzon (LED,SW1,SW2 ugyanaz a bit legyen).
Letöltéskor a nyomógombok ne legyenek lenyomva!!
A működtető program:
; 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 |
A program letölthető (uc_part1.asm).
Nézettség:










Szint:



Szavazat:
Készült:
2005. május 27. 09:10
2005. május 27. 09:10
Vélemény:
2
Szavazat:
7
Mai látogató:
2
Utolsó látogatás:
2023. október 02. 07:18:38
Bejelentkezés után használható funkció!
Értékeld a cikket!
Szavazatok
3,9
Az írást küldte: Kerekes Sándor
Legújabb írás



