Помгите с прогой ат128!
(«Телесистемы»: Конференция «Микроконтроллеры и их применение»)

миниатюрный аудио-видеорекордер mAVR

Отправлено bigen 08 июля 2004 г. 19:18

Ситуация такая: на порт А подключены дисплей лсд и мл. разряды устройства IDE, пытаюсь прочитать регистр STATUS из IDE и отбразить "его"(я просто к ниблам данных прибавляю 0Х30) на дисплее. Вместо 00(IDE не подключен) получаю на экране 0х35 - это остаток от цифры 55, которую отображаю в начале.
Создается такое впечатление, что я неправильно настраиваю направление передачи и читаю защелку.
Где-то есть ошибки.
С AVRами работаю впервые.

Вставлять файл не знаю как, так что прога прямо здесь.

Заранее благодарен, Игорь

.INCLUDE "m128def.inc"

.CSEG

.ORG 000
BEGIN: JMP START

.ORG 0x100

;############## НАСТРОЙКА ATMEGA

START: LDI YL,0xFF ;СТЕК - 0FFF
LDI YH,0x0F
OUT SPL,YL
OUT SPH,YH

; НАСТРОЙКА ПОРТОВ F,G НА ВЫВОД
LDI R18,0xFF
NOP
STS DDRF,R18
LDI R18,0x1F
NOP
STS DDRG,R18
LDI R16,0x20
STS PORTF,R16
LDI R16,0xF
STS PORTG,R16
;############# НАСТРОЙКА ДИСПЛЕЯ

LDI R18,0xFF
NOP
OUT DDRA,R18 ;порт А на вывод
OUT DDRD,R18 ;ПРОРТ D НА ВЫВОД
CBI PORTD,PIND5 ;RS=0
CBI PORTD,PIND6 ;RW=0
SBI PORTD,PIND7 ;E=1
CALL DEL41
CALL DEL41
CALL DEL41

LDI R18,0x38
OUT PORTA,R18
CALL COMMB
CALL DEL41

LDI R18,0x38
OUT PORTA,R18 ;2 СТРОКИ, МАТРИЦА 5Х7 ТОЧЕК
CALL COMMB
CALL DEL100
LDI R18,0x0C
OUT PORTA,R18 ;ВКЛЮЧЕНИЕ ДИСПЛЕЯ
CALL COMMB
LDI R18,0x01
OUT PORTA,R18 ;ОЧИСТКА ДИСПЛЕЯ
CALL COMMB

LDI R18,0x80 ;ЗАПИСЬ В ПЕРВУЮ СТРОКУ
OUT PORTA,R18
CALL COMMB
; JMP T1

LDI R16,0x55

BB:
MOV R15,R16
ANDI R16,0xF0
SWAP R16
LDI R17,0x30
ADD R16,R17
MOV R10,R16
MOV R16,R15
ANDI R16,0x0F
LDI R17,0x30
ADD R16,R17
MOV R12,R16
MOV R16,R10
CALL M
MOV R16,R12
CALL M
JMP T1
M: OUT PORTA,R16
CALL DATB
CALL DEL41
RET

T1:
LDI R16,0x37
CALL RUTR
;BB:
JMP BB
;
RUTR:
STS PORTF,R16
LDI R18,0
NOP
OUT DDRC,R18
LDI R16,0x0B
STS PORTG,R16; ИМПУЛЬC RD
NOP
NOP
LDI R18,0
NOP
OUT DDRA,R18
IN R16,PINA
LDI R17,0xF
STS PORTG,R17
LDI R17,0xFF
STS PORTF,R17
NOP
OUT DDRA,R17
OUT DDRC,R17
RET

;JMP T1

COMMB: CBI PORTD,PIND5 ;RS
JMP BDEL
DATB: SBI PORTD,PIND5 ;RS
NOP
NOP
NOP
NOP
BDEL: CBI PORTD,PIND6 ;RW
CBI PORTD,PIND7 ;E
NOP
NOP
NOP
NOP
SBI PORTD,PIND7 ;E
NOP

;ПРОВЕРКА НА ЗАНЯТОСТЬ ДИСПЛЕЯ
; RET ;#########
LDI R18,0x00
NOP
OUT DDRA,R18 ;PORTA НА ВВОД
SBI PORTD,PIND6 ;RW=1
CBI PORTD,PIND5 ;RS=0
CBI PORTD,PIND7 ;E=0
NOP
NOP
NOP
SBI PORTD,PIND7 ;E=1
BLOOP: NOP
IN R17,PINA
ANDI R17,0x80
CPI R17,0x80
BREQ BLOOP
;ДВОЙНАЯ ПРОВЕРКА
TWICE: IN R17,PINA
ANDI R17,0x80
CPI R17,0x80
BREQ TWICE
CBI PORTD,PIND6 ;RW=0
LDI R18,0xFF
NOP
OUT DDRA,R18

RET

DEL41: ; ПП ЗАДЕРЖКИ 4,1mS
LDI R22,0x28
LDI R23,0xFF
M1: DEC R23
CPI R23,00
BRNE M1
DEC R22
CPI R22,0
BRNE M1
RET

DEL100: ;ПП ЗАДЕРЖКИ 100uS
LDI R22,0xF8
M2: DEC R22
CPI R22,0
BRNE M2
RET

Составить ответ  |||  Конференция  |||  Архив

Ответы



Перейти к списку ответов  |||  Конференция  |||  Архив  |||  Главная страница  |||  Содержание  |||  Без кадра

E-mail: info@telesys.ru