#/▄▄▄▄▄/# · ···─═╗ Привет _All_ ! Пишет тебе *Vadim* ! _*▀▀▀▀▀*_ ╚═══════════════─────────────────····· · · ·
Hикак не могу понять, в чём ошибка.
Читается МК без проблем (команда 0x4, младший бит числа команды шлю первым, так что здесь ошибки нет->получение шестнадцати бит данных->команда 0x6, и т.д.). Шлю 0x6 и за ней данные с теми же интервалами - данные не изменяются.
Аппаратная часть взята с программатора с pic16f84.narod.ru. Можно было бы и самим программатором обойтись, да уж больно он шустрый - даже при замедлении работы в 5 раз считывает неверно, но пишет нормально.
Hиже приведён код моего программатора. Все функции проверены, проблема может быть лишь в PICSendData(). Hо в его коде ошибки не обнаружил... В таймингах уверен - одной микросекунды более чем достаточно данному МК в большинстве случаев.
#include <DOS.H>; #include <stdio.h>; #include <conio.h>; #include <math.h>; #include <string.h>; #include <process.h>; #define ESC 0x1B; int *b; int Cent_Base=0; char key=0;
int btfss(int value,int num){ int a; for (a=0;a<num;a++) value>>=1; if (value%2!=0) return 1; else return 0; }
void bcf(int &value,int num){ ++num; switch(num){ case 3: num=4; break; case 4: num=8; break; case 5: num=0x10; break; case 6: num=0x20; break; case 7: num=0x40; break; case 8: num=0x80; break; case 9: num=0x100; break; case 10: num=0x200; break; case 11: num=0x400; break; case 12: num=0x800; break; case 13: num=0x1000; break; case 14: num=0x2000; break; case 15: num=0x4000; break; case 16: num=0x8000; break;
} if (btfss(value,num-1)==1) value^=num; }
void bsf(int &value,int num){ ++num; switch(num){ case 3: num=4; break; case 4: num=8; break; case 5: num=0x10; break; case 6: num=0x20; break; case 7: num=0x40; break; case 8: num=0x80; break; case 9: num=0x100; break; case 10: num=0x200; break; case 11: num=0x400; break; case 12: num=0x800; break; case 13: num=0x1000; break; case 14: num=0x2000; break; case 15: num=0x4000; break; case 16: num=0x8000; break; } if (btfss(value,num-1)==0) value^=num; }
void outlpt(void){ //viewbin(Cent_Base); int a=Cent_Base; a^=0xFF; outportb(0x378,a); //viewbin(Cent_Base); //printf("%x|",Cent_Base); delay(1);//delay 1us }
void die(char msg[100]){ printf("\n%s\n",msg); exit(0); }
void PICStart(){ Cent_Base=0;//0V UProg outlpt(); Cent_Base=8;//+12V UProg outlpt(); }
void PICSendCommand(int value){ int a; /* D0 - -Data D1 - -Clock */ //printf("\nvalue=%x\n",value); for (a=0;a<6;a++){ bcf(Cent_Base,0);//Reset Data bsf(Cent_Base,1);//High Clock if (btfss(value,0)){// Low Bit First Cent_Base^=1; //printf("\n1|%d|%x\n",a,value); } value>>=1; outlpt(); bcf(Cent_Base,1);//Low Clock outlpt(); } //printf("----"); }
void PICSendData(int value){ int a; for (a=0;a<16;a++){ bsf(Cent_Base,1);//High Clock if (btfss(value,a)==1) bsf(Cent_Base,0); else bcf(Cent_Base,0); outlpt(); printf("%x|",Cent_Base); bcf(Cent_Base,1);//Low Clock outlpt(); } }
int PICRecvData(void){ int value=0; int a; //bsf(Cent_Base,1);//High Clock //outlpt(); //bcf(Cent_Base,0);//Low Clock, get empty bit (0) //outlpt(); bsf (Cent_Base,0); for (a=0;a<16;a++){ bsf(Cent_Base,1);//High Clock outlpt(); bcf(Cent_Base,1); outlpt(); if (btfss(inportb(0x379),6)==0)//Recv bit is inversing by K555LN2 bsf(value,a); //printf("%x|",inportb(0x279)); } //bsf(Cent_Base,1);//High Clock //outlpt(); //bcf(Cent_Base,0);//Low Clock, get empty bit (16) //outlpt(); value&=0x7FFE; value>>=1; return value; }
void main(void){ PICStart(); //PICSendCommand(0x2);//0x6-increment,0x4-read,0x2-write //printf("\n\n%x",PICRecvData()); //PICSendData(0x1234); // int line; int maxline=10; int byte; int maxbyte=10; int count=0;
printf("\n");
for (line=0;line<maxline;line++){ printf("%04X:",count); for (byte=0;byte<8;byte++){ PICSendCommand(0x4); delay(10); printf (" %04X",PICRecvData()); PICSendCommand(0x6); count++; } printf("\n"); // printf("%04X: %X %X %X %X %X %X %X %X %X %X %X %X %X %X %X",line,ar[0],ar[1],ar[2],ar[3],ar[4],ar[5],ar[6],ar[7],ar[8],ar[9],ar[10],ar[
11],ar[12],ar[13],ar[14]); }//PICSendData(0x1234); //PICViewBin(PICRecvData()); exit(0); · ···─═╗ Hу я вроде все сказал... Bye _*All*_ ! ╚═══════════════─────────────────····· · · · ... Windows - вирус с удобным интерфейсом.