در ارسال usart آیا امکان مقدار دهی به رجیستر UDR در حلقه WHILE وجود نداره؟!
با توجه به اموزش های سایت یک برنامه نوشتم (و کپی کردم :rolleyes
که در اون کد گرفته شده از صفحه کلید از طریق USART انتقال داده میشه
در ابتدا در این برنامه مقدار دهی به رجیستر UDR در حلقه اصلی برنامه انجام میشد اما ارسال انجام نمیشد این بود که فکر کردم حتما UDR امکان مقدار دهی در حلقه اصلی رونداره :eek: این بود که یک تابع تعریف کردم و در تابع مقدار دهی کردم اما باز هم نشد
این رو هم بگم که از طریق وقفه های ارسال UDR مقدار میگیره و ارسال چند عدد به سادگی انجام میشه اما برای ارسال کد های صفحه کلید ترجیح دادم از حلقه اصلی استفاده کنم اگر دوستان که تجربه بیشتری دارن کمک کنن ممنون میشم
کد های برنامه MASTER:
لینک دانلود برنامه برای کسایی که مثل من عمرا" این کد ها رو بخونن :smile:
master2.rar
با توجه به اموزش های سایت یک برنامه نوشتم (و کپی کردم :rolleyes
که در اون کد گرفته شده از صفحه کلید از طریق USART انتقال داده میشهدر ابتدا در این برنامه مقدار دهی به رجیستر UDR در حلقه اصلی برنامه انجام میشد اما ارسال انجام نمیشد این بود که فکر کردم حتما UDR امکان مقدار دهی در حلقه اصلی رونداره :eek: این بود که یک تابع تعریف کردم و در تابع مقدار دهی کردم اما باز هم نشد
این رو هم بگم که از طریق وقفه های ارسال UDR مقدار میگیره و ارسال چند عدد به سادگی انجام میشه اما برای ارسال کد های صفحه کلید ترجیح دادم از حلقه اصلی استفاده کنم اگر دوستان که تجربه بیشتری دارن کمک کنن ممنون میشم
کد های برنامه MASTER:
کد:
#include <mega32.h>
#include <delay.h>
#define nokey_code 12
flash unsigned char keyboard_codes[]={0x76,0x6E,0x5E,0x3E,0x75,0x6D,0x5D,0x3D,0x73,0x6B,0x5B,0x3B};
volatile unsigned char data[];
volatile unsigned char temp_key_code,key_code=nokey_code;
unsigned char tempo;
void function()
{
static unsigned char j=5;
data[j]=temp_key_code;
UDR=data[j];
if(--j==0xff)j=5;
}
void main()
{
unsigned char old_key_code=nokey_code;
PORTD=(1<<PORTD1)|(1<<PORTD0);
DDRD=(1<<DDD2)|(1<<DDD1);
UBRRH=0;
UBRRL=25;
UCSRB=(1<<RXCIE)|(1<<TXCIE)|(1<<RXEN)|(1<<TXEN);
UCSRC=(1<<UCSZ1)|(1<<UCSZ0);
OCR0=124;
TCCR0=(1<<WGM01)|(1<< CS01);
TIMSK=(1<<OCIE0);
#asm("sei");
while(1);
{
temp_key_code=key_code;
if (temp_key_code!=nokey_code)
{
if (temp_key_code!= old_key_code)
{
old_key_code=temp_key_code;
if (temp_key_code!=nokey_code)function();
}
}
}
}
//------------------------------------------------------------------------------------------------------------------
interrupt [USART_TXC] void USART_TX_Complete(void)
{
PORTD^=(1<<PORTD2);
delay_ms(500);
PORTD^=(1<<PORTD2);
}
interrupt [USART_RXC] void USART_RX_Complete(void)
{
tempo=UDR;
}
//-----------------------------------------------------------------------
interrupt [TIM0_COMP] void timer0_compare_isr(void)
{
static unsigned char x20=0;
unsigned char temp , i;
if (++x20==20)
{
x20=0;
DDRB=(1<<DDB2)|(1<<DDB1)|(1<<DDB0);
PORTB=(1<<PORTB6)|(1<<PORTB5)|(1<<PORTB4)|(1<<PORTB3);
delay_us(5); // delay for signal stablization
temp=(PINB & 0X78);
DDRB=(1<<DDB6)|(1<<DDB5)|(1<<DDB4)|(1<<DDB3);
PORTB=(1<<PORTB2)|(1<<PORTB1)|(1<<PORTB0);
delay_us(5); // delay for signal stablization
temp |=(PINB & 0X07);
for(i=0;i<12;i++)
{
if(temp==keyboard_codes[i])
{
key_code=i;
break;
}
else key_code=nokey_code;
}
}
}
لینک دانلود برنامه برای کسایی که مثل من عمرا" این کد ها رو بخونن :smile:
master2.rar





دیدگاه