📄 al8051.vhd
字号:
proc2(j,RAM(bank+1));
if j = 128 then RAM(128):= BUFP0; end if;
if j = 144 then RAM(144):= BUFP1; end if;
if j = 160 then RAM(160):= BUFP2; end if;
if j = 176 then RAM(176):= BUFP3; end if;
dec_r(j);
k := j;
flag;
when "00100000" => -- JB Bit,rel 3 b.
proc2 (k,com);
Proc11;
if RPB(k) = '1' then rel; end if; --ADBit(k) = '1' then rel; end if;
when "00100001" => ajmp("00100000000"); -- AJMP 001+ad 8 2 b.
when "00100010" => ret; -- RET 1 b.
when "00100011" => -- RL A 1 b.
pr := RAM(224);
pr1(7 downto 1):=pr(6 downto 0);
pr1(0):=pr(7);
RAM(224):=pr1;
when "00100100" => -- ADD A,#d 2 b.
add(com,'0');
when "00100101" => -- ADD A,ad 2 b.
proc2(k,com);
add(RP(k),'0');--add(RAM(k),'0');
when "00100110" => -- ADD A,@R0 1 b.
proc2(k,RAM(bank+0));
add(RP(k),'0');--add(RAM(k),'0');
when "00100111" => -- ADD A,@R1 1 b.
proc2(k,RAM(bank+1));
add(RP(k),'0');--add(RAM(k),'0');
when "00110000" => -- JNB bir,rel 3 b.
proc2 (k,com);
x <= k;
zo <= RAM(128);
wait for 1 ps;
Proc11;
if RPB(k) = '0' then rel; end if; -- if ADBit(k) = '0' then rel; end if;
when "00110001" => acall("00100000000"); -- ACALL 001+ad8 2 b.
when "00110010" => -- RETI 1 b.
ret;
if fl1 = '1' then fl1 := '0';
else fl0 := '0';
end if;
flint1 := '1';
when "00110011" => -- RLC A 1 b.
pr := RAM(224);
pr0:= RAM(208);
pr1(7 downto 1):=pr(6 downto 0);
pr1(0):=pr0(7);
pr0(7):= pr(7);
RAM(224):=pr1;
RAM(208):=pr0;
when "00110100" => -- ADDC A,#d 2 b.
add(com,'1');
when "00110101" => -- ADDC A,ad 2 b.
proc2(k,com);
add(RP(k),'1');--add(RAM(k),'1');
when "00110110" => -- ADDC A,@R0 1 b.
proc2(k,RAM(bank+0));
add(RP(k),'1');--add(RAM(k),'1');
when "00110111" => -- ADDC A,@R1 1 b.
proc2(k,RAM(bank+1));
add(RP(k),'1');--add(RAM(k),'1');
when "01000000" => -- JC rel 2 b.
ccom := com;
y <= i;
wait for 0.5ns;
tajm;
Proc1;
com:= ccom;
if ADBit(215) = '1' then rel; end if;
when "01000001" => ajmp("01000000000"); -- AJMP 010+ad 8 2 b.
when "01000010" => -- ORL ad,A 2 b.
proc2(k,com);
if k = 128 then RAM(128):= BUFP0; end if;
if k = 144 then RAM(144):= BUFP1; end if;
if k = 160 then RAM(160):= BUFP2; end if;
if k = 176 then RAM(176):= BUFP3; end if;
RAM(k):= RAM(k) or RAM(224);
flag;
when "01000011" => -- ORL ad,#d 3 b.
proc2(k,com);
if k = 128 then RAM(128):= BUFP0; end if;
if k = 144 then RAM(144):= BUFP1; end if;
if k = 160 then RAM(160):= BUFP2; end if;
if k = 176 then RAM(176):= BUFP3; end if;
proc11;
RAM(k):= RAM(224) or com;
flag;
when "01000100" => -- ORL A,#d 2 b.
RAM(224):= RAM(224) or com;
when "01000101" => -- ORL A,ad 2 b.
proc2(k,com);
RAM(224):= RAM(224) or RP(k); --RAM(k);
when "01000110" => -- ORL A,@R0 1 b. 1 b.
proc2(k,RAM(bank+0));
RAM(224):= RAM(224) or RP(k); --RAM(k);
when "01000111" => -- ORL A,@R1 1 b.
proc2(k,RAM(bank+1));
RAM(224):= RAM(224) or RP(k); --RAM(k);
when "01010000" => -- JNC rel 2 b.
ccom := com;
y <= i;
wait for 0.5ns;
tajm;
Proc1;
com := ccom;
if ADBit(215) = '0' then rel; end if;
when "01010001" => acall("01000000000"); -- ACALL 010+ad8 2 b.
when "01010010" => -- ANL ad,A 2 b.
proc2(k,com);
if k = 128 then RAM(128):= BUFP0; end if;
if k = 144 then RAM(144):= BUFP1; end if;
if k = 160 then RAM(160):= BUFP2; end if;
if k = 176 then RAM(176):= BUFP3; end if;
RAM(k):= RAM(224) and RAM(k);
flag;
when "01010011" =>
proc2(k,com);
if k = 128 then RAM(128):= BUFP0; end if;
if k = 144 then RAM(144):= BUFP1; end if;
if k = 160 then RAM(160):= BUFP2; end if;
if k = 176 then RAM(176):= BUFP3; end if;
proc11;
RAM(k):= RAM(k) and com;
flag;
when "01010100" => -- ANL A,#d 2 b.
RAM(224):= RAM(224) and com;
when "01010101" => -- ANL A,ad 2 b.
proc2(k,com);
RAM(224):= RAM(224) and RP(k); --RAM(k);
when "01010110" => -- ANL A,@R0 1 b.
proc2(k,RAM(bank+0));
RAM(224):= RAM(224) and RP(k); --RAM(k);
when "01010111" => -- ANL A,@R1 1 b.
proc2(k,RAM(bank+1));
RAM(224):= RAM(224) and RP(k); --RAM(k);
when "01100000" => -- JZ rel 2 b.
ccom := com;
y <= i;
wait for 0.5ns;
tajm;
Proc1;
com := ccom;
if RAM(224) = "00000000" then rel; end if;
when "01100001" => ajmp("01100000000"); -- AJMP 011+ad 8 2 b.
when "01100010" => -- XRL ad,A 2 b.
proc2(k,com);
if k = 128 then RAM(128):= BUFP0; end if;
if k = 144 then RAM(144):= BUFP1; end if;
if k = 160 then RAM(160):= BUFP2; end if;
if k = 176 then RAM(176):= BUFP3; end if;
RAM(k):= RAM(224) xor RAM(k);
flag;
when "01100011" => -- XRL ad,#d 3 b.
proc2(k,com);
if k = 128 then RAM(128):= BUFP0; end if;
if k = 144 then RAM(144):= BUFP1; end if;
if k = 160 then RAM(160):= BUFP2; end if;
if k = 176 then RAM(176):= BUFP3; end if;
proc11;
RAM(k):= RAM(k) xor com;
flag;
when "01100100" => -- XRL A,#d 2 b.
RAM(224):= RAM(224) xor com;
when "01100101" => -- XRL A,ad 2 b.
proc2(k,com);
RAM(224):= RAM(224) xor RP(k); --RAM(k);
when "01100110" => -- XRL A,@R0 1 b.
proc2(k,RAM(bank+0));
RAM(224):= RAM(224) xor RP(k); --RAM(k);
when "01100111" => -- XRL A,@R1 1 b.
proc2(k,RAM(bank+1));
RAM(224):= RAM(224) xor RP(k); --RAM(k);
when "01110000" => -- JNZ rel 2 b.
ccom := com;
y <= i;
wait for 0.5ns;
tajm;
Proc1;
com := ccom;
if RAM(224) /= "00000000" then rel;
else
end if;
when "01110001" => acall("01100000000"); -- ACALL 011+ad8 2 b.
when "01110010" => -- ORL C,Bit 2 b.
proc2(k,com);
pr:=RAM(208);
pr(7):=pr(7) or RPB(k); --AdBit(k);
RAM(208):=pr;
ff:= '1';
when "01110011" => -- JMP @A+DPTR 1 b.
dptr;
proc2(j,RAM(224));
ff:='1';
i:=k+j;
if i > 65535 then i:= i - 65536; end if;
when "01110100" => mov_r_d (224); -- MOV A,#d 2 b.
when "01110101" => -- MOV ad,#d 3 b.
proc2(k,com);
proc11;
mov_r_d (k);
flag;
when "01110110" => -- MOV @R0,#d 2 b.
proc2(k,RAM(bank+0));
mov_r_d (k);
flag;
when "01110111" => -- MOV @R1,#d 2 b.
proc2(k,RAM(bank+1));
mov_r_d (k);
flag;
when "10000000" =>
rel; -- SJMP rel 2 b.
when "10000001" => ajmp("10000000000"); -- AJMP 100+ad 8 2 b.
when "10000010" => -- ANL C,Bit 2 b.
proc2(k,com);
pr:=RAM(208);
pr(7):=pr(7) and RPB(k); --AdBit(k);
RAM(208):=pr;
ff:='1';
when "10000011" => -- MOVC A,@A+PC 1 b.
proc2(j,RAM(224));
k:=j+i;
if k > 65535 then k:= k - 65535; end if;
tajm;
y <= k;
wait for 1 ns;
proc1;
tajm;
y <= i;
wait for 1 ns;
proc1;
RAM(224):=com;
when "10000100" => -- DIV AB 1 b.
proc2(k,RAM(224));
proc2(j,RAM(240));
if j = 0 then
RAM(208):= RAM(208) or "00000100";
else
k1:=k mod j;
proc3(k1,RAM(240));
k:=k - k1;
k:=k/j;
proc3(k,RAM(224));
RAM(208):= RAM(208) and "01111011";
end if;
proc1; tajm;
proc1; tajm;
proc1; tajm;
proc1; tajm;
proc1; tajm;
proc1; tajm;
when "10000101" => -- MOV add,ads 3 b.
proc2(k,com);
proc11;
proc2(j,com);
RAM(j):=RP(k);--RAM(k);
flag;
when "10000110" => -- MOV ad,@R0 2 b.
proc2(k,com);
proc2(j,RAM(bank+0));
RAM(k):=RP(j);--RAM(j);
flag;
when "10000111" => -- MOV ad,@R1 2 b.
proc2(k,com);
proc2(j,RAM(bank+1));
RAM(k):=RP(j);--RAM(j);
flag;
when "10010000" => -- MOV DPTR,#d16 3 b.
RAM(131):=com;
proc11;
RAM(130):=com;
when "10010001" => acall("10000000000"); -- ACALL 100+ad8 2 b.
when "10010010" => -- MOV Bit,C 2 b.
proc2(k,com);
case com(7 downto 3) is
when "10000" => ADBit(135 downto 128) := BUFP0; flp0 <= '1';
when "10010" => ADBit(151 downto 144) := BUFP1; flp1 <= '1';
when "10100" => ADBit(167 downto 160) := BUFP2; flp2 <= '1';
when "10110" => ADBit(183 downto 176) := BUFP3; flp3 <= '1';
when others => flp0 <= '0'; flp1 <= '0'; flp2 <= '0'; flp3 <= '0';
end case;
pr:=RAM(208);
AdBit(k):= pr(7);
FBit := '1';
ff:='1';
when "10010011" => -- MOVC A,@A+DPTR 1 b.
dptr;
proc2(j,RAM(224));
k:=j+k;
if k > 65535 then k:= k - 65535; end if;
tajm;
y <= k;
wait for 1 ns;
proc1;
tajm;
y <= i;
wait for 1 ns;
proc1;
RAM(224):=com;
when "10010100" => -- SUBB A,#d 2 b.
subb(com);
when "10010101" => -- SUBB A,ad 2 b.
proc2(k,com);
subb(RP(k));--subb(RAM(k));
when "10010110" => -- SUBB A,@R0 1 b.
proc2(k,RAM(bank+0));
subb(RP(k));--subb(RAM(k));
when "10010111" => -- SUBB A,@R1 1 b.
proc2(k,RAM(bank+1));
subb(RP(k));--subb(RAM(k));
when "10100000" => -- ORL C,/Bit 2 b.
proc2(k,com);
b1:=RPB(k); --AdBit(k);
pr:=RAM(208);
b1:= not b1;
pr(7):=pr(7) or b1;
RAM(208):=pr;
ff := '1';
when "10100001" => ajmp("10100000000"); -- AJMP 101+ad 8 2 b.
when "10100010" => -- MOV C,Bit 2 b.
proc2(k,com);
pr:=RAM(208);
pr(7):= RPB(k);--AdBit(k);
RAM(208):=pr;
when "10100011" => -- INC DPTR 1 b.
dptr;
if k > 65534 then k:=0;
else k:=k+1;
end if;
proc31(k,pr2);
RAM(130):= pr2(7 downto 0);
RAM(131):= pr2(15 downto 8);
proc1; tajm;
proc1; tajm;
when "10100100" => -- MUL AB 1 b.
proc2(k,RAM(224));
proc2(j,RAM(240));
k:=k*j;
if k > 255 then RAM(208):= (RAM(208) and "01111111") or "00000100";
else RAM(208):= RAM(208) and "01111011";
end if;
proc31(k,pr2);
RAM(240):=pr2(15 downto 8);
RAM(224):=pr2(7 downto 0);
proc1; tajm;
proc1; tajm;
proc1; tajm;
proc1; tajm;
proc1; tajm;
proc1; tajm;
when "10100101" => j:=j; --prerror ; -- invalid instruction
when "10100110" => -- MOV @R0,ad 2 b.
proc2(k,com);
proc2(j,RAM(bank+0));
RAM(j):=RP(k);--RAM(k);
when "10100111" => -- MOV @R1,ad 2 b.
proc2(k,com);
proc2(j,RAM(bank+1));
RAM(j):=RP(k);--RAM(k);
when "10110000" => -- ANL C,/Bit 2 b.
proc2(k,com);
b1:=RPB(k);--AdBit(k);
pr:=RAM(208);
b1:= not b1;
pr(7):=pr(7) and b1;
RAM(208):=pr;
ff:='1';
when "10110010" => -- CPL Bit 2 b.
proc2(k,com);
case com(7 downto 3) is
when "10000" => ADBit(135 downto 128) := BUFP0; flp0 <= '1';
when "10010" => ADBit(151 downto 144) := BUFP1; flp1 <= '1';
when "10100" => ADBit(167 downto 160) := BUFP2; flp2 <= '1';
when "10110" => ADBit(183 downto 176) := BUFP3; flp3 <= '1';
when others => flp0 <= '0'; flp1 <= '0'; flp2 <= '0'; flp3 <= '0';
end case;
AdBit(k):=not AdBit(k);
FBit := '1';
when "10110011" => -- CPL C 1 b.
pr:=RAM(208);
pr(7):= not pr(7);
RAM(208):=pr;
when "10110100" => -- CJNE A,#d,rel 3 b.
cjne(RAM(224),com);
when "10110101" => -- CJNE A,ad,rel 3 b.
proc2(k,com);
cjne(RAM(224),RP(k));--RAM(k));
when "10110110" => -- CJNE @R0,#d,rel 3 b.
proc2(k,RAM(bank+0));
cjne(RP(k),com);--RAM(k),com);
when "10110111" => -- CJNE @R1,#d,rel 3 b.
proc2(k,RAM(bank+1));
cjne(RP(k),com);--RAM(k),com);
when "11000000" => -- PUSH ad 2b.
proc2(k,RAM(129));
k:=k+1;
proc3(k,RAM(129));
proc2(j,com);
RAM(k):= RP(j);--RAM(j);
when "11000001" => ajmp("11000000000"); -- AJMP 110+ad 8 2 b.
when "11000010" => -- CLR Bit 2 b.
proc2(k,com);
case com(7 downto 3) is
when "10000" => ADBit(135 downto 128) := BUFP0; flp0 <= '1';
when "10010" => ADBit(151 downto 144) := BUFP1; flp1 <= '1';
when "10100" => ADBit(167 downto 160) := BUFP2; flp2 <= '1';
when "10110" => ADBit(183 downto 176) := BUFP3; flp3 <= '1';
when others => flp0 <= '0'; flp1 <= '0'; flp2 <= '0'; flp3 <= '0';
end case;
ADBit(k):='0';
FBit := '1';
when "11000011" => ADBit(215):='0'; -- CLR C 1 b.
FBit := '1';
flp0 <= '0'; flp1 <= '0';
flp2 <= '0'; flp3 <= '0';
when "11000100" =>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -