faz123
چهارشنبه 05 تیر 1392, 10: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
}
#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
}