Last active
August 29, 2015 13:57
-
-
Save tothandras/9794561 to your computer and use it in GitHub Desktop.
MERES2 HF
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;*************************************************************** | |
;* Feladat: Forgalmi jelzo~lámpa vezérlés | |
;* | |
;* Rövid leírás: A jelzo~lámpa 4 fázisban mu^ködik (P-PS-Z-S). A | |
;* normál mu^ködésen kivül a BT0 gomb megnyomása jelzi egy mento~ | |
;* közeledtét, aminek a leheto~ leghamarabb zöld utat kell adni. | |
;* A BT1 gomb megnyomása pedig egy dipolomáciai küldöttség | |
;* érkezését jelzi a keresztutcában, ekkor haladéktalanul le | |
;* kell állitani a forgalmat (piros lámpa). Mindkét esetben | |
;* a váltás szabályosan történik. A normál üzem mindkét esetben | |
;* a BT2 megnyomásakor áll vissza. A fényérzékelo~ analóg bemeneten | |
;* beolvasott információ alapján, ha indokolt, kapcsoljanak át | |
;* a lámpák "éjszakai üzemre" (villogó sárga). A piros LED-ek | |
;* duplán világitsanak a nagyobb figyelemfelhivás miatt. A lámpák | |
;* ido~zitese hardver ido~zitovel történjen! | |
;* | |
;* | |
;* Szerzo~k: Tóth András - O8POUA | |
;* Méro~csoport: cde0 | |
; | |
;*************************************************************** | |
;* "AVR ExperimentBoard" port assignment information: | |
;*************************************************************** | |
;* | |
;* LED0(P):PortC.0 LED4(P):PortC.4 | |
;* LED1(P):PortC.1 LED5(P):PortC.5 | |
;* LED2(S):PortC.2 LED6(S):PortC.6 | |
;* LED3(Z):PortC.3 LED7(Z):PortC.7 INT:PortE.4 | |
;* | |
;* SW0:PortG.0 SW1:PortG.1 SW2:PortG.4 SW3:PortG.3 | |
;* | |
;* BT0:PortE.5 BT1:PortE.6 BT2:PortE.7 BT3:PortB.7 | |
;* | |
;*************************************************************** | |
;* | |
;* AIN:PortF.0 NTK:PortF.1 OPTO:PortF.2 POT:PortF.3 | |
;* | |
;*************************************************************** | |
;* | |
;* LCD1(VSS) = GND LCD9(DB2): - | |
;* LCD2(VDD) = VCC LCD10(DB3): - | |
;* LCD3(VO ) = GND LCD11(DB4): PortA.4 | |
;* LCD4(RS ) = PortA.0 LCD12(DB5): PortA.5 | |
;* LCD5(R/W) = GND LCD13(DB6): PortA.6 | |
;* LCD6(E ) = PortA.1 LCD14(DB7): PortA.7 | |
;* LCD7(DB0) = - LCD15(BLA): VCC | |
;* LCD8(DB1) = - LCD16(BLK): PortB.5 (1=Backlight ON) | |
;* | |
;*************************************************************** | |
.include "m128def.inc" ; Definition file for ATmega128 | |
;* Program Constants | |
.equ p_allapot = 0x33 | |
.equ ps_allapot = 0x66 | |
.equ s_allapot = 0x44 | |
.equ z_allapot = 0x88 | |
.equ nincs_allapot = 0x00 | |
.equ igen = 1 | |
.equ nem = 0 | |
.equ nappal = 1 | |
.equ ejszaka = 0 | |
;* Program Variables Definitions | |
.def temp = r16 | |
.def napszak = r17 | |
.def cntr1 = r18 | |
.def cntr2 = r19 | |
.def allapot = r20 | |
.def btn = r21 | |
.def mento = r22 | |
.def kuldottseg = r23 | |
;*************************************************************** | |
;* Reset & Interrupt Vectors | |
.cseg | |
.org $0000 ; Define start of Code segment | |
jmp RESET ; Reset Handler, jmp is 2 word instruction | |
jmp DUMMY_IT ; Ext. INT0 Handler | |
jmp DUMMY_IT ; Ext. INT1 Handler | |
jmp DUMMY_IT ; Ext. INT2 Handler | |
jmp DUMMY_IT ; Ext. INT3 Handler | |
jmp DUMMY_IT ; Ext. INT4 Handler (INT gomb) | |
jmp DUMMY_IT ; Ext. INT5 Handler | |
jmp DUMMY_IT ; Ext. INT6 Handler | |
jmp DUMMY_IT ; Ext. INT7 Handler | |
jmp DUMMY_IT ; Timer2 Compare Match Handler | |
jmp DUMMY_IT ; Timer2 Overflow Handler | |
jmp DUMMY_IT ; Timer1 Capture Event Handler | |
jmp DUMMY_IT ; Timer1 Compare Match A Handler | |
jmp DUMMY_IT ; Timer1 Compare Match B Handler | |
jmp DUMMY_IT ; Timer1 Overflow Handler | |
jmp T0IT ; Timer0 Compare Match Handler | |
jmp DUMMY_IT ; Timer0 Overflow Handler | |
jmp DUMMY_IT ; SPI Transfer Complete Handler | |
jmp DUMMY_IT ; USART0 RX Complete Handler | |
jmp DUMMY_IT ; USART0 Data Register Empty Hanlder | |
jmp DUMMY_IT ; USART0 TX Complete Handler | |
jmp DUMMY_IT ; ADC Conversion Complete Handler | |
jmp DUMMY_IT ; EEPROM Ready Hanlder | |
jmp DUMMY_IT ; Analog Comparator Handler | |
jmp DUMMY_IT ; Timer1 Compare Match C Handler | |
jmp DUMMY_IT ; Timer3 Capture Event Handler | |
jmp DUMMY_IT ; Timer3 Compare Match A Handler | |
jmp DUMMY_IT ; Timer3 Compare Match B Handler | |
jmp DUMMY_IT ; Timer3 Compare Match C Handler | |
jmp DUMMY_IT ; Timer3 Overflow Handler | |
jmp DUMMY_IT ; USART1 RX Complete Handler | |
jmp DUMMY_IT ; USART1 Data Register Empty Hanlder | |
jmp DUMMY_IT ; USART1 TX Complete Handler | |
jmp DUMMY_IT ; Two-wire Serial Interface Handler | |
jmp DUMMY_IT ; Store Program Memory Ready Handler | |
.org $0046 | |
;**************************************************************** | |
;* DUMMY_IT interrupt handler -- CPU hangup with LED pattern | |
;* (This way unhandled interrupts will be noticed) | |
;< többi IT kezelo~ a fájl végére! > | |
DUMMY_IT: | |
ldi r16, 0xFF ; LED pattern: *- | |
out DDRC, r16 ; -* | |
ldi r16, 0xA5 ; *- | |
out PORTC, r16 ; -* | |
DUMMY_LOOP: | |
rjmp DUMMY_LOOP ; endless loop | |
;*************************************************************** | |
;* MAIN program, Initialisation part | |
.org $004B; | |
RESET: | |
;* Stack Pointer init, | |
; Set stack pointer to top of RAM | |
ldi temp, LOW(RAMEND) ; RAMEND = "max address in RAM" | |
out SPL, temp ; RAMEND value in "m128def.inc" | |
ldi temp, HIGH(RAMEND) | |
out SPH, temp | |
M_INIT: | |
;***** Ki- és bemenetek inicializálása ***** | |
ldi temp, 0xff | |
out DDRC, temp ; C port (ledek) inicializalasa mint kimenet | |
ldi temp, 0x1f | |
out DDRE, temp ; BTN0-2 gombod inicializalasa mint bemenet | |
ldi temp, 0xff | |
out PORTE,temp | |
ldi temp, 0b01100010 ; fenyerzekelo beallitasa | |
out ADMUX, temp | |
ldi temp, 0b11100111 | |
out ADCSRA, temp | |
;***** Timer 0 inicializálása ***** | |
TIMER_INIT: | |
ldi temp, 107 ; 10ms-os interrupthoz | |
out OCR0, temp | |
ldi temp, (1<<WGM01)|(0b111<<CS00) | |
out TCCR0, temp | |
ldi temp, (1<<OCIE0) | |
out TIMSK, temp | |
; kezdoertekek beallitasa | |
ldi cntr1, 100 // 1s | |
ldi cntr2, 5 // 5s | |
; piros allapotbol indulunk | |
ldi allapot, p_allapot | |
sei | |
;*************************************************************** | |
;* MAIN program, Endless loop part | |
M_LOOP: | |
out PORTC, allapot | |
in temp, ADCH | |
sbrc temp, 7 ;51% a választó világos és sötét között | |
ldi napszak, ejszaka | |
sbrs temp, 7 | |
ldi napszak, nappal | |
in btn, PINE | |
sbrs btn, 5 | |
jmp BT0_DOWN | |
sbrs btn, 6 | |
jmp BT1_DOWN | |
sbrs btn, 7 | |
jmp BT2_DOWN | |
jmp M_LOOP | |
BT0_DOWN: | |
ldi mento, igen | |
ldi cntr2, 1 | |
jmp M_LOOP | |
BT1_DOWN: | |
ldi kuldottseg, igen | |
ldi cntr2, 1 | |
jmp M_LOOP | |
BT2_DOWN: | |
ldi mento, nem | |
ldi kuldottseg, nem | |
ldi cntr2, 1 | |
jmp M_LOOP | |
jmp M_LOOP | |
;*************************************************************** | |
;* Subroutines, Interrupt routines | |
T0IT: | |
push temp | |
in temp, SREG | |
push temp | |
dec cntr1 | |
brne T0IT_RETURN | |
ldi cntr1,100 | |
dec cntr2 | |
brne T0IT_RETURN | |
cpi napszak, nappal ; fenyerzekelo adatanak kiolvasasa | |
brne VILLOGO ; ejszakai uzem | |
; nappali uzem | |
; jelenlegi allapot vizsgalata | |
cpi allapot, p_allapot | |
breq PIROS_SARGA | |
cpi allapot, ps_allapot | |
breq ZOLD | |
cpi allapot, s_allapot | |
breq PIROS | |
cpi allapot, z_allapot | |
breq SARGA | |
VILLOGO: | |
cpi allapot, nincs_allapot | |
breq VILLOGO_SARGA | |
ldi allapot, nincs_allapot | |
ldi cntr2, 1 // 1mp | |
jmp T0IT_RETURN | |
VILLOGO_SARGA: | |
ldi allapot, s_allapot | |
ldi cntr2, 1 // 1mp | |
jmp T0IT_RETURN | |
PIROS: | |
ldi allapot, p_allapot | |
ldi cntr2, 5 //pirosban 5mp-ig van | |
jmp T0IT_RETURN | |
PIROS_SARGA: | |
cpi kuldottseg, igen ; pirosban vagyunk, piros-sargaba mennenk, de | |
breq T0IT_RETURN ; maradunk | |
ldi allapot, ps_allapot | |
ldi cntr2, 2 //piros-sargaban 2mp-ig van | |
jmp T0IT_RETURN | |
SARGA: | |
cpi mento, igen ; zoldben vagyunk, sargaba mennenk, de | |
breq T0IT_RETURN ; maradunk | |
ldi allapot, s_allapot | |
ldi cntr2, 2 //sargaban 2mp-ig van | |
jmp T0IT_RETURN | |
ZOLD: | |
ldi allapot, z_allapot | |
ldi cntr2, 5 //zoldben 5mp-ig van | |
jmp T0IT_RETURN | |
T0IT_RETURN: | |
pop temp | |
out SREG, temp | |
pop temp | |
reti |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment