Стенд на mcs51(AT89s52)

Тема в разделе "WASM.ELECTRONICS", создана пользователем a9d, 19 янв 2009.

  1. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Где-то ошибочка.
    Код в "студию".
    Гляну что там.
     
  2. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
  3. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    В архиве находится весь проэкт+ прога котору использую для подключения к COM порту.

    Управление(команды передаются в ASCII кодировке):
    0 - установить размер сектора;
    0- 8 байт
    1- 16 байт
    2- 32 байт
    Пример: 00 - размер сектора 8 байт.

    1 - Форматирование диска. Пашет корректно только в Протеусе((

    2 - Установить головку в заданный сектор.
    CHS адресация:
    0..3 - номер головки
    0..3 - номер цилиндра
    0..(63|32|16) -сектор. Нулевой использовать нельзя
    Пример: 20312 - 0я головка,3й цилиндр,12й сектор.

    LBA адресация:
    0000 - номер сектора
    Пример: 0100 - установить голку на 100й сектор

    3 - запись
    Пример: 3qwertyui

    4 - чтение

    i - Информация о диске

    I - Информация о диске, сокращенная

    с - смена типа адресации.
    0 - CHS
    1 - LBA
    Пример: с1 - тип адресации LBA

    d - отладочная функция. Выводит заданное число секторов.
    0000 - номер сектора
    0000 - количество секторов для вывода
    Пример: d09990010 - Вывести 10ть секторов начиная с 999-го. Пашет не корректно.

    a - отладочная функция. Выводит текущее смещение на сектор.

    h - справка
     
  4. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    В архиве самая последняя версия проэкта. Многое исправлено. И походу все работает как надо.
     
  5. S_Alex

    S_Alex Alex

    Публикаций:
    0
    Регистрация:
    27 авг 2004
    Сообщения:
    561
    Адрес:
    Ukraine
    Старайся применять макросы. С ними чуть-чуть легче код писать, да и разобраться в проге становится легче.
    Втот пример. Гораздо компактней исходник выглядит.
    Код (Text):
    1. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    2. ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    3. mSwich      MACRO   Key, Addr
    4.     cjne    a,#Key,$+9
    5.     lcall   Addr
    6.     ljmp    EndSwich
    7.             ENDM
    8. ; -------------------------------------------------------------------------
    9. mEndSwich   MACRO
    10. EndSwich    equ $
    11.             ENDM
    12. ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
    13. ;<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    14.  
    15. MainLoop:
    16.  
    17.   JNB RI, $   ;Подождать окончания приёма байта по последовательному порту
    18.   MOV A, SBUF ;и скопировать его в аккумулятор
    19.   clr RI
    20.  
    21.     mSwich  '0',CreateDisk          ;Изменение диска
    22.     mSwich  '1',FormatDisk          ;Форматирование диска
    23.     mSwich  '2',SetSector           ;установка головки
    24.     mSwich  '3',WriteSector         ;запись
    25.     mSwich  '4',ReadSector          ;чтение
    26.     mSwich  'i',DiskInfo            ;Информация о диске (человек)
    27.     mSwich  'I',DiskInfoComp        ;Информация о диске (компьютер)
    28.     mSwich  'h',HDisk               ;Справка
    29.     mSwich  'c',AddressingTheDisc   ;Тип адресации
    30.     mSwich  'd',Debug               ;отладка
    31.     mSwich  'a',DebugInfo           ;вывести смещение
    32.     mEndSwich
    33.    
    34. ; A0:
    35. ;  CJNE A, #30h,A1    ;0  размер сектора
    36. ;  jmp CDisk
    Совет: Когда вылаживаешь проект, для уменьшения объема, можно смело очистить паку ВАК(храниться откат для каждого файла).
     
  6. a9d

    a9d New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2006
    Сообщения:
    234
    Адрес:
    Zimbabwe
    Спасибо. Это мой первый проэкт с mcs51. Восновном до этого работал с AVR. Поэтому со всеми тонкостями и макросами не знаком. Сделал как мог.

    ЗЫ: комманда d00001007 не выводит все сектора, так как не учитывает нулевые секторы. Реальное количество секторов на диске, при размере сектора в 8-м байт, это 4*4*64=1024.