.include "m8535def.inc"
;-----definitions--------------------—
.def Acc0 = r16
.def Acc1 = r17
;-----macros-------------------------—
.macro setSFR
ldi Acc0, @1
out @0, Acc0
.endm
;------------------------------------—
.cseg
.org 0
rjmp Reset
.org 0x0B
rjmp UART_receive_int
.org 0x15
Reset:
sts counter, Acc0
lds
setSFR SPH, HIGH(RAMEND)
setSFR SPL, LOW(RAMEND)
rcall Init_ports
rcall Init_UART
rcall Send_string
rcall Init_7seg
sei
Loop:
rjmp Loop
;------------------------------------—
Init_UART:
setSFR UCSRA, (1«U2X)
setSFR UCSRB, (1«TXEN)|(1«RXEN)|(1«RXCIE)
setSFR UBRRL, 12
ret
;------------------------------------—
Send_UART:
out UDR, Acc0
UART_transmit_loop:
sbis UCSRA, UDRE
rjmp UART_transmit_loop
cbi UCSRA, UDRE
ret
;------------------------------------—
Send_string:
ldi ZH, HIGH(Text*2)
ldi ZL, LOW(Text*2)
Send_string_loop:
lpm Acc0, Z+
cpi Acc0, 0
breq End_send
rcall Send_UART
rjmp Send_string_loop
End_send:
ret
;--------------------------------------1444
UART_receive_int:
in Acc0, UDR
subi Acc0, 0x30
cpi Acc0, 10
brlo Add_address
reti
Add_address:
ldi ZH, HIGH(Indicator_symbols*2)
ldi ZL, LOW(Indicator_symbols*2)
add ZL, Acc0
brcc Send_symbol
inc ZH
Send_symbol:
lpm Acc0, Z
rcall Indicator
reti
;------------------------------------—
Indicator:
cbi PORTC,0
cbi PORTC,1
clr Acc1
Send_loop:
lsl Acc0
brcs Send1
rjmp Send0
Send1:
sbi PORTC,1
rjmp Strobe
Send0:
cbi PORTC,1
Strobe:
sbi PORTC,0
cbi PORTC,0
inc Acc1
cpi Acc1, 8
brne Send_loop
ret
;------------------------------------—
Init_ports:
setSFR DDRC, 0b00000011
ret
;------------------------------------—
Init_7seg:
ldi Acc0, 255
rcall Indicator
ldi Acc0, 255
rcall Indicator
ldi Acc0, 255
rcall Indicator
ldi Acc0, 255
rcall Indicator
ret
;------------------------------------—
Text:
.db "Hello, world!", 0
Indicator_symbols:
.db 0b11000000, 0b11111001, 0b10100100, 0b10110000, 0b10011001, 0b10010010, 0b10000010, 0b11111000, 0b10000000, 0b10010000
;------------------------------------—
.dseg
.org 0x00060
counter: .byte 1
array: .byte 100