Skip to content

Instantly share code, notes, and snippets.

@tothandras
Last active August 29, 2015 13:57
Show Gist options
  • Save tothandras/9794561 to your computer and use it in GitHub Desktop.
Save tothandras/9794561 to your computer and use it in GitHub Desktop.
MERES2 HF
;***************************************************************
;* 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