mejia 0 15 июня, 2005 Опубликовано 15 июня, 2005 · Жалоба есть система тестирования проги VMLAB называется, наверное ее все знают, вообщем я по совету документов создал такой файл: nemesis.prj: .MICRO "AT90S2313" .POWER VDD=5 VSS=0 .CLOCK 4meg .PROGRAM "nemesis.hex" D1 VDD PB0 D2 VDD PB1 D3 VDD PB2 D4 VDD PB3 D5 VDD PB4 D6 VDD PB5 D7 VDD PB6 D8 VDD PB7// диоды с 1 по 7 //// естествеено присобачиваю файл nemesis.hex нажимаю F9 пишет: Success! All ready to run в коде макере ... но при запуске программы (f5 или Traceinto(f7) пишет: Starting hardware-software co-simulation... [PC = $0013, Time = 0.51 ms, {MEM}]: Attempt to write in an forbidden position ... я так понимаю прога дохнет когда програмный счетчик доходит до 13-й команды , но че он хочет этим сказать не понимаю можете объяснить багу? код скомпилирован (=> ошибок нет :rolleyes: ) // Programm by G14 POWER aka Mejia // ICC-AVR application builder : 11.03.2002 20:01:52 // Target : 2313 // Crystal: 3.6864Mhz //poluchaem 4 char s kompa, analiziruem pervie 1 bait, zdes lejit kod komandi //2 bait - sotni //3 bait - desatki //4 bait - edinici //ZADACHA: ZASTAVIT SVETODIODI MORGAT s kompa konechno cherez //COM PORT // 8 svetodiodov s kompa formiruut (4 baita) komandu //naprimer vse svetodiodi zashisheni to eto 0255 //1 bait =0000 //2 bait=2 //3=2 //4=5 #include <io2313v.h> #include <macros.h> ////////////////////////// /// global peremennie unsigned int temp; // vsegda ponadobitsa char prinataya_stroka; // zdes xranitsa chislo SOTNI,DESATKI,EDINICI char counter; // schetchik bitov char komanda; //zdes xranitsa komanda char nojkas[]={0,1,2,3,4,5,6,7}; //zdes nomera nojek char x[4]; //ves massiv polucenii iz COM ////////////////////////// /// prototipi functii void port_init(void); // initializatia porta void uart0_init(void); // init baud rate for komp void int0_isr(void); void init_devices(void); void svetodiodon(char nojka); //vkluchaet svetodiod void svetodiodoff(char nojka); //vikluchaet svetodiod void main(void) { init_devices(); while(1); } char cou=0; // getting short int from COM PORT #pragma interrupt_handler get_result:8 void get_result() { x[cou]=UDR;cou++; if (cou==4) {cou=0;} } void sort() { //poluchaet pachku bait nado preobrazovat etu xnu v short int // v RXD -doljno bit podrad 4 baita poslanie s kompa // 0-bait, kod // 1-sotni // 2-desatki // 3-edinici //x[0]=RXD;// 1 bait // kod //x[1]=RXD;// 2 bait //x[2]=RXD;// 3 bait //x[3]=RXD;// 4 bait // nujno temp= 0000xxxxyyyyzzzzpppp // ^^^^ - kod operacii // dopustim mi polucili 0123 nado preobr v verhnee short int temprez; //zdes vremenie resultati short int temp; itoa(&x[0],temp,10); // v a xranitsa maska bitov komanda=temp; itoa(&x[1],temprez,10); // v a xranitsa maska bitov temprez=temprez*100; temp=temp+temprez; itoa(&x[2],temprez,10); // v a xranitsa maska bitov temprez=temprez*10; temp=temp+temprez; itoa(&x[3],temprez,10); // v a xranitsa maska bitov temp=temp+temprez; //krainie levie 4 razrada ne smogut zateretsa prinataya_stroka=temp;//zdes vixodnoya stroka work(); } // sama rabota void work() { // komanda =x[0]; char i; short int soderjimoe; // soderjimoe komandi //prinataya_stroka = chislo, naprimer (3 baita iz soobshenia) if (komanda==0) { char b; //vremenno xranitsa char chtob udobnee bilo for (i=0;i<8;i++) { b=prinataya_stroka; b<<=i; b>>=i; if (b==1) svetodiodon(nojkas); if (b==0) svetodiodoff(nojkas); } } // if (komanda==1) {dvigatel;} // if (komanda==2) {ventilator;} } //////////////////////////////////////////////// void svetodiodon(char nojka) { PORTB &=~BIT (nojka); } void svetodiodoff(char nojka) { PORTB ^= BIT (nojka); } ////////////////////////////////////////////////////////////// void port_init(void) { DDRB =0xFF; //init port B na vixod PORTB = 0xFF; //vkl all PORTD = 0x00; //port vkl DDRD = 0x00; //vse na vxod } //call this routine to initialise all peripherals void init_devices(void) { CLI(); port_init(); uart0_init(); MCUCR = 0x00; GIMSK = 0x00; TIMSK = 0x00; SEI(); } //UART0 initialisation // desired baud rate: 9600 // actual: baud rate:9600 (0,0%) // void uart0_init(void) { UCR = 0x00; //disable while setting baud rate UBRR = 0x17; //set baud rate UCR = 0x08; //enable } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться