Yêu cầu thiết kế bộ nhớ Ram ngoài cho 89C51. Đã thiết kế và tiến hành chạy thử trên Proteus, chạy rất ngon. Chương trình viết bằng cả Keil C và hợp ngữ nhưng không hiểu tại sao khi rút chốt 74LS373 mạch vẫn chạy mặc dù nếu không có chốt thì không thể truyền địa chỉ cho RAM ngoài. Mong các đại gia ngâm cứu và giúp đỡ !
_____ Chương trình C:
#include <regx51.h>
#include <absacc.h>
void delay(unsigned char ms){
unsigned char i,j;
for(i=0;i<ms;i++)
for(j=0;j<250;j++)
{}
}
void viet(unsigned char d,unsigned int dc){
XBYTE[dc]=d;
}
void doc(unsigned char dc){
P1=XBYTE[dc];
delay(1000);
}
void main()
{
unsigned char dc,n;
dc=0x1000;
while(1){
for(n=0;n<256;n++) // Viết các số từ 0 đến 255
{
viet(n,dc);
doc(dc);
dc++;
}
}
}
___ Chương trình hợp ngữ:
; thu lam!!!
COUNT EQU 10000
org 00h
mov TMOD,#01h
MOV R0,#09
mov A,#00h
mov DPTR,#1000h
GHI:
movx @DPTR,A
movx A,@DPTR
mov P1,A
ACALL DELAY
INC A
INC DPTR
DEC R0
JNZ GHI
DELAY:
MOV R2,#100
LAP1:
MOV TH0,#HIGH COUNT
MOV TL0,#LOW COUNT
SETB TR0
LAP2:
JNB TF0, LAP2
CLR TR0
CLR TF0
DJNZ R2, LAP1
RET
RET
END
_____ Chương trình C:
#include <regx51.h>
#include <absacc.h>
void delay(unsigned char ms){
unsigned char i,j;
for(i=0;i<ms;i++)
for(j=0;j<250;j++)
{}
}
void viet(unsigned char d,unsigned int dc){
XBYTE[dc]=d;
}
void doc(unsigned char dc){
P1=XBYTE[dc];
delay(1000);
}
void main()
{
unsigned char dc,n;
dc=0x1000;
while(1){
for(n=0;n<256;n++) // Viết các số từ 0 đến 255
{
viet(n,dc);
doc(dc);
dc++;
}
}
}
___ Chương trình hợp ngữ:
; thu lam!!!
COUNT EQU 10000
org 00h
mov TMOD,#01h
MOV R0,#09
mov A,#00h
mov DPTR,#1000h
GHI:
movx @DPTR,A
movx A,@DPTR
mov P1,A
ACALL DELAY
INC A
INC DPTR
DEC R0
JNZ GHI
DELAY:
MOV R2,#100
LAP1:
MOV TH0,#HIGH COUNT
MOV TL0,#LOW COUNT
SETB TR0
LAP2:
JNB TF0, LAP2
CLR TR0
CLR TF0
DJNZ R2, LAP1
RET
RET
END
Comment