|
Виж темите без отговор | Виж активните теми
Дата и час: Пон Юли 27, 2026 8:12 pm
| Автор |
Съобщение |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: LED isn`t Blinking!
|
| Нед Авг 17, 2014 8:22 pm |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: LED isn`t Blinking!
Аз говоря по принцип. Ако се обработва в прекъсване и всичко се вкарва в буфер. Така за времето в което следващия символ се "точи" има достатъчно време за прекъсването да се изчете и да се вкара в буфера.
|
| Нед Авг 17, 2014 8:38 pm |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
Средата е MPLAB IDE Компилаторът е C18 compiler,но това което съм прикачил е копирано чрез DEV C++ .Беше ми по лесно чрез него да го публикувам,но за съжаление стана по-неразбрано.Аз подавам 'Á'.Бях правил разни експерименти и съм публикувал този с 1 -цата.
|
| Нед Авг 17, 2014 8:50 pm |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
Пробвах кода с hex произведен от MPLAB върху реално устройство и на Proteus sim.Не работи!Аз подавам 1 -ца от RealTerm!Надявам се, да не греша?!
|
| Нед Авг 17, 2014 9:21 pm |
|
 |
|
ToHu
Ранг: Форумен бог
Регистриран на: Нед Сеп 26, 2004 9:21 pm Мнения: 30686 Местоположение: София
|
 Re: LED isn`t Blinking!
Идея нямам какви са уарт функциите в мплаба, това cUART_char е някъде дефинирано като Rx буфера или що ? Въпроса е по скоро към колегата дал кода.
|
| Нед Авг 17, 2014 11:01 pm |
|
 |
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 3:18 pm Мнения: 363 Местоположение: Varna
|
 Re: LED isn`t Blinking!
Проблемния код е Трябва да стане За повече информация http://ww1.microchip.com/downloads/en/devicedoc/51288f.pdfТака при мен работи ( поне в протеус  ).  |  |  |  | Код: // Serial communications example with MAX232R. // using serial receive interrupt.
/* Задачата е да се изпрати от SerialPort Terminal през USART,някакъв предварително избран символ, като например 'a'. Този символ да се присвои на PORTB и това да се индикира от LED1, който е прикрепен към RB1.Задачката е проста за разбиращите,но аз съм начинаещ и нещо не ми се получава! Използувам MPLAB IDE и C18 compiler.Кодът се компилира,минава през MPLAP SIM,но диодът не светва. Опитвам да симулирам и чрез Proteus,но и там е същото.Вероятно имам проблем в кода,не не мога да се справя сам!*/ //***************************************************************************************************** #include <p18f2550.h> #include <delays.h> #include <usart.h>
/** CONFIGURATION ********************************************************************************************************/
#if defined(PIC18F2550_USB) // Configuration bits #pragma config PLLDIV = 5 // (20 MHz crystal) #pragma config CPUDIV = OSC1_PLL2 #pragma config USBDIV = 2 // Clock source from 96MHz PLL/2 #pragma config FOSC = HSPLL_HS #pragma config FCMEN = OFF #pragma config IESO = OFF #pragma config PWRT = OFF #pragma config BOR = ON #pragma config BORV = 3 #pragma config VREGEN = ON // USB Voltage Regulator #pragma config WDT = OFF #pragma config WDTPS = 32768 #pragma config MCLRE = ON #pragma config LPT1OSC = OFF #pragma config PBADEN = OFF // #pragma config CCP2MX = ON #pragma config STVREN = ON #pragma config LVP = OFF // #pragma config ICPRT = OFF // Dedicated In-Circuit Debug/Programming #pragma config XINST = OFF // Extended Instruction Set #pragma config CP0 = OFF #pragma config CP1 = OFF // #pragma config CP2 = OFF // #pragma config CP3 = OFF #pragma config CPB = OFF // #pragma config CPD = OFF #pragma config WRT0 = OFF #pragma config WRT1 = OFF // #pragma config WRT2 = OFF // #pragma config WRT3 = OFF #pragma config WRTB = OFF // Boot Block Write Protection #pragma config WRTC = OFF // #pragma config WRTD = OFF #pragma config EBTR0 = OFF #pragma config EBTR1 = OFF // #pragma config EBTR2 = OFF // #pragma config EBTR3 = OFF #pragma config EBTRB = OFF #endif
//******************************DECLARATION OF GLOBAL VARIABLES************************************************************** char data; volatile unsigned char cUART_data_flg, cUART_char; //******************************Declaration of Function Prototype************************************************************
char ReadUSART( void ); void init_uart(void); void UART_putc(unsigned char c); void InterruptHandlerLow (); void WriteUSART( char data );
//*************************************************************************************************************************** // LED Setings: #define setpin() TRISB = 0; // Set all pins to output #define LED1 LATBbits.LATB1 // RB1 #define LED1_on()LED1 = 1; // Set pin to High #define LED1_off()LED1 = 0; // Set pin to Low
void main(void) { setpin(); // Init LED init_uart(); // Init UART module while(1) // Create Loop { while(!cUART_data_flg); // Wait for data cUART_data_flg = 0; //data = ReadUSART(); // Read data PORTB = cUART_char; // The receive data is send to PORTB if(cUART_char=='1') { // If the received data is equal to the 'A' LED1_on(); // LED blinking Delay10KTCYx(250); // Dealay 250K cycles LED1_off(); } }
}
//***************************************************************************************************************************
#pragma code InterruptVectorLow = 0x18 void IntLow (void) { _asm goto InterruptHandlerLow // jump to interrupt routine _endasm }
//************************************************************************************************************************** // Low priority interrupt routine
#pragma code #pragma interruptlow InterruptHandlerLow
void InterruptHandlerLow() { if (PIR1bits.RCIF==1) // Is interrupt occured by EUSART receive?, // Then RCREG is full we have new data (cleared when RCREG is read) { if(RCSTA&0x06) // More efficient way than following commented method to check for reception error //if(RCSTAbits.FERR==1 || RCSTAbits.OERR==1 ) { RCSTAbits.CREN=0; // Overrun error (can be cleared by clearing bit CREN) cUART_char=RCREG; // Clear Framing error RCSTAbits.CREN=1; } else { cUART_char = RCREG; // Read new data into variable cUART_data_flg = 1; // New data received. so enable flg } } }
//***************************************************************************************************************************
void init_uart(void) // Init UART module for 9600bps boud, start bit 1, stopbit 1, parity NONE { cUART_data_flg=0; // Init data receive flag to zero (no data) TRISCbits.TRISC7=1; // Make UART RX pin input TRISCbits.TRISC6=0; // Make UART TX pin output SPBRGH = 0x02; // 9600bps 20MHz Osc SPBRG = 0x08;
RCSTAbits.CREN=1; // 1 = Enables receiver RCSTAbits.SPEN=1; // 1 = Serial port enabled (configures RX/DT and TX/CK pins as serial port pins) BAUDCONbits.BRG16=1; // 1 = 16-bit Baud Rate Generator – SPBRGH and SPBRG
TXSTAbits.SYNC=0; // 0 = Asynchronous mode TXSTAbits.BRGH=1; // 1 = High speed TXSTAbits.TXEN=1; // 1 = Transmit enabled
RCONbits.IPEN = 1; // Enable Interrupt priority levels IPR1bits.RCIP=0; // EUSART Receive Interrupt Priority 0 = Low priority PIE1bits.RCIE=1; // 1 = Enables the EUSART receive interrupt INTCONbits.GIEL = 1; // Enable interrupts INTCONbits.GIEH = 1; }
//****************************************************************************************************************************
void UART_putc(unsigned char c) { TXSTAbits.TXEN=0; // Disable transmission TXREG=data; // Load txreg with data TXSTAbits.TXEN=1; // Enable transmission while(TXSTAbits.TRMT==0) // Wait here till transmit complete { Nop(); } }
|  |  |  |  |
|
| Пон Авг 18, 2014 1:28 am |
|
 |
|
Cekins
Ранг: Форумен бог
Регистриран на: Сря Апр 20, 2005 12:02 pm Мнения: 9119 Местоположение: Разград
|
 Re: LED isn`t Blinking!
То аз виждам и друг потенциален проблем - в Low Priority нямаш запазване на STATUS, WREG и BSR. Ако в хендъла се ползва някой от тези регистри, после всичко може да се омаже. А особено WREG и STATUS в 99.9999% от случаите се ползват.
|
| Пон Авг 18, 2014 8:49 am |
|
 |
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 3:18 pm Мнения: 363 Местоположение: Varna
|
 Re: LED isn`t Blinking!
Това компилатора си го прави Съответно при излизане си ги възстановява А аз само подкарах дадения код. Вече dsp300 да си го преправя/изчиства.
|
| Пон Авг 18, 2014 10:27 am |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
Последна промяна dsp300 на Сря Авг 20, 2014 5:04 pm, променена общо 2 пъти
|
| Вто Авг 19, 2014 3:06 pm |
|
 |
|
Stoimen
Ранг: Популярен
Регистриран на: Пет Юни 25, 2010 3:18 pm Мнения: 363 Местоположение: Varna
|
 Re: LED isn`t Blinking!
Ето ти постнатия от мен код и симулацията на протеус. Прoтеус-а е 7.5 SP3 нямам по нов.
|
| Вто Авг 19, 2014 3:26 pm |
|
 |
|
timt
Ранг: Форумен бог
Регистриран на: Вто Ное 27, 2012 9:27 pm Мнения: 2011
|
 Re: LED isn`t Blinking!
Работи много добре!
|
| Вто Авг 19, 2014 11:42 pm |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
Сега изпробвах кода върху Proteus sim.Аз съм с Windows 7 32bit. При подаване на '1' от RealTerm , диода светва,но не гасне.При мен симулацията е през MAX232 и COMPIM.Компилирах кода с MPLAB IDE и заредих хекса в Demo Board.Тук пък диода въобще не светва!Вчера изпробвах кода върху комп с XP,но ползувах Вашата симулация в Proteus.Тук кода работи и диода се управлява нормално,като 1-цата я въвеждам директно от клавиатурата.Не разбирам какво се случва след като има функция за гасене на диода ,зададено време на изчакване също има,но диода не гасне.В реален pic18f2550,пък въобще не работи! Ако имате някаква идея,моля да я споделите.
|
| Сря Авг 20, 2014 5:22 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: LED isn`t Blinking!
Я сега да пробваме без прекъсвания:
|
| Сря Авг 20, 2014 9:30 pm |
|
 |
|
dsp300
Ранг: Минаващ
Регистриран на: Нед Авг 17, 2014 11:43 am Мнения: 26
|
 Re: LED isn`t Blinking!
Сега пробвах последния предложен код,но LED1 въобще не светва.pin RB1 is Low!
|
| Пет Авг 22, 2014 12:13 pm |
|
 |
|
tolstolob
Ранг: Ориентиран
Регистриран на: Вто Фев 06, 2007 2:45 am Мнения: 263
|
 Re: LED isn`t Blinking!
Пробва ли да закоментираш ?
|
| Пет Авг 22, 2014 4:44 pm |
|
|
Кой е на линия |
Потребители разглеждащи този форум: 0 регистрирани и 1 госта |
|
Вие не можете да пускате нови теми Вие не можете да отговаряте на теми Вие не можете да променяте собственото си мнение Вие не можете да изтривате собствените си мнения Вие не можете да прикачвате файл
|
|