⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 vb5.plm

📁 VB5.0 与AT89C2051通讯接口子程序
💻 PLM
字号:
  /********** vb5.plm  ***********/
start:do;
$include(reg51.dcl)
  declare (flag,flag$rxd,reciflag,timh,
  i,dat,addrhend,addrlend) byte;
  declare (addrh,addrl) byte;
  declare (addr,timl) word; 
  declare a(16) byte;
  declare sda literally 'p13',sclk literally 'p14';

sta24:procedure;
	call time(2);
	sda=1;        
	call time(2);
	sclk=1;
	call time(2);
	sda=0;
	call time(2);
	sclk=0;
	call time(2);
end sta24;

ask:    procedure;
	 call time(2);
	 sclk=1;
	 call time(2);
	 sda=1;
	 call time(2);
	 do while sda=1;
	 end;
	 call time(2);
	 sclk=0;
	 call time(2);
end ask;

stop:   procedure;
	 call time(2);
	 sda=0;
	 call time(2);
	 sclk=1;
	 call time(2);
	 sda=1;
	 call time(2);
	 sclk=0;
	 call time(2);
end stop;

shift:  procedure(da);
	 declare (i,da) byte;
	 do i=0 to 7;
	   da=scl(da,1);
	   sda=cy;
	   call time(2);
	   sclk=1;
	   call time(2);
	   sclk=0;
	   call time(2);
	 end;
end shift;

read:   procedure;
	 declare i byte;
	 do i=0 to 7;
	  call time(2);
	  sda=1;
	  call time(2);
	  sclk=1;
	  call time(2);
	  cy=sda;
	  call time(2);
	  dat=scl(dat,1);
	  call time(2);
	  sclk=0;
	  call time(2);
	 end;
end read;

rd24:   procedure;
	 declare i byte;
	 call sta24;
	 addrh=shl(addrh,1);
	 addrh=addrh or 0a0h;
	 call shift(addrh);
	 call ask;
	 call shift(addrl);
	 call ask;
	 do i=0 to 15;
	   call sta24;
	   call shift(0a1h);
	   call ask;
	   call read;
	   a(i)=dat;
	 end;
	 call stop;
end rd24;
wr24:   procedure;
	 declare i byte;
	 call sta24;
	 addrh=shl(addrh,1);
	 addrh=addrh or 0a0h;
	 call shift(addrh);
	 call ask;
	 call time(1);
	 call shift(addrl);
	 call ask;
	 do i=0 to 15;
	  call shift(a(i));
	  call ask;
	 end;
	 call stop;
	 call time(200);
end wr24;
receive:procedure interrupt 4 using 1;
	   p10=0;
	   do i=0 to 5;  
	     do while ri=0; 
	     end;
		a(i)=sbuf;
		ri=0;
	     /*   p10=not(p10); */
	   end;
	call time(250);
	call time(250);
       if a(2)=1 then do;  
	 do i=0 to 51;     
	      sbuf=i;
	      do while ti=0;
	      end;
	      ti=0;
	      p11=not(p11);
	      call time(1);
	 end;  
       end;
end receive;

send:procedure;
	 p17=0;
	 p15=1;
	 call time(250);
	 flag=1;
	 p10=1;
	 p11=0;
	 addrh=00h;
	 addrl=00h;
	 call rd24;
	 addrhend=a(0);
	 addrlend=a(1);
	 addr=20h;
	 disable;
	    addrh=high(addr);
	    addrl=low(addr);
	  do while 1=1;
	    call rd24;
	    ; 
	    do i=0 to 15;
	      sbuf=a(i);
	      p11=not(p11);
		call time(250);
		call time(250);
	      do while ti=0;
	      end;
	      ti=0;
	    end;
	    p11=0;
	    do i=0 to 7;     /* wait 1s */
	      call time(250);
	    end;
	    addr=addr+10h;
	    addrh=high(addr);
	    addrl=low(addr);
	    if addrh=addrhend and addrl=addrlend then 
	     do;
	      p11=0;
	      p10=0;
	      do i=0 to 80; 
	       call time(250);
	      end;
	      p10=1;
	      goto sendret;
	     end;
	  end; 
sendret:  ;          
p15=0;p17=1;
end send;

main$program:
p1=0ffh;
scon=50h;
pcon=00h;
tmod=20h;
tl1=0fah;     /* 4800 baud rate for 11.0592Mhz */
th1=0fah;
tr1=1;
es=1;
enable;
flag=0;
timl=0;
timh=0;
flag=0;
reciflag=0;
loop:
	      p10=not(p10);
	      call time(250);
	      call time(250);
	      call time(250);
	      call time(250);
goto loop;
end start;

	 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -