Телесистемы
 Разработка, производство и продажа радиоэлектронной аппаратуры
На главную   | Карта сайта | Пишите нам | В избранное
Требуется программист в Зеленограде
- обработка данных с датчиков; ColdFire; 40 тыс.
e-mail:jobsmp@pochta.ru

Телесистемы | Электроника | Конференция «Микроконтроллеры и их применение»

Ответ:

Отправлено nestandart 07 февраля 2007 г. 20:21
В ответ на: AVR и HD 44780, примеры на ассемблере отправлено Lissmeister 07 февраля 2007 г. 19:47

align=Top
схема сеоенение - по картинке. четырёхбитно.
экранчик - двустроковый.

- инит дисплэйчика:
;rcall lcd_init ;Display init

- очистить экранчик
;rcall lcd_clear ;Display clear

- поставить курсор на первое место
;ldi temp1,0b10000000 ;
;rcall lcd_command ; set cursor home

- хз, не помню ...
;ldi temp1,0b00000110 ;
;rcall lcd_command ; increment DDRAM, display not shift

- перейти на вторую строку.
;ldi temp1,0b11000000 ;
;rcall lcd_command ; goto second line

- отправить символ (сохранённый в регистре темп1)
;ldi temp1,0x6F ; ="o"
;rcall lcd_data ;Zeichen anzeigen


;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;; LCD-Routinen ;;
;; ============ ;;
;; (c)andreas-s@web.de ;;
;; ;;
;; 4bit-Interface ;;
;; DB4-DB7: PB0-PB3 ;;
;; RS: PB4 ;;
;; E: PB5 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;sendet ein Datenbyte an das LCD
lcd_data:
mov temp2, temp1 ;"Sicherungskopie" fьr
;die Ьbertragung des 2.Nibbles
swap temp1 ;Vertauschen
andi temp1, 0b00001111 ;oberes Nibble auf Null setzen
sbr temp1, 1<<4 ;entspricht 0b00010000
out PORTB, temp1 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
;2. Nibble, kein swap da es schon
;an der richtigen stelle ist
andi temp2, 0b00001111 ;obere Hдlfte auf Null setzen
sbr temp2, 1<<4 ;entspricht 0b00010000
out PORTB, temp2 ;ausgeben
rcall lcd_enable ;Enable-Routine aufrufen
rcall delay50us ;Delay-Routine aufrufen
ret ;zurьck zum Hauptprogramm

;sendet einen Befehl an das LCD
lcd_command: ;wie lcd_data, nur ohne RS zu setzen
mov temp2, temp1
swap temp1
andi temp1, 0b00001111; 0b00001111
out PORTB, temp1
rcall lcd_enable
andi temp2, 0b00001111 ; 0b00001111
out PORTB, temp2
rcall lcd_enable
rcall delay50us
ret

;erzeugt den Enable-Puls
lcd_enable:
sbi PORTB, 5 ;Enable high
rcall delay50us
cbi PORTB, 5 ;Enable wieder low
ret ;Und wieder zurьck

;Pause nach jeder Ьbertragung
delay50us: ;50us Pause
; =============================
; delay loop generator
; 500 cycles:
; -----------------------------
; delaying 498 cycles:
ldi temp0, $A6
WGLOOP0S: dec temp0
brne WGLOOP0S
; -----------------------------
; delaying 2 cycles:
nop
nop
; =============================
ret ;wieder zurьck

;Lдngere Pause fьr manche Befehle
delay5ms: ;5ms Pause
; =============================
; delay loop generator
; 50000 cycles:
; -----------------------------
; delaying 49995 cycles:
ldi temp0, $65
WGLOOP0A: ldi temp2, $A4
WGLOOP1A: dec temp2
brne WGLOOP1A
dec temp0
brne WGLOOP0A
; -----------------------------
; delaying 3 cycles:
ldi temp0, $01
WGLOOP2A: dec temp0
brne WGLOOP2A
; -----------------------------
; delaying 2 cycles:
nop
nop
; =============================
ret ; wieder zurьck

;Initialisierung: muss ganz am Anfang des Programms aufgerufen werden
lcd_init:
ldi temp3,50
powerupwait:
rcall delay5ms
dec temp3
brne powerupwait
ldi temp1, 0b00000011 ;muss 3mal hintereinander gesendet
out PORTB, temp1 ;werden zur Initialisierung
rcall lcd_enable ;1
rcall delay5ms
rcall lcd_enable ;2
rcall delay5ms
rcall lcd_enable ;und 3!
rcall delay5ms
ldi temp1, 0b00000010 ;4bit-Modus einstellen
out PORTB, temp1
rcall lcd_enable
rcall delay5ms
ldi temp1, 0b00101000 ; 5x8 dots
rcall lcd_command
ldi temp1, 0b00001100 ;...nochwas...
rcall lcd_command
ldi temp1, 0b00000100 ;endlich fertig
rcall lcd_command
ret

;Sendet den Befehl zur Lцschung des Displays
lcd_clear:
ldi temp1, 0b00000001 ;Display lцschen
rcall lcd_command
rcall delay5ms
ret

;#############



Составить ответ | Вернуться на конференцию

Ответы


Отправка ответа
Имя*: 
Пароль: 
E-mail: 
Тема*:

Сообщение:

Ссылка на URL: 
URL изображения: 

если вы незарегистрированный на форуме пользователь, то
для успешного добавления сообщения заполните поле, как указано ниже:
введите число 85:

Перейти к списку ответов | Конференция | Раздел "Электроника" | Главная страница | Карта сайта

Rambler's Top100 Рейтинг@Mail.ru
 
Web telesys.ru