初学者:help me!
我在做一个键盘和主机通信的项目,现在程序写完了,做了实验板,但是不能实现功能,但
是程序我觉得可以了,谁帮我一下呢?下面是我的chengxu ,高手请指教!
//键盘侧程序
#include <stdio.h>
#include <string.h>
#include <delay.h>
#include <90s2313.h>
/************************************************/
int test_cnt=0;
unsigned int Kb_cnt=0;
/************************************************/
void Init2313(void)//初始化2313
{
SREG=0x80;//允许全局中断
UBRR=47;//设定波特率
}
/************************************************/
//中断处理子程序
//int0的中断向量号为2
interrupt[2] void RTKbMsg(void)
{
unsigned int i;
unsigned char Kb_buffer[20];
DDRB==0x00;//0为输入,接受键盘数据
for(i=0;i<11;i++)
{
Kb_buffer[i]=PINB.1;
test_cnt++;
Kb_cnt++;
}
if(Kb_cnt>=10)//发送接收到的键盘数据
{
i=0;
UCR.3=1;//允许UART发送
for(i=0;i<Kb_cnt;i++)
{
UDR=Kb_buffer[i];
}
i=0;
Kb_cnt=0;
}
}
/****************************************/
void RThostMsg(void)//接受和传送主机的命令信息
{
unsigned char HostMsg;
unsigned char *outptr;
unsigned char *address;
int msg_size;
int Host_cnt=0;
UDR.4=1;
HostMsg=getchar();
if(HostMsg)
{
DDRB=0x02;//Port B 1脚设为输出
*outptr=HostMsg;
*address=HostMsg;
msg_size=strlen(*outptr);
while(outptr<address+msg_size)
{
PORTB.1=(*outptr);
outptr++;
Host_cnt++;
}
if(outptr>=address+msg_size)
{
outptr=address;
Host_cnt=0;
}
}
}
/*********************************************/
void main(void)
{
Init2313();
while(1)
{
if((PIND.2==1)&&(PINB.1==1))
{
GIMSK=0x40;//int0中断请求触发
MCUCR=0x02;//int0下降沿触发
}
RThostMsg();
delay_us(5);
}
}
//主机侧程序
#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);
}
}
发表时间:2002年9月17日16:50:00