User Tag List

Показано с 41 по 50 из 245

Тема: PS/2 адаптер клавиатуры для Специалиста

Древовидный режим

Предыдущее сообщение Предыдущее сообщение   Следующее сообщение Следующее сообщение
  1. #11

    Регистрация
    01.12.2010
    Адрес
    г. Санкт-Петербург
    Сообщений
    1,657
    Записей в дневнике
    21
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    3
    Поблагодарили
    2 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Возможно скорости МК не хватит. Тогда я буду тормозить процессор сигналом RDY. А это еще один провод, которого нет.

    И тормозить то не хочется, так как через эту же микросхему сделан вывод звука, записи на магнитофон и цвета.



    ---------- Post added at 14:14 ---------- Previous post was at 14:10 ----------

    Цитата Сообщение от aviator Посмотреть сообщение
    Кстати, а почему бы не эмулировать ВВ55 на атмеге?
    ИМХО сложнее. И надо будет вторгаться в схему компьютера. А сейчас схема компьютера неизменна

    ---------- Post added at 15:38 ---------- Previous post was at 14:14 ----------

    Переписал обработчик прерывания на ассемблере. Пока результат такой:

    - На тестовой ПЗУ всё работает.

    - На стандартной ПЗУ (мониторе, самом первом) хрен знает.

    Если нажать одну из верхних кнопок F, HELP ... NF по появляется курсор. Но курсор не мигает. Мигать курсор начинает, только когда отпускаешь клавишу. Дальше от нажатий клавиш ничего не зависит.

    ---------- Post added at 15:41 ---------- Previous post was at 15:38 ----------

    Суть обработчика прерывания такая

    Код:
      Если порт С на выход, то выполняем
        PORTC = b2c[PINB] & d2c[PIND & 0x33];
    
      иначе выполняем
        PORTB = c2b[PINC]; 
        PORTD = c2d[PINC] & (PORTD | 0x33);
      
      Плюс, меняем режим, если на порте выбранном для чтения одни единицы.
    Код:
    interrupt [EXT_INT0] void ext_int0() {
    #asm
    .EQU DDRC=0x14
    .EQU DDRB=0x17
    .EQU DDRD=0x11
    .EQU PORTB=0x18
    .EQU PORTC=0x15
    .EQU PORTD=0x12
            ; Сохраняем флаги
            IN   R28, 0x3F  ; 1 SREG
            PUSH R28        ; 2
    
            ; Если DDRC в режиме записи, то переходим ниже
            IN   R28, DDRC ; 1
            CPI  R28, 0    ; 1  
            BRNE _v2       ; 2
    
            ; *** ВАРИАНТ 1 ***
            
            ; PORTB = c2b[(unsigned char)PINC]; 
            IN   R28, 0x13 ; 1 PINC
            CPI  R28, 0x3F ; 1
            BREQ  _v12     ; 2
            LDI  R29, 2    ; 1
            LD   R28, Y    ; 2
            OUT  0x18, R28 ; 1 PORTB
    
            ; PORTD = (PORTD | 0x33) & c2d[(unsigned char)PINC];
            IN   R28, 0x13 ; 1 PINC
            SUBI R28, -64  ; 1
            LD   R28, Y    ; 2
    
            IN   R29, 0x12 ; 1 PORTD
            ORI  R29, 0x33 ; 1
            AND  R29, R28  ; 1
            OUT  0x12, R29 ; 1 PORTD
    	
            ; Выход
            POP  R28
            OUT  0x3F, R28 ; SREG
            RETI
    
            ; *** ВАРИАНТ 1.2 ***
    
    _v12:   ; Переводим порты B,D в режим чтения
            ; Переводим порт C в режим записи
            CLR  R28
            OUT  DDRB, R28
            SER  R28
            OUT  PORTB, R28
            OUT DDRC, R28
            IN   R28, DDRD
            ANDI R28, ~0x33
            OUT  DDRD, R28
            IN   R28, PORTD
            ORI  R28, 0x33
            OUT  PORTD, R28
    
            ; PORTC = b2c[PINB] & d2c[PIND & 0x33];
            IN   R28, 0x16  ; 1 PINB
        	LDI  R29, 1     ; 1
        	LD   R28, Y     ; 2
        	OUT  0x15, R28  ; 1 PORTC
    
    	IN   R28, 0x10  ; 1 PIND
    	ANDI R28, 0x33  ; 1 
    	LDI  R29, 2     ; 1
    	SUBI R28, -128  ; 1
            LD   R28, Y     ; 2
    
        	IN   R29, 0x15  ; 1 PORTC        
        	AND  R28, R29   ; 1
        	OUT  0x15, R28  ; 1 PORTC
    
            ; Выход
            POP  R28
            OUT  0x3F, R28 ; SREG
            RETI
    
            ; *** ВАРИАНТ 2 ***
    _v2:
            ; PORTC = b2c[PINB] & d2c[PIND & 0x33];
            IN   R28, 0x16  ; 1 PINB
        	LDI  R29, 1     ; 1
        	LD   R28, Y     ; 2
        	OUT  0x15, R28  ; 1 PORTC
    
        	IN   R28, 0x10  ; 1 PIND
        	ANDI R28, 0x33  ; 1 
            CPI  R28, 0x33  ; 1
            BREQ  _v21_x    ; 2 
        	LDI  R29, 2     ; 1
        	SUBI R28, -128  ; 1
            LD   R28, Y     ; 2
    
    	IN   R29, 0x15  ; 1 PORTC        
    	AND  R28, R29   ; 1
    	OUT  0x15, R28  ; 1 PORTC
    
    _v21_q:
            POP  R28
            OUT  0x3F, R28 ; SREG
            RETI
    
            ; Дополнителная проверка
    _v21_x:
            IN   R28, 0x16  ; 1 PINB
            CPI  R28, 0xFF  ; 1
            BRNE  _v21_q    ; 2 
    
            ; *** ВАРИАНТ 2.1 ***
    
            ; Переводим порт C в режим чтения
            ; Переводим порты B,D в режим записи
            CLR R28
            OUT DDRC, R28
            SER R28
            OUT PORTC, R28
            OUT DDRB, R28
            IN R28, DDRD
            ORI R28, 0x33
            OUT DDRD, R28
    
            ; PORTB = c2b[(unsigned char)PINC]; 
         	IN   R28, 0x13 ; 1 PINC
        	LDI  R29, 2    ; 1
    	LD   R28, Y    ; 2
        	OUT  0x18,R28  ; 1 PORTB
    
            ; PORTD = (PORTD | 0x33) & c2d[(unsigned char)PINC];
        	IN   R28, 0x13 ; 1 PINC
        	SUBI R28, -64  ; 1
        	LD   R28, Y    ; 2
    
        	IN   R29, 0x12 ; 1 PORTD
        	ORI  R29, 0x33 ; 1
        	AND  R29, R28  ; 1
        	OUT  0x12, R29 ; 1 PORTD
    
            ; Выход
            POP  R28
            OUT  0x3F, R28 ; SREG          
    #endasm
    }
    Может быть МК не успевает. А может быть я ошибся где то.
    Последний раз редактировалось vinxru; 05.01.2013 в 16:45.

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Ответов: 153
    Последнее: 16.12.2021, 19:07
  2. Адаптер Z80->ZX-BUS
    от zx-kit в разделе Несортированное железо
    Ответов: 12
    Последнее: 05.10.2011, 11:35
  3. CD адаптер
    от alexsan в разделе БК-0010/0011
    Ответов: 2
    Последнее: 12.09.2011, 21:54
  4. Изучается спрос на плату для Специалиста
    от Павел Рябцов в разделе Барахолка (архив)
    Ответов: 109
    Последнее: 30.11.2010, 10:16
  5. Продается Лик (клон Специалиста)
    от KALDYH в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 20.02.2010, 14:29

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •