ВУЗ:
Составители:
33
.DEF TEMP = R16 ; temporary working register
.DEF PARAM = R17 ; Parameter transfer register
.DEF DELAY = R10 ;
.DEF DELAY1 = R11 ; To generate long delays
.DEF DELAY2 = R12 ;
; Reset and interrupt vectors
.CSEG
.ORG 0x00
START:
rjmp RESET ; Reset vector
.org URXCaddr
rjmp uart_rx
.org UDREaddr
reti
.org UTXCaddr
reti
; Device initialization
RESET:
ldi temp, high(RAMEND) ; ɢɧɢɰɢɚɥɢɡɚɰɢɹ ɩɚɦɹɬɢ ɫɬɟɤɚ
out SPH, temp
ldi temp, low(RAMEND)
out SPL, temp ; ɡɚɜɟɪɲɟɧɢɟ ɢɧɢɰɢɚɥɢɡɚɰɢɢ ɩɚɦɹɬɢ ɫɬɟɤɚ
ldi TEMP, 0x17 ; 00010111, setting bits for OC1, PB2 and PB4, PB0
out DDRB, TEMP ; set Port B direction as above
ldi TEMP, 0x28 ; 00101000, PB5 pullup, PB4 lo, PB3 pullup, PB2 lo, OC1 low,
out PORTB, TEMP
out PORTB, TEMP ; set Port B
ldi TEMP, 0xFC ; All outputs except bits 0,1 (UART)
out DDRD, TEMP ;
rcall LCD_SETUP; ; Initialize LCD and send
rcall LCD_HELLO; ; a welcome message
ldi TEMP, 12 ; Set UART 4800 bauds for 1 MHz
out UBRR, TEMP ;
ldi TEMP, 0xF8 ; Activate all interrupts and TX/RCV
out UCR, TEMP ; and go !
sei
FOREVER: ; Endless loop. RX interrupt
nop ; will do the job
nop ;
rjmp FOREVER; ;
UART_RX: ; Read UART chararter and
in PARAM, UDR ; send it to the LCD
rcall LCD_DATA ;
reti
34
; LCD Driving Library example
; Display setup for 4 bits interface
LCD_SETUP:
ldi TEMP, 10 ; Wait about 20msec after powerup
SET1: ; LCD is a quite slow,
rcall WAIT_2M ; mind delays !
dec TEMP ;
brne SET1 ;
ldi TEMP, 0b00101000 ; Set 4 bit interface (but we are
out PORTD, TEMP ; still in 8 bits!)
nop
nop ; Data write cycle must be > 1 ms
cbi PORTD, 3 ; OE low to clock in data
rcall WAIT_2M ;
; *** !! From now on, interface is 4 bits !! ***
ldi PARAM, 0b00101000 ; Send again to catch the bit N
rcall LCD_CMD ; Display is 2 lines, so N = 1
ldi PARAM, 0b00001000 ; Display off, cursor off, and blink off
rcall LCD_CMD
ldi PARAM, 0b00000001 ; Display clear
rcall LCD_CMD
rcall WAIT_2M ; Wait 2 sec after clear
ldi PARAM, 0b00000110 ; Increment RAM, dont shift display
rcall LCD_CMD
ldi PARAM, 0b00001110 ; Display on, cursor on / blink off
rcall LCD_CMD
ret
; 2.3 ms delay with 1 MHz clock.
WAIT_2M:
push TEMP
ldi TEMP, 3
mov DELAY1, TEMP
W2_1:
clr DELAY2
dec DELAY2 ; Start at 0xFF
W2_2:
dec DELAY2
brne W2_2
dec DELAY1
brne W2_1
pop TEMP
ret
; Display a welcome message. Mesage comes at the end
LCD_HELLO:
Страницы
- « первая
- ‹ предыдущая
- …
- 15
- 16
- 17
- 18
- 19
- …
- следующая ›
- последняя »