Ребят делаю захват от внутреннего генератора. Считаю период до 9. Ниже код. В чем может быть ошибка, почему не запускается программа? #include <VE2_CC.h> #include "int17xxx.h" #pragma origin 0x8
uns16 time_counter; // ïåðåìåííàÿ çàõâàò çíà÷åíèÿ ïåðèîäà uns16 Period;// íåîáõîäèìûé ïåðèîä
interrupt iServer(void) { multi_interrupt_entry_and_save
PERIPHERAL_service: if(CA1IF) { Period=time_counter; time_counter = 0; CA1IF = 0; } TMR0_service: // save on demand: PRODL,PRODH,TBLPTRH,TBLPTRL,FSR0,FSR1 /* process Timer 0 interrupt */ // T0IF is automatically cleared when the CPU vectors to 0x10 // restore on demand: PRODL,PRODH,TBLPTRH,TBLPTRL,FSR0,FSR1 T0CKI_service: INT_service: interrupt_exit_and_restore } /******************/
void delay () { int32 i; for(i = 0;i < 50000; ++i) ; } void segment (uns16 i, int j) { switch (i) { case 0: {PORTC = 0b00111111;delay();} break; // 0 case 1: PORTC = 0b00000110;break; // 1 case 2: PORTC = 0b01011011;break; // 2 case 3: PORTC = 0b01001111;break; // 3 case 4: PORTC = 0b01100110;break; // 4 case 5: PORTC = 0b01101101;break; // 5 case 6: PORTC = 0b01111101;break; // 6 case 7: PORTC = 0b00000111;break; // 7 case 8: PORTC = 0b01111111;break; // 8 } switch (j) { case 0: PORTD = 0b10000000;break; // 1 case 1: PORTD = 0b01000000;break; // 2 case 2: PORTD = 0b00100000;break; // 3 case 3: PORTD = 0b00010000;break; // 4 case 4: PORTD = 0b00001000;break; // 5 case 5: PORTD = 0b00000100;break; // 6 case 6: PORTD = 0b00000010;break; // 7 case 7: PORTD = 0b00000001;break; // 8 } }
void main(void) { GLINTD = 0; // áèò ãëîáàëüíîãî ðàçðåøåíèÿ ïðåðûâàíèé INTSTA = 0b00001000;// íàñòðîèë - ðàçðåøèë âñå ïåðèôèéíûå ïðåîáðàçîâàíèÿ; PIE1 = 0b01000100; // íàñòðîèë - ðàçðåøèë ïðåðûâàíèÿ îò çàõâàòà 1 è òàéìåðà 3 PIR1 = 0b01000100; // íàñòðîèë - ïðîèçîøåë çàõâàò 1 è ïðîèçîøëî ïåðåïîëíåíèå òàéìåðà 3 TMR3CS = 0; // èñòî÷íèê âíóòðåííèé òàêòîâûé ñèãíàë FC/4; TCON2 = 0b01001100; // íàñòðîèë - âêëþ÷èë òàéìåð 3, àêòèâèðîâàë çàõâàò 1; ? // çàõâàò íà ïåðåäíåì ôðîíòå CA1ED0 = 1; CA1ED1 = 0; // íàñòðîèë ïîðòû êàê âûõîäû DDRC = 0; DDRD = 0; time_counter = 0; int i; // ïåðåìåííàÿ äëÿ ñ÷åò÷èêà; i = 0; while (1) { if(Period > 0 && Period < 9) {segment (Period,i); delay (); ++i;} else Period = 0;
}} Заранее благодарен!
|