PDA

View Full Version : سوال: رفع اشکال برنامه نویسی زبان c



faz123
چهارشنبه 05 تیر 1392, 09:35 صبح
من میخوام برنامه اتصال کیبورد به ماژول رو بنویسم در کیبورد کامپیوتر را به پایه rxt میکرو وصل چون داریم از سریال میکرو استفاده میکنیم دیگه ماژول رو نمیتونیم به پاییه txt وصل کنیم. برای همین باید یه پورت سریال مجازی بسازیم . من برنامه اتصال کیبورد به lcd رو دارم و همینطور برنامه ایجاد پورت سریال نرم افزاری میتونه کسی این ها رو با هم ترکیب کنه و برنامه درست رو بگه بهم؟
#include <mega16.h>
#include <stdio.h>
#include <lcd.h>
#incude <delay.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
unsigned char buffer_lcd[20],Scan_Code;
void main(void)
{
PORTB=0x00;
DDRB=0x00;
PORTD=0x00;
DDRD=0x00;
UCSRA=0x00;
UCSRB=0x98;
UCSRC=0xF6;
lcd_init(16);
#asm("sei");
while(1)
{
lcd_clear();
sprintf(buffer_lcd,"Key_Press=%X",Scan_Code);
lcd_puts(buffer_lcd);
delay_ms(300);
}
}
interrupt [USART_RXC]void usart_rx_isr(void)
{
unsigned char buffer;
buffer=UDR;
switch(buffer)
{
case 0xF0:
break;
case 0xE0:
break;
default:
Scan_Code=buffer;
}
}
و برنامه پورت سریال نرم افزاری:
#include <delay.h>

#define TX2_PIN PORTC.0 // UART2 TX pin
#define TX2_DDR DDRC.0 // UART2 TX Direction Register

// TX & RX levels
#define HIGH 1
#define LOW 0

// UART2 specific
#define DATA_BIT_LENGTH 104 // ((1/BAUD)*10000000)


// put a character DIRECTLY to the UART2
void putchar2(unsigned char c)
{

unsigned char i;

TX2_PIN = LOW; // clear output (start bit)
delay_us(DATA_BIT_LENGTH);

for(i=0; i<8; i++)
{
TX2_PIN = (c & 0x01);
delay_us(DATA_BIT_LENGTH);
c >>= 1; // next bit, please !
}

TX2_PIN = HIGH; // stop bit (bit #8)
delay_us(DATA_BIT_LENGTH);

}

void puts2(char* str)
{
while( *str != '\0' )
{
putchar2((unsigned char) *str++);
}
}

// UART2 initialization function (we MUST call this function BEFORE using UART2)
void initUART2(void)
{
TX2_PIN = 1; // logic 1 (high level = STOP TX)
TX2_DDR = 1; // output
}

Abbas Amiri
پنج شنبه 06 تیر 1392, 00:25 صبح
راه حل سخت افزاری هم هست . از میکروهایی استفاده کنید که بیش از یک رابط USART دارند .

faz123
پنج شنبه 06 تیر 1392, 09:25 صبح
راه حل سخت افزاری هم هست . از میکروهایی استفاده کنید که بیش از یک رابط USART دارند .
بله اینم میشه اما در این صورت چطور باید راه اندازیش کنم ؟
دوم این که برنامه من روی ال سی دی نشون میده من میخوام این کار رو نکنه و فقط بره تو بافر در این صورت ایا فقط اگر قسمت های مربوط به ال سی دی رو حذف کنم درست میشه؟
اینا باید حذف شه؟


#include <lcd.h>
#asm
.equ __lcd_port=0x1B ;PORTA
#endasm
lcd_init(16);
lcd_clear();
lcd_puts(buffer_lcd);