[讨论]89c52与8019传输数据?
是DMA
就用一体化的那个可以做
求助
网站上提供的一体化的方案基本类似),由于前段时间找工作花了很多时间,搞的现在时间很紧,6月10号左右就要答辩了,而程序部分还不知道如何下手,用单片机实现TCP/IP又是第一次搞,本来对单片机编程就不熟。不知你有没有那个一体化的程序?如果有,请给我寄一份好吗?我想参照一下。我的邮箱是:xiangguojin@163.com,拜托了,谢谢你了!另外老古说那个网站提供还提供那个一体化的方案的程序,说是用汇编写的,我怎么找也没找到,你能帮我找一下吗?
老古主页有自己找!
请教
也找了好几次,也没找到用汇编写的程序,你能帮我吗?谢谢!
知道思路,自己编写!
请问一下,有哪位师父知道SMARTMED
是哪个一体化的程序啊?我好像打不开?
网上有自己下!
ISA总线的解决方案中就提了一下。上面有个网址我打不开
我也在做这方面的东西,我看过老古的文章,
知道思路就可以了三,你还想要现成的程序,请你不要太懒!
呵呵,不是我懒。我看过上面的文章,根据内
void netcardreset(void)
{
uint data i;
uchar data temp;
reset=1;
for(i=0;i <250;i++);
temp=reg1f;
reg1f=temp;
for(i=0;i <250;i++);
}
void delaymsecond(void)
{ unsigned int i;
for(i=0;i <10000;i++);
}
void page(uchar pagenumber)
{
uchar data temp;
temp=reg00;
temp=temp&0x3B;
pagenumber=pagenumber < <6;
temp=temp|pagenumber;
reg00=temp;
}
void ne2000init(void)
{
reg00=0x21;
reg01=0x4c;
reg02=0x80;
reg03=0x4c;
reg04=0x40;
reg0c=0xcc;
reg0d=0xe0;
reg0e=0xc8;
reg0f=0x00;
reg00=0x12;
page(1);
reg07=0x4d;
reg08=0x00;
reg09=0x41;
reg0a=0x00;
reg0b=0x80;
reg0c=0x00;
reg0d=0x00;
reg0e=0x00;
reg0f=0x00;
reg00=0x52;
reg00=0x22;
}
void readmynodeid(void)
{
union u protocal;
uchar data i,temp;
page(0);
reg09=0;
reg08=0;
reg0b=0;
reg0a=12;
reg00=0x0a;
for(i=0;i <6;i++)
{
temp=reg10;
if(i%2==0)
{
protocal.bytes.high=temp;
}
else
{
protocal.bytes.low=temp;
mynodeid[i/2].word=protocal.word;
}
temp=reg10;
}
}
void writemynodeid(void)
{
page(1);
reg01=mynodeid[0].bytes.high;
reg02=mynodeid[0].bytes.low;
reg03=mynodeid[1].bytes.high;
reg04=mynodeid[1].bytes.low;
reg05=mynodeid[2].bytes.high;
reg06=mynodeid[2].bytes.low;
}
//使用0x40-0x4B为网卡的发送缓冲区,共12页,向网卡dma中以wraddress开始的地址区写入count个字节的数据,并让网卡将其发送出去
void write_dma(unsigned int wraddress,unsigned int count)
{
unsigned int i;
if(wraddress> =0x4c00)
{
wraddress=wraddress-0x4c00;
}
reg09=wraddress> > 8;
reg08=wraddress&0xff;
reg0b=count> > 8;
reg0a=count&0xff;
reg00=0x12 ;
for(i=0;i <count;i++)
{
reg10=bufferwrite[i];
}
reg00=0x1e;
wraddress=wraddress+count;
flag=0;
reg0b=0;
reg0a=0;
reg00=0x22;
}
//从网卡dma以readdress开头的地址区读出count个字节,放到单片机片外存储空间 bufferread[]中。
void read_dma(unsigned int readdress,unsigned int count)
{
unsigned int i,n;
uchar data curr,bnry,pstop;
reg00=0x0a;
bnry=reg03+1;
reg00=0x4a;
curr=reg07;
if(curr!=bnry)
{
if(readdress> =0x8000)
{
readdress=readdress-0x8000;
}
reg09=readdress> > 8;
reg08=readdress&0xff;
reg0b=count> > 8;
reg0a=count&0xff;
reg00=0x0a ;
for(i=0;i <count;i++)
{
bufferread[i]=reg10;
}
pstop=reg02;
n=count/256; //计算读出的数据有多少个页
bnry=reg03+n; //将bnry的值加n,保证下一次的读出
reg03=bnry;
reg00=0x12;
if(bnry> =pstop)
{
reg03=0x4c;
reg00=0x12;
}
readdress=readdress+count;
reg0b=0;
reg0a=0;
reg00=0x22;
}
}
那你电路板根据一体化那个图做的吗?
不是,我是根据他的文中(四)89C52单
那你接8019中断了吗?
我是完全按照他的文中所说做的。应该没有
那你是定时中断查询看是否有数据接收和发送吗?
我在程序中设置了一个全局变量flag,当