//主机侧程序
#include <stdio.h>
#include <string.h>
#include <delay.h>
#include <90s2313.h>
/*********************************/
/*定义全局数据*/
unsigned char Host_buffer[20];
/*********************************/
void init2313()//初始化2313
{
UBRR=47;//设定波特率
SREG=0x80;//允许全局中断
}
/*********************************/
interrupt[2] void RTHostMsg()//int0中断处理,接受主机命令并且传送
{
unsigned int host_cnt=0;
unsigned int i;
for(i=0;i<11;i++)
{
DDRB=0x00;//PINB1引脚输入
Host_buffer[i]=PORTB.1;
host_cnt++;
}
if(host_cnt>=11)
{
UCR.3=1; //UART发送使能
i=0;
for(i=0;i<host_cnt;i++)
UDR=Host_buffer[i];
}
i=0;
}
/*********************************/
void RTKbMsg(void)//接收键盘侧信息并传送到主机
{
unsigned char *outptr;
unsigned char *address;
unsigned char KeyMsg;
UDR.4=1;//UART接受使能
KeyMsg=getchar();
if(KeyMsg)
{
*outptr=KeyMsg;
*address=KeyMsg;
DDRB=0x02;//PINB1引脚输出
while(outptr<address+strlen(KeyMsg))
{
PORTB.1=*outptr;
outptr++;
}
}
if(outptr>=address+strlen(KeyMsg))
outptr=address;
}
/********************************/
void main()
{
init2313();//初始化
while(1)
{
if((PIND.2==0)&&(PINB.1==0))//PIND.2,int0;PINB.1,DATA
{
GIMSK=0x40;//int0中断请求触发
MCUCR=0x02;//int0下降沿触发
}
RTKbMsg();
delay_us(5);
}
}