Читал мануал то стандарту АТА написал программу которая должна читать информацио о винте IDENTIFY DEVICE...
вот что получилось:
Код
#include <pic18.h>
#include "delay.h"
#define hdd_data_port_low (PORTC)
#define hdd_data_port_hi (PORTD)
#define hdd_da0 (RB0)
#define hdd_da1 (RB1)
#define hdd_da2 (RB2)
#define hdd_cs1 (RB3)
#define hdd_cs3 (RB4)
#define hdd_diow (RB5)
#define hdd_dior (RB6)
#define hdd_iordy (RB7)
void init(void);
void main(void){
init();
hdd_cs1 = 1; // Data register...
hdd_cs3 = 0;
hdd_da2 = 0;
hdd_da1 = 0;
hdd_da0 = 0;
hdd_data_port_low = 0xEC; // IDENTIFY DEVICE command...
DelayMs(10);
hdd_diow = 0x00;
DelayMs(10);
hdd_diow = 0x01;
TRISC = 0xFF;
TRISD = 0xFF;
if (hdd_iordy) { //читаем результат...
hdd_diow = 0x00;
DelayMs(10);
hdd_diow = 0x01;
DelayMs(10);
}
while(1);
}
void init(void){
TRISB = 0b10000000;
TRISC = 0x00;
TRISD = 0x00;
PORTC = 0;
PORTD = 0;
hdd_dior = 0x01;
hdd_diow = 0x01;
}
#include "delay.h"
#define hdd_data_port_low (PORTC)
#define hdd_data_port_hi (PORTD)
#define hdd_da0 (RB0)
#define hdd_da1 (RB1)
#define hdd_da2 (RB2)
#define hdd_cs1 (RB3)
#define hdd_cs3 (RB4)
#define hdd_diow (RB5)
#define hdd_dior (RB6)
#define hdd_iordy (RB7)
void init(void);
void main(void){
init();
hdd_cs1 = 1; // Data register...
hdd_cs3 = 0;
hdd_da2 = 0;
hdd_da1 = 0;
hdd_da0 = 0;
hdd_data_port_low = 0xEC; // IDENTIFY DEVICE command...
DelayMs(10);
hdd_diow = 0x00;
DelayMs(10);
hdd_diow = 0x01;
TRISC = 0xFF;
TRISD = 0xFF;
if (hdd_iordy) { //читаем результат...
hdd_diow = 0x00;
DelayMs(10);
hdd_diow = 0x01;
DelayMs(10);
}
while(1);
}
void init(void){
TRISB = 0b10000000;
TRISC = 0x00;
TRISD = 0x00;
PORTC = 0;
PORTD = 0;
hdd_dior = 0x01;
hdd_diow = 0x01;
}
уже все перепробывал, не идет и все...
скорее всего намудрил что-то вообше не то

поясните как делать это по человечески
ЗЫ листинг просто показывает что за чем я делал...то, что результат порядка 250 бит я зню...
но мне не одного не пришло
