程式碼如下
ORG 0000H
JMP START
ORG 0023H
JMP INTERR
START:
MOV SP,#70H
MOV DPTR,#TABLE
MOV 20H,#00H
MOV 21H,#00H
MOV IE,#10010000B
MOV SCON,#01110000B
MOV TMOD,#00100000B
MOV TH1,#0FDH
SETB TR1
MAIN:
CLR P1.7
ACALL DELAY
SETB P1.7
WAIT:
JB P1.6,WAIT
MOV A,P2
MOV B,A
SWAP A
ANL A,#00001111B
MOVC A,@A+DPTR
MOV DPTR,
MOV 20H,A
MOV A,B
ANL A,
MOVC A,@A+DPTR
MOV 21H,A
SETB TI
AJMP MAIN
INTERR:
PUSH A
JBC TI,TIINT
POP A
RETI
TIINT:
MOV A,20H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,21H
MOV SBUF,A
JNB TI,$
CLR TI
POP A
RETI
DELAY:
MOV R6,#20
DL1: MOV R7,#200
DJNZ R7,$
DJNZ R6,DL1
RET
TABLE:
DB 30H
DB 31H
DB 32H
DB 33H
DB 34H
DB 35H
DB 36H
DB 37H
DB 38H
DB 39H
DB 41H
DB 42H
DB 43H
DB 44H
DB 45H
DB 46H
END 作者: alphi 時間: 2011-11-7 22:17:39
修改後的程式如下,試試看
ORG 0000H
JMP START
ORG 0023H
JMP INTERR
START:
MOV SP,#70H
MOV DPTR,#TABLE
MOV 20H,#00H
MOV 21H,#00H
MOV IE,#10010000B
MOV SCON,#01110000B
MOV TMOD,#00100000B
MOV TH1,#0FDH
SETB TR1
MAIN:
CLR P1.7
ACALL DELAY
SETB P1.7
WAIT:
JB P1.6,WAIT
MOV A,P2
MOV B,A
SWAP A
ANL A,#00001111B
MOVC A,@A+DPTR
; MOV DPTR,
MOV 20H,A
MOV A,B
ANL A,#00001111B
MOVC A,@A+DPTR
MOV 21H,A
SETB TI
AJMP MAIN
INTERR:
PUSH A
JBC TI,TIINT
POP A
RETI
TIINT:
MOV A,20H
MOV SBUF,A
JNB TI,$
CLR TI
MOV A,21H
MOV SBUF,A
JNB TI,$
CLR TI
POP A
RETI
DELAY:
MOV R6,#20
DL1: MOV R7,#200
DJNZ R7,$
DJNZ R6,DL1
RET
TABLE: ; ASCII code: 0..9,A..F
DB 30H,31H,32H,33H,34H
DB 35H,36H,37H,38H,39H
DB 41H,42H,43H,44H,45H
DB 46H
END 作者: sss555 時間: 2011-11-9 21:03:22
alphi 大師~ 這我從網上找到的 是能寫入8051上 但是我不曉得 為什麼RS232總是沒反應 在這感謝大大
程式如下
// Program to read the values of ADC and serially tranmitting it to PC.
#include<reg51.h>
sbit wr= P2^0; // Write pin. It is used to start the conversion.
sbit rd= P2^1; // Read pin. It is used to extract the data from internal register to the output pins of ADC.
sbit intr= P2^2; // Interrupt pin. This is used to indicate the end of conversion. It goes low when conversion is complete.
void transmit() // Function for serial tranmission of data.
{
SBUF=P1;
while(TI==0);
TI=0;
}
void delay(unsigned int msec ) // The delay function provides delay in msec.
{
int i ,j ;
for(i=0;i<msec;i++)
for(j=0; j<1275; j++);
}
void adc() //Function to read the values from ADC and tranmit serially.
{
rd=1;
wr=0;
delay(2);
wr=1;
while(intr==1);
rd=0;
transmit();
delay(2);
intr=1;
}
void init() // Intialize timer 1 in mode 2 for serial transmission. The baud rate is set to 9600bps.
{
TMOD=0x20;
TH1=0xFD;
SCON=0x50;
TR1=1;
}