با سلام خدمت اساتید محترم. من کدی برای ارتباط UART در اتمل استودیو نوشته ام. (در ذیل کد آمده است) همچنین برای کنترل وقفه ها رو نیز فعال کردم.دو تا مشکل فقط وجود داره.
1. در وقفه مطابق دیتاشیت پس از هر بار تکمیل شدن دریافت 8 بیت (1 بایت) اطلاعات به درگاه سریال و با فعال شدن پرچم وقفه به زیر برنامه آن پرش می کند اما در این کد با دریافت 20 بایت تنها 8 بار به وقفه پرش انجام میشه!
2. پس از فعال شدن وقفه سرعت اجرای برنامه به شدت کاهش پیدا می کنه!
ممنون می شوم راهنمایی بفرمایید.
1. در وقفه مطابق دیتاشیت پس از هر بار تکمیل شدن دریافت 8 بیت (1 بایت) اطلاعات به درگاه سریال و با فعال شدن پرچم وقفه به زیر برنامه آن پرش می کند اما در این کد با دریافت 20 بایت تنها 8 بار به وقفه پرش انجام میشه!
2. پس از فعال شدن وقفه سرعت اجرای برنامه به شدت کاهش پیدا می کنه!
ممنون می شوم راهنمایی بفرمایید.
#define F_CPU 2000000UL
#define D4 eS_PORTD4
#define D5 eS_PORTD5
#define D6 eS_PORTD6
#define D7 eS_PORTD7
#define RS eS_PORTD2
#define EN eS_PORTD3
#include <avr/io.h>
#include <util/delay.h>
#include <avr/interrupt.h>
#include <stdlib.h>
#include <string.h>
#include "lcd.h"
int num=1;
void USART_Init()
{
/* Serial UART, U2X=0, Async, 8,n,1, Baud = 9600, UBRR = 12;0xC */
UCSRA = 0x00;
UCSRB = (1 << TXEN) | (1 << RXEN) | (1 << UDRE) | (1 << TXCIE) | (1 << RXCIE);
UCSRC = 0x86;
UBRRH = 0x00;
UBRRL = 0x0C;
}
void show_d ()
{
Lcd4_Init();
Lcd4_Clear();
Lcd4_Set_Cursor(0,0);
Lcd4_Write_String("**SERIAL USART**");
_delay_ms(10);
}
ISR(USART_RXC_vect)
{
num++; //Variable to check how many times we jump to this sub.
Lcd4_Clear();
Lcd4_Set_Cursor(0,0);
Lcd4_Write_String("RX Complete");
}
ISR(BADISR_vect)
{
//No Interrupt Sub
_delay_ms(1);
}
int main(void)
{
USART_Init(); //Init UART Communication
DDRD = 0b11111100; //Set PortD Output
DDRB = 0xff; //Assign Value to PortB
show_d(); //Show On LCD
sei(); //Enable Interrupts
_delay_ms(1); //Delay!
while(1)
{
PORTB = 0b00000001; //0
_delay_ms(300);
PORTB = 0b00000010; //1
_delay_ms(300);
PORTB = 0b00000100; //2
_delay_ms(300);
PORTB = 0b00001000; //3
_delay_ms(300);
PORTB = 0b00010000; //4
_delay_ms(300);
PORTB = 0b00100000; //5
_delay_ms(300);
}
}
دیدگاه