Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: MAX7219 (помогите разобраться пжл)
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > MCS51
Lotor
Люди! Помогите понять, почему не получается управлять семисегментниками через AD7219... Или хотя бы дайте примеры кодов (алгоритмов) работы с ней. Симулирую схему в Proteus'е. Вот например кусок кода, где включается тестовый режим, при котором должны светиться все разряды, но этого нет:
Цитата
DIN EQU P2.5
LOAD EQU P2.6
CLK EQU P2.7
MAX_ADR EQU R5
MAX_DATA EQU R6
ORG 0h
LJMP START
ORG 100H

START:
MOV P2,#0FFh
MOV MAX_ADR, #0fH ; адрес тестового регистра
MOV MAX_DATA, #01H
SETB LOAD
CLR CLK
MOV A, #10h ; счетчик посылки 16 бит
CLR LOAD
LOOP:
PUSH ACC ; сохраняем счетчик посылки
MOV a,MAX_DATA
RLC A
MOV a,MAX_ADR
RLC A
MOV DIN, C
SETB CLK ; строб
CLR CLK
POP acc
DJNZ ACC, LOOP
SETB LOAD
END

Скажите пожалуйста, я дурак или Proteus?...
Omen_13
1. Инициализацию сделал? Если нет то не удивляйся - работать не будет
2. Вот код в АСМе, будут вопросы пиши

Код
;таблица кодов для инициализации режима работы MAX7219
TDisplInit:
; адрес,данные  
    DB  0Fh,00h;ТЕСТ ИНДИКАТОРОВ ВЫКЛЮЧЕН
    DB  0Ch,01h;нормальная работа
    DB  0Bh,07h;все индикаторы включены
    DB  09h,00h;дешифраторы выключены
    DB  0Ah,0Fh;яркость максимальная


InitMax7219:;инициализация MAX7219
    MOV    R3,#05h
    MOV    R0,#00h    
    MOV    DPTR,#TDisplInit;таблица инициализации MAX7219
LInitMax7219:
    MOV    A,R0
    INC    R0
    MOVC    A,@a+DPTR;адрес
    ANL    P0,#0F0h;выбор MAX7219
    MOV    R2,#08h;запись в счетчик циклов
    CALL    WriteMax7219
    MOV    A,R0
    INC    R0
    MOVC    A,@a+DPTR;значение
    MOV    R2,#08h;запись в счетчик циклов
    CALL    WriteMax7219
    ORL    P0,#08h;отключение MAX7219
    DJNZ    R3,LInitMax7219
    RET


Out_Max7219:
    MOV    R0,#RAM_out;адрес ОЗУ первой ячейки на запись в МАХ7219
    MOV    R1,#00h
    MOV    R3,#08h;запись в счетчик циклов
    MOV    DPTR,#TDisplAdr;адреса соответсвий RAM_out регистрам МАХ7219
LDisplLine8:
    MOV    A,R1    
    MOVC    A,@a+DPTR;адрес регистра

    ANL    P0,#0F0h;выбор MAX7219 - установил все линии в "0"
    MOV    R2,#08h;запись в счетчик циклов
    CALL    WriteMax7219

    MOV    A,@R0;содержимое выводимой ячейки
    MOV    R2,#08h;запись в счетчик циклов
    CALL    WriteMax7219
    SETB    LOAD_MAX;отключение MAX7219

    INC    R0;переход к следующей ячейке
    INC    R1;переход к следующему адресу
    DJNZ    R3,LDisplLine8
    RET;Вы будете смеяться но это все !!!


WriteMax7219:;запись по внутренней последовательной шине
; a записываемый байт
; R2 счетчик
    CLR    C
LWMax7219:
    RLC    A;выделяем бит данных
    MOV    DIN_MAX,C;если бит равен 1 он установит D1, если равен 0 сбросит
    NOP
    NOP
    SETB    SCLK_MAX;формирование фронта D0
    NOP
    CLR    SCLK_MAX;формирование спада D0
    DJNZ    R2,LWMax7219
    RET
Lotor
Инициализацию-то и не сделал... Огромное спасибо! Особенно за код - в ассемблере для x51 опыта практически нет. Теперь Proteus симулирует нормально, а мне обеспечен здоровый сон)
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.