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

📄 ick232.plm

📁 多个C51的源代码,在KEIL C51上已调试通过
💻 PLM
字号:
  /********** ick232.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;
	   do i=0 to 15;  
	     do while ri=0; 
	     end;
		a(i)=sbuf;
		ri=0;
		p10=not(p10);
	   end;
	   timl=0;
	   timh=0;
	   flag$rxd=1;
	   reciflag=1;
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(254);
		call time(254);
	      do while ti=0;
	      end;
	      ti=0;
	    end;
	    p11=0;
	    do i=0 to 7;     /* wait 1s */
	      call time(254);
	    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(254);
	      end;
	      p10=1;
	      goto sendret;
	     end;
	  end; 
sendret:  ;          
p15=0;p17=1;
end send;

main$program:
p1=0ffh;
p33=1;p17=1;p15=0;
scon=50h;
pcon=00h;
tmod=20h;
tl1=0fah;     /* 4800 baud rate for 11.0592Mhz */
th1=0fah;
tr1=1;
es=1;
enable;
p10=0;
flag=0;
timl=0;
timh=0;
flag$rxd=0;
reciflag=0;
addr=20h;
loop:if flag$rxd=1 then       /* write 2416 16byt */
	do;
	   p10=1;
	   addrh=high(addr);
	   addrl=low(addr);
	   call wr24;
	   flag$rxd=0;
	   addr=addr+10h;
	   timl=0;
	   timh=0;
	   p10=0;
	end; 
     if p12=0 then        /* key test */
	do;
	 flag=0;
	 p10=0;
	 p11=1;
	 enable;
	end;
     if p33=0 then call send;
delcoun:if reciflag=1 then 
      do;
	timl=timl+1;
	if timl=09fffh then timh=timh+1;
	if timh=2 then
	 do;
	  timh=0;
	  p10=0;
	  p11=0;
	  addrh=high(addr);
	  addrl=low(addr);
	  a(0)=addrh;
	  a(1)=addrl;
	  addrh=00h;
	  addrl=00h;
	  call wr24;
	  do i=0 to 50;   /* wait */
	    call time(254);
	  end;
	  timl=0;
	  timh=0;
	  p10=0;
	  p11=1;
	  reciflag=0;
	  addr=20h;
	 end;
       end;
   goto loop;
end start;



	 

⌨️ 快捷键说明

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