pirozy
21-08-2014, 12:12
سلام
دوستان من یه برنامه نوشتم برای avr که به با یه حلقه پورت سریال میکرو رو چک می کنه اگه کاراکتر مورد نظر رو دریافت کرد از حلقه بیرون میاد و تا رسیدن کاراکتر مورد نظر بعدی داده های دریافتی از پورت سریال رو تو یه ارایه ذخیره می کنه
برنامه به خوبی کار می کنه ولی ولی وقتی نویز زیاد میشه میکرو هنگ می کنه و من اصلا نمیخوام میکرو هنگ کنه
برای همین گفتم برم سراغ LPC1768 هم خیلی قدرتمنده و هم نویز کمتر میگیره
یه برنامه ساده نوشتم که اگه از پورت سریال OK دریافت کرد ال ای دی رو روشن کنه و اگه NO دریافت کرد ال ای دی رو خاموش کنه
باورتون نمیشه وقتی روی LPC1768 ریختم افتضاح کار کرد
اونم تو کلاک 96 مگاهرتز و باود ریت 57600
اصلا بعضی مواقع کار نمیکنه و بعضی مواقع با تاخیر کار می کنه در حالی که بدونه نویز تو AVR خیلی با دقت کار میکنه حتی یه خطا هم نداره منظم کار میکنه بدون تاخیر در حالی که برنامه ای که برای AVR نوشتم خیلی پیچیده تر از برنامه ی LPC1768 هستش
واقعا این LPC1768 نا امیدم کرد
#include <LPC17xx.h>
#include <string.h>
#include "USART0.h"
#include "delay.h"
#define BLUE_LED_ON LPC_GPIO0->FIOSET |=(1<<1);
#define BLUE_LED_OFF LPC_GPIO0->FIOCLR |=(1<<1);
#define RED_LED_ON LPC_GPIO0->FIOSET |=(1<<0);
#define RED_LED_OFF LPC_GPIO0->FIOCLR |=(1<<0);
void Read_Response(char *Response)
{
int i=0;
unsigned char Rec_Byte=0;
while(Rec_Byte!=0x0D)
{
Rec_Byte=UART0_Read_Byte();
}
while(Rec_Byte!=0x0A)
{
Rec_Byte=UART0_Read_Byte();
}
while(Rec_Byte!=0x0D)
{
Rec_Byte=UART0_Read_Byte();
*(Response+i)=Rec_Byte;
*(Response+i+1)='\0';
i++;
}
while(Rec_Byte!=0x0A)
{
Rec_Byte=UART0_Read_Byte();
}
}
int main()
{
unsigned char status;
char r[20];
SystemInit(); // Set Clock To 96MHz
USART0_Init();
LPC_GPIO0->FIODIR=0x00000003;
RED_LED_ON;
delay_ms(200000);
RED_LED_OFF;
while (1)
{
Read_Response(r);
if(strcmp(r,"OK\r")==0)
{
BLUE_LED_ON;
}
if(strcmp(r,"NO\r")==0)
{
BLUE_LED_OFF;
}
}
}
دوستان من یه برنامه نوشتم برای avr که به با یه حلقه پورت سریال میکرو رو چک می کنه اگه کاراکتر مورد نظر رو دریافت کرد از حلقه بیرون میاد و تا رسیدن کاراکتر مورد نظر بعدی داده های دریافتی از پورت سریال رو تو یه ارایه ذخیره می کنه
برنامه به خوبی کار می کنه ولی ولی وقتی نویز زیاد میشه میکرو هنگ می کنه و من اصلا نمیخوام میکرو هنگ کنه
برای همین گفتم برم سراغ LPC1768 هم خیلی قدرتمنده و هم نویز کمتر میگیره
یه برنامه ساده نوشتم که اگه از پورت سریال OK دریافت کرد ال ای دی رو روشن کنه و اگه NO دریافت کرد ال ای دی رو خاموش کنه
باورتون نمیشه وقتی روی LPC1768 ریختم افتضاح کار کرد
اونم تو کلاک 96 مگاهرتز و باود ریت 57600
اصلا بعضی مواقع کار نمیکنه و بعضی مواقع با تاخیر کار می کنه در حالی که بدونه نویز تو AVR خیلی با دقت کار میکنه حتی یه خطا هم نداره منظم کار میکنه بدون تاخیر در حالی که برنامه ای که برای AVR نوشتم خیلی پیچیده تر از برنامه ی LPC1768 هستش
واقعا این LPC1768 نا امیدم کرد
#include <LPC17xx.h>
#include <string.h>
#include "USART0.h"
#include "delay.h"
#define BLUE_LED_ON LPC_GPIO0->FIOSET |=(1<<1);
#define BLUE_LED_OFF LPC_GPIO0->FIOCLR |=(1<<1);
#define RED_LED_ON LPC_GPIO0->FIOSET |=(1<<0);
#define RED_LED_OFF LPC_GPIO0->FIOCLR |=(1<<0);
void Read_Response(char *Response)
{
int i=0;
unsigned char Rec_Byte=0;
while(Rec_Byte!=0x0D)
{
Rec_Byte=UART0_Read_Byte();
}
while(Rec_Byte!=0x0A)
{
Rec_Byte=UART0_Read_Byte();
}
while(Rec_Byte!=0x0D)
{
Rec_Byte=UART0_Read_Byte();
*(Response+i)=Rec_Byte;
*(Response+i+1)='\0';
i++;
}
while(Rec_Byte!=0x0A)
{
Rec_Byte=UART0_Read_Byte();
}
}
int main()
{
unsigned char status;
char r[20];
SystemInit(); // Set Clock To 96MHz
USART0_Init();
LPC_GPIO0->FIODIR=0x00000003;
RED_LED_ON;
delay_ms(200000);
RED_LED_OFF;
while (1)
{
Read_Response(r);
if(strcmp(r,"OK\r")==0)
{
BLUE_LED_ON;
}
if(strcmp(r,"NO\r")==0)
{
BLUE_LED_OFF;
}
}
}