- 注册时间
- 2005-8-2
- 最后登录
- 1970-1-1
|

楼主 |
发表于 2007-7-3 18:52:08
|
显示全部楼层
到目前为止的源代码,ComRead实在是不知道怎么写,ComWrite也不太稳定,将就着用吧,哪位有心的朋友可以继续研究,我的汇编太烂,只能这样了#define i3a 0x3a
#define i3b 0x3b
#define i3c 0x3c
#define i3d 0x3d
#define i3e 0x3e
#define i3f 0x3f
#include <NC3000.y>
char asm[]={0xa9,0x1,0x8d,0xcc,0xf,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0xa9,0x4,0x85,0x3d,0xa9,0x1,0x85,0x3b,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x3,0x85,0x3d,0x68,0x28,0xad,0x3d,0x4,0x9,0x90,0x85,0x3a,0x8d,0x3d,0x4,0xad,0x3c,0x4,0x9,0x90,0x85,0x3c,0x8d,0x3c,0x4,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x1,0x85,0x3d,0x68,0x28,0xa9,0x0,0x85,0x3b,0xa9,0x30,0x85,0x3d,0xa9,0x0,0x8d,0xc9,0xf,0xa9,0x10,0x8d,0xca,0xf,0xa9,0x0,0x8d,0xaa,0xf,0xa9,0x0,0x8d,0xf6,0x3,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0x68,0x28,0xa9,0x0,0x85,0x3d,0xa9,0x4,0x85,0x3d,0xa9,0x8,0x48,0xa9,0xa,0x85,0x3e,0xad,0xf4,0x6,0x29,0xf,0x85,0x3f,0x8d,0xf4,0x6,0xa9,0xb,0x85,0x3e,0xa9,0x4,0x85,0x3f,0x68,0x8d,0xfa,0x6,0x8d,0xfc,0x6,0xa9,0xa,0x85,0x3e,0xad,0xf4,0x6,0x9,0x70,0x85,0x3f,0x8d,0xf4,0x6,0xad,0xfa,0x6,0xd0,0xfb,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0x68,0x28,0xa5,0x3b,0x29,0x60,0xc9,0x60,0xf0,0x1e,0xad,0xc9,0xf,0xd0,0x3,0xce,0xca,0xf,0xce,0xc9,0xf,0xad,0xca,0xf,0xc9,0x0,0xd0,0x5,0xad,0xc9,0xf,0xc9,0x0,0xd0,0x5,0xa9,0x1,0x8d,0xaa,0xf,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x1,0x85,0x3d,0x68,0x28,0xa9,0x30,0x85,0x3d,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x0,0x85,0x3d,0x68,0x28,0xa9,0x2,0x85,0x3c,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x1,0x85,0x3d,0x68,0x28,0xad,0xcc,0xf,0x85,0x3a,0xa9,0x80,0x85,0x17,0xad,0x36,0x4,0x9,0x8,0x85,0x18,0x8d,0x36,0x4,0x8,0x48,0xa5,0x3d,0x29,0xfc,0x9,0x2,0x85,0x3d,0x68,0x28,0xa9,0x20,0x85,0x3c,0x60};
//打开串口的汇编程序,从ftplink中抄出来的!
/*
char switch(char val) //这个函数没用到,可以留着先
{
*i3d=((*i3d)&0xfc)|val;
}
*/
//========================这个可以用
void ComSetTimer()
{
*i3e=0x00;
*0x45=(*i3f)&0x3f;
}
//原型 int System.ComXor(char data[],size+1)
//功能 校验数据
//说明 data为缓冲区,size为数据长度,data的最后一位为校验值,正确返回0,否则返回非0
int ComXor(char data[],long size)
{
int i;
char chk;
char temp;
temp=data[0];
chk=data[size-1];
for(i=1;i<size-1;i++)temp=temp^data;
if(temp==chk)return 0;
else return -1;
}
void ComWaitReady() //不知道能不能用
{
for(;;)
{
*i3d=(*i3d)&0xfc;
//if(*i3b&0x9e)continue; //跳往出错的地方
if((*i3b&0x60)==0x60)break;
}
}
//==========================ComClose_begin============================
char ComClose() //这个也可以用
{
*i3d=(*i3d)&0xfc;
*i3d=(*i3d)&0xfb;
*i3d=((*i3d)&0xfc)|0x02;
*i3c=0x00;
}
//==========================ComClose_end=====================================
//==============================ComOpen_begin=================================================
void ComOpen() //端口打开函数
{
exeasm(asm);
}
//==============================ComOpen_end=================================================
//===============================ComGetc_beign===============================================
char check_rxrdy() //1为有数据,0为无数据
{
char temp;
*0x03f6=0x00;
temp=(*i3b)&0x01;
if (temp) return 1;
else return 0;
}
char ComGetc() //读数据
{
*i3d=(*i3d)&0xfc;
while(!check_rxrdy());
return *i3a;
}
//============================ComGetc_end========================================================
//================================ComPutc_begin==================================================
char check_txrdy() ////1为有数据,0为无数据
{
char temp;
temp=(*i3b)&0x60;
if (temp) return 1;
else return 0;
}
long ComPutc(char wsdata)//没有加超时处理,这个函数可以用!
{
char temp;
*i3d=(*i3d)&0xfc;
while(!check_txrdy());
*i3a=wsdata;
}
//================================ComPutc_end==================================================
//================================ComRead_begin==================================================
char rin()
{
char temp;
*i3d=(*i3d)&0xfc;
for(;;)
{
if((*i3c)&0x10) break;
*i3e=0x00;
temp=(*i3f)&0x3f;
if(temp<(*0x45))temp=temp+(*i3c);
if(temp>=0x02)break;
}
return *i3a;
}
void ComRead(char &data[],int size)
{
char word;
int i=0;
ComWaitReady();
ComSetTimer();
for(;;)
{
if(i>=size)break;
word=rin();
data[i++]=word;
}
}
//================================ComRead_end==================================================
//================================ComWrite_begin==================================================
void ComWrite(char &data[],int size)
{
int i=0;
for(;;)
{
if(i>=size)break;
ComPutc(data[i++]);
}
}
//================================ComWrite_end==================================================
void main()
{
char word;
char data[51];
int i;
i=0;
SetScreen(0);
printf("Hello Com!\n");
strcpy(data,"01234567890123456789");
ComOpen();
for(;;)
{
if(Inkey()==27)exit(0);
ComSetTimer();
ComWaitReady();
word=ComGetc();
putchar(word);
ComPutc(word);
}
printf("%s\nok",data);
ComClose();
getchar();
} |
|