并口C语言,用计算机并口模拟SPI通讯的C源程序

#define LPT_PORT 0x378

#define CLR_WCK(X) {X=X&(~(1<<0)); outportb(LPT_PORT,X); } // data.0

#define SET_WCK(X) {X=X | (1<<0)  outportb(LPT_PORT,X); }

#define CLR_BCK(X) {X=X&(~(1<<2)); outportb(LPT_PORT,X); } // data.2

#define SET_BCK(X) {X=X | (1<<2)  outportb(LPT_PORT,X); }

#define CLR_DATA(X) {X=X&(~(1<<3)); outportb(LPT_PORT,X); } // data.3

#define SET_DATA(X) {X=X | (1<<3)  outportb(LPT_PORT,X); }

#define FALSE 0

#define TRUE 1

void test_comm()

{

unsigned char data

data = 0;

printf("Please press enter to begin send data\n");

getch();

printf("Pull down WCK data.0\n");

CLR_WCK(data);

getch();

printf("Pull up WCK data.0\n");

SET_WCK(data);

getch();

printf("Pull down BCK data.2\n");

CLR_BCK(data);

getch();

printf("Pull up BCK data.2\n");

SET_BCK(data);

getch();

printf("Pull down DATA data.3\n");

CLR_DATA(data);

getch();

printf("Pull up DATA data.3\n");

SET_DATA(data);

getch();

}

// Note: the size of buffer to send must be dword multiple

// size is the number of bytes to send

void short_delay(int n)

{

int i;

for(i=0;i {int temp =0;}

}

int send_spi_data(unsigned char *buffer, unsigned long size)

{

unsigned char buff[1024];

unsigned char *buf=buff;

unsigned char data;

int i,j,k;

data =0;

if((size%4)!=0) return FALSE;

memcpy(buff,buffer,size);

do{

SET_WCK(data);

for(k=0;k<2;k++){

for(j=0;j<2;j++){

printf(".");

for(i=0;i<8;i++){

if((*buf)&0x80){

SET_DATA(data);

}else{

CLR_DATA(data);

}

short_delay(1);

// delay(1);

SET_BCK(data);

short_delay(1);

// delay(1);

CLR_BCK(data);

short_delay(1);

// delay(1);

*buf<<=1;

}

buf++;

size--;

}

// buf++;

// size--;

CLR_WCK(data);

}

SET_WCK(data);

}while(size>0);

return TRUE;

}

/*

void main()

{

int i;

unsigned char tmpdata[4];

tmpdata[0] = 0x34;

tmpdata[1] = 0x12;

tmpdata[2] = 0x56;

tmpdata[3] = 0x78;

// for(i=0;i<500;i++)

for(i=0;i<50;i++)

{

send_spi_data(tmpdata,4);

}

// test_comm();

}

*/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值