📄 vb5.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 + -