Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- .def param0 = r23
- .def param1 = r24
- .def lcd_data = r11
- .def tmp = R27
- .def counter = r26
- .def character_counter = r28
- .def TAG_LOOP_COUNT = r25
- .def TAG_SUCCESS_COUNT = r25
- .equ DIODE_MASK = 0x10 ; 0001 0000
- .equ FUNCTION_SET_MASK = 0x38 ; 0011 1000
- .equ ENTRY_MODE_MASK = 0x06 ; 0000 0110
- .equ DISPLAY_MASK = 0x0c ; 0000 1100
- .equ CLEAR_MASK = 0x01 ; 0000 0001
- .equ RETURN_TO_HOME_MASK = 0x02 ; 0000 0010
- ;.equ usart_interrupt = $016
- .equ rfid_en_pin = PD1
- .equ rfid_sout_pin = PD0
- .equ en_pin = PB7
- .equ rw_pin = PB6
- .equ rs_pin = PB5
- .equ diode_pin = PB4 ; 00010000
- .equ blip_pin = PB3
- .org $250
- tagB31: .db "3453453434",0
- .db "3453453445",0
- .db "3453453335",0
- .db "3453423435",0
- .db "3453453435",0
- .org $200 ;0001000000
- line_init_tag: .db "3453453435"
- .dseg
- .org $100
- LINE: .byte 10
- .cseg
- .org $000
- rjmp RESET
- .org $016
- rjmp USARTINT
- RESET:
- clr r16
- clr r17
- clr r18
- clr r19
- clr r20
- clr r21
- clr r22
- clr r26
- clr r27
- clr r28
- ldi r16,$FF
- out DDRA,r16
- ldi r16,$FF
- out DDRB,r16
- ldi r16,$FF
- out DDRD,r16
- ldi r16,HIGH(RAMEND) ; Set stackpointer
- out SPH,r16
- ldi r16,LOW(RAMEND)
- out SPL,r16
- ldi YH,HIGH(LINE*2) ; Set Ypointer to point to LINE
- ldi YL,LOW(LINE*2) ;
- ;clr r16 ; init timer0
- ;ldi r16,(1<<CS02) | (0<<CS01) |(1<<CS00) ; Normal mode, prescale clk/64
- ;out TCCR0,r16
- ldi r16,(0<<TOIE0) | (0<<TOIE1) ; enable timer0 & timer 1
- out TIMSK,r16
- ; The MCU Control Register
- ldi r16, (1<<ISC01) | (0<<ISC00) | (1<<ISC11) | (0<<ISC10) ; Trigger int 0 and int 1 on falling edge
- out MCUCR, r16
- rcall RFID_LOW_ENABLE
- ; General Interrupt Control Register
- ldi r16,(1<<RXC | 0 << UDRE)
- out GICR, r16
- call CLEAR_PORTB
- rcall LCD_INIT
- ldi r16,$0
- out PORTD,r16
- out PORTD,r19
- USART_Init:
- ldi r16,(25>>8)
- out UBRRH, r16
- ldi r16,25 ; UBRR = 25 => bps = 2400
- out UBRRL, r16
- ldi r16, (1<<RxC ) ; Enable receiver
- out UCSRA,r16
- ldi r16, (1<<RXEN) |(0<<TXEN) | (1<<RXCIE ) | (0<<UDRIE )
- out UCSRB,r16
- ldi r16, (1<<URSEL)|(3<<UCSZ0) | (0 << UMSEL)
- out UCSRC,r16
- sei
- LOOP:
- jmp LOOP
- CLEAR_PORTA:
- ldi tmp, $00
- out PORTA, tmp
- ret
- CLEAR_PORTB:
- ldi tmp, $00
- out PORTA, tmp
- ret
- SLEEP_N_MS:
- push param0
- push param1
- clr param1
- SLEEP_N_MS_LOOP: rcall SLEEP_1_MS
- inc param1
- cp param1, param0
- brlo SLEEP_N_MS_LOOP
- pop param1
- pop param0
- ret
- SLEEP_1_MS: ; (6 + (4 * 41) * (3 * 2)) = 990 klockcyklar = 0,000978
- push param0
- push param1
- clr param0
- SLEEP_1_MS_LOOP1: clr param1
- SLEEP_1_MS_LOOP2: inc param1
- cpi param1, 3
- brne SLEEP_1_MS_LOOP2
- inc param0
- cpi param0, 41
- brne SLEEP_1_MS_LOOP1
- pop param1
- pop param0
- ret
- ; ***************** LCD FUNCTIONS *********************
- E_EQUALS_1:
- clr tmp
- in tmp,PORTB
- sbr tmp, en_pin
- out PORTB,tmp
- ret
- E_EQUALS_0:
- clr tmp
- in tmp,PORTB
- cbr tmp, en_pin
- out PORTB,tmp
- ret
- RS0_RW1: ;RS=0 och RW=1
- clr tmp
- in tmp,PORTB
- cbr tmp, rs_pin
- sbr tmp, rw_pin
- out PORTB,tmp
- ret
- RS0_RW0: ;RS=0 och RW=0
- clr tmp
- in tmp,PORTB
- cbr tmp, rs_pin
- cbr tmp, rw_pin
- out PORTB,tmp
- ret
- CLEAR_lCD:
- ldi param0, 2
- rcall SLEEP_N_MS
- ldi param1, CLEAR_MASK ; 0000 0001 clear display
- rcall LCD_INIT_WRITE
- ret
- LCD_INIT:
- push param0
- push param1
- ldi param1, FUNCTION_SET_MASK ; 0011 1000 function set, 8bit data, 2 lines
- rcall LCD_INIT_WRITE
- ldi param1, DISPLAY_MASK ; 0000 1100 display is turned on
- rcall LCD_INIT_WRITE
- ldi param1, CLEAR_MASK ; 0000 0001 clear display
- rcall LCD_INIT_WRITE
- ldi param0, 2
- rcall SLEEP_N_MS
- ldi param1, ENTRY_MODE_MASK ; 0000 0110 cursor moves right
- rcall LCD_INIT_WRITE
- ldi param1, RETURN_TO_HOME_MASK ; 0000 0010 return to home
- rcall LCD_INIT_WRITE
- pop param1
- pop param0
- ret
- BLIP_NOISE:
- sbi PORTB, blip_pin
- ldi param0, 100
- rcall SLEEP_N_MS
- cbi PORTB, blip_pin
- ret
- DIODE_LIGHT_ON:
- sbi PORTB, diode_pin
- ret
- DIODE_LIGHT_OFF:
- cbi PORTB, diode_pin
- ret
- LCD_INIT_WRITE:
- mov lcd_data, param1
- cbi PORTB, rs_pin
- cbi PORTB, rw_pin
- rcall LCD_WRITE
- ret
- LCD_DISPLAY_CHAR:
- mov lcd_data, param1
- sbi PORTB, rs_pin
- cbi PORTB, rw_pin
- rcall LCD_WRITE
- ret
- LCD_WRITE:
- sbi PORTB, en_pin
- rcall SLEEP_1_MS
- out PORTA, lcd_data
- rcall SLEEP_1_MS
- cbi PORTB, en_pin
- rcall SLEEP_1_MS
- ret
- LCD_WRITE_LINE:
- push param0
- clr param0
- LCD_WRITE_LINE_LOOP:
- clr counter
- add ZL,param0
- lpm r16,Z
- sub ZL, param0
- mov param1, r16
- rcall LCD_DISPLAY_CHAR
- inc param0
- cpi param0, $0A
- brlo LCD_WRITE_LINE_LOOP
- ;rcall CLEAR_lCD
- pop param0
- ;rcall LCD_INIT
- ret
- ; ***************** END LCD FUNCTIONS *********************
- ; ***************** RFID FUNCTIONS ************************
- RFID_READ:
- ;rcall RFID_LOW_ENABLE
- ret
- RFID_HIGH_ENABLE:
- sbi PORTD, rfid_en_pin
- ret
- RFID_LOW_ENABLE:
- cbi PORTD, rfid_en_pin
- ret
- DIODE_LIGHT:
- sbi PORTB, diode_pin
- ret
- DIODE_SWITCH:
- push param0
- push param1
- clr counter
- in param0, PORTB
- ldi param1, DIODE_MASK
- eor param0, param1
- out PORTB, param0
- pop param1
- pop param0
- ret
- USARTINT:
- in param1, UDR
- ;ldi tmp, $30
- add param1, tmp
- rcall LCD_DISPLAY_CHAR
- inc r19
- cpi r19, $0A
- breq USARTDONE
- USARTINT_END:
- reti
- USARTDONE:
- ;rcall INITLINE
- ;rcall COMPARETAGS
- rcall RFID_HIGH_ENABLE
- ret
- INITLINE: ; (Temporärt)
- ldi ZH, high(line_init_tag << 1)
- ldi ZL, low(line_init_tag << 1)
- lpm tmp, Z+0
- std Y+0, tmp
- lpm tmp, Z+1
- std Y+1, tmp
- lpm tmp, Z+2
- std Y+2, tmp
- lpm tmp, Z+3
- std Y+3, tmp
- lpm tmp, Z+4
- std Y+4, tmp
- lpm tmp, Z+5
- std Y+5, tmp
- lpm tmp, Z+6
- std Y+6, tmp
- lpm tmp, Z+7
- std Y+7, tmp
- lpm tmp, Z+8
- std Y+8, tmp
- lpm tmp, Z+9
- std Y+9, tmp
- lpm tmp, Z+10
- std Y+10, tmp
- ret
- COMPARETAGS: ; Y = TAG FROM CARD, Z = TAGS FROM MEMORY
- push param0
- push param1
- clr TAG_LOOP_COUNT
- clr r16
- clr param0
- ldi TAG_LOOP_COUNT, 0
- ldi ZH, high(tagB31<< 1)
- ldi ZL, low(tagB31 << 1)
- COMPARETAGS_LOOP_1:
- add ZL, param0
- clr param0
- COMPARETAGS_LOOP_2:
- add ZL,param0
- add YL,param0
- lpm r16, Z
- ldd param1, Y+0
- sub ZL,param0
- sub YL, param0
- inc param0
- cp r16, param1
- brne COMPARETAGS_RETURN_FALSE
- cpi param0, 10
- brlo COMPARETAGS_LOOP_2
- COMPARETAGS_SUCCESS:
- ldi param1, $31
- rcall LCD_DISPLAY_CHAR
- jmp COMPARETAGS_END
- COMPARETAGS_RETURN_FALSE:
- inc TAG_LOOP_COUNT
- ldi param0, 12
- cpi TAG_LOOP_COUNT, 5 ; <- 5 = number of strings
- brlo COMPARETAGS_LOOP_1
- COMPARETAGS_END:
- pop param1
- pop param0
- ret
- ; ***************** END RFID FUNCTIONS ********************
- INTINTA:
- reti
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement