Continue to Site

Welcome to EDAboard.com

Welcome to our site! EDAboard.com is an international Electronics Discussion Forum focused on EDA software, circuits, schematics, books, theory, papers, asic, pld, 8051, DSP, Network, RF, Analog Design, PCB, Service Manuals... and a whole lot more! To participate you need to register. Registration is free. Click here to register now.

Pleaze. Help me. Programming AT89s51 with Com Port

Status
Not open for further replies.

joedarton

Newbie level 4
Joined
Jan 26, 2007
Messages
6
Helped
0
Reputation
0
Reaction score
0
Trophy points
1,281
Activity points
1,378
at89s51 programming enable

My Name is Joe, Student in VietNam.
Please Help me!

I have a final Exam in University. Topic "Programming ISP 89S51 using 89c51". It likes "89Sxx In-Circuit Serial Programmer".
I have promblem with "Serial Programming Timing".
I am coding some function. But function doesn`t work.
After I call function "Programming_Enable" output data is Acc=0. ( not =01101001B)
Pleaze help me fix some problems.
Thank you very very very very ..... much.
Pin connet:
Master At89c51 Slaver AT89s51
P1.0 RST
P1.1 SCK
P1.2 MISO
P1.3 MOSI
My Coding:
"*****************************"
" Funtion Write One Byte To 89s52 "
"*****************************"
WRITE_BYTE:
JB ACC.0, LABEL0
CLR P1.3
LJMP LA0
LABEL0: SETB P1.3
LA0: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
JB ACC.1, LABEL1
CLR P1.3
LJMP LA1
LABEL1: SETB P1.3
LA1: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
JB ACC.2, LABEL2
CLR P1.3
LJMP LA2
LABEL2: SETB P1.3
LA2: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
JB ACC.3, LABEL3
CLR P1.3
LJMP LA3
LABEL3: SETB P1.3
LA3: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
JB ACC.4, LABEL4
CLR P1.3
LJMP LA4
LABEL4: SETB P1.3
LA4: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
JB ACC.5, LABEL5
CLR P1.3
LJMP LA5
LABEL5: SETB P1.3
LA5: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
JB ACC.6, LABEL6
CLR P1.3
LJMP LA6
LABEL6: SETB P1.3
LA6: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
JB ACC.7, LABEL7
CLR P1.3
LJMP LA7
LABEL7: SETB P1.3
LA7: NOP
SETB P1.1
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
NOP
RET
************************************************** ******

"***************************************"
" Funtion Write 4 Byte to AT89s51 "
" Input : R0 : begin address memory using store data"
"***************************************"
WRITE_4_BYTE:
MOV R1,#4
LAP_WRITE_4_BYTE:
MOV A,@R0
INC R0
LCALL WRITE_BYTE
DJNZ R1,LAP_WRITE_4_BYTE
RET
************************************************** *
"***************************************"
" Funtion Programming Enable "
" DATA: MOV 20H,#10101100B "
" MOV 21H,#01010011B "
" MOV 22H,#0 "
" MOV 23H,#0 "
" Input : R0 : begin address memory using store data (#20H)"
" Output: ACC=01101001B "
"***************************************"

PROGRAMING_ENABLE:
SETB P1.0
NOP
NOP
NOP
NOP
NOP
NOP
MOV R0,#20H
LCALL WRITE_4_BYTE
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP0
SETB ACC.0
LJMP RAP0
READP0: CLR ACC.0
RAP0: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP1
SETB ACC.1
LJMP RAP1
READP1: CLR ACC.1
RAP1: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP2
SETB ACC.2
LJMP RAP2
READP2: CLR ACC.2
RAP2: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP3
SETB ACC.3
LJMP RAP3
READP3: CLR ACC.3
RAP3: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP4
SETB ACC.4
LJMP RAP4
READP4: CLR ACC.4
RAP4: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP5
SETB ACC.5
LJMP RAP5
READP5: CLR ACC.5
RAP5: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP6
SETB ACC.6
LJMP RAP6
READP6: CLR ACC.6
RAP6: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READP7
SETB ACC.7
LJMP RAP7
READP7: CLR ACC.7
RAP7: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
RET
************************************************** ********
"***************************************"
" Funtion Erase Data "
" DATA: MOV 24H,#10101100B "
" MOV 25H,#10000000B "
" MOV 26H,#0 "
" MOV 27H,#0 "
" Input : R0 : begin address memory using store data (#24H)"
"***************************************"

ERASE_DATA:
MOV R0,#24H
LCALL WRITE_4_BYTE
MOV R3,#10
LAP_ERASE_DATA0:
MOV R4,#250
LAP_ERASE_DATA1:
MOV R5,#200
DJNZ R5,$
DJNZ R4,LAP_ERASE_DATA1
DJNZ R3,LAP_ERASE_DATA0
RET
************************************************** ******
"***************************************"
" Funtion Programming Enable "
" DATA: MOV 28H,##00100000B "
" MOV 29H, "
" MOV 2AH,#0 "
" MOV 2BH,#0 "
" Input : R0 : begin address memory using store data (#28H)"
" Output: ACC : data readed "
"***************************************"
READ_BYTE:
MOV R0,#28H
LCALL WRITE_4_BYTE
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ0
SETB ACC.0
LJMP RA0
READ0: CLR ACC.0
RA0: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ1
SETB ACC.1
LJMP RA1
READ1: CLR ACC.1
RA1: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ2
SETB ACC.2
LJMP RA2
READ2: CLR ACC.2
RA2: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ3
SETB ACC.3
LJMP RA3
READ3: CLR ACC.3
RA3: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ4
SETB ACC.4
LJMP RA4
READ4: CLR ACC.4
RA4: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ5
SETB ACC.5
LJMP RA5
READ5: CLR ACC.5
RA5: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ6
SETB ACC.6
LJMP RA6
READ6: CLR ACC.6
RA6: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
NOP
NOP
NOP
SETB P1.1
NOP
NOP
JB P1.2, READ7
SETB ACC.7
LJMP RA7
READ7: CLR ACC.7
RA7: NOP
NOP
NOP
NOP
NOP
NOP
CLR P1.1
RET
*************************************************


Added after 11 minutes:

Your email: Joedarton@gmail.com
 

at89s51 timing diagram

Try this:
Code:
RST   bit   P1.0
SCK   bit   P1.1
MISO  bit   P1.2
MOSI  bit   P1.3
"*****************************"
" Function Write One Byte To 89s52 "
"*****************************"
WriteByte:
        CLR   SCK
        MOV   R7,#8
ShiftLeft:
        RLC   A
        MOV   MOSI,C
        NOP
        NOP
        SETB  SCK
;        
        PUSH  A
        MOV   A,B
        MOV   C,MISO
        RLC   A
        MOV   B,A
        POP   A
        CLR   SCK
;
        DJNZ  R7,ShiftLeft
        MOV   A,B
        RET

**************************************************

"***************************************"
" Funtion Write 4 Byte to AT89s51 "
" Input : R0 : begin address memory using store data"
"***************************************"
WRITE_4_BYTE:
        MOV R1,#4
WriteLoop:
        CLR   A
        MOVC  A,@A+DPTR
        INC   DPTR
        LCALL WriteByte
        DJNZ  R1,WriteLoop
        RET

"***************************************"
" Funtion Programming Enable 
" Output: ACC=01101001B 
"***************************************"
EnableCode:
        DB    0ACH,53H,0,0
PROGRAMING_ENABLE:
        SETB  RST
        MOV   DPTR,#EnableCode
        LCALL WRITE_4_BYTE
        CLR   RST
        RET

above code is implementing this timing diagram
49_1169867681.gif
 

at89s51 programming print port

Thank you for help me.
i m trying it with your code.. but it doesnt work.
i call function Enable_program but output = 0 (not 01101001)
MAIN:
MOV P2,#0
MOV SCON,#52H
MOV TMOD,#21H
MOV TH1,#-3
MOV TL1,TH1
SETB TR1
MOV A,#66
LCALL SEND_PC
LCALL SPI_INIT
LCALL WRITEBYTE
MOV R0,#0FFH
LCALL DELAY
LCALL READBYTE
MOV A,#67
LCALL SEND_PC
CLR P1.0

SJMP $

*****************************************
RITEBYTE:
PUSH ACC
MOV A,#40H ;WRITE SPI BYTE 1
LCALL WRITE_BYTE
MOV A,#00H ;WRITE SPI BYTE 2
LCALL WRITE_BYTE
MOV A,#11H ;WRITE SPI BYTE 3
LCALL WRITE_BYTE
MOV A,#65H ;WRITE SPI BYTE 4
LCALL WRITE_BYTE
POP ACC
MOV R0,#0FFH
LCALL DELAY
RET
**********************************************
READBYTE:
MOV A,#20H ;WRITE SPI BYTE 1
LCALL WRITE_BYTE
MOV A,#00H ;WRITE SPI BYTE 2
LCALL WRITE_BYTE
MOV A,#11H ;WRITE SPI BYTE 3
LCALL WRITE_BYTE
MOV A,#00H ;WRITE SPI BYTE 4
LCALL WRITE_BYTE
LCALL READ_BYTE
LCALL SEND_PC
RET
************************************************
SPI_INIT:
CLR P1.1
CLR P1.0
MOV R0,#0FFH
LCALL DELAY
SETB P1.0
MOV R0,#0FFH
LCALL DELAY
PUSH ACC
MOV A,#0ACH ;WRITE SPI BYTE 1
LCALL WRITE_BYTE
MOV A,#053H ;WRITE SPI BYTE 2
LCALL WRITE_BYTE
MOV A,#00H ;WRITE SPI BYTE 3
LCALL WRITE_BYTE
MOV A,#00H ;WRITE SPI BYTE 4
LCALL WRITE_BYTE
POP ACC
MOV R0,#10H
LCALL DELAY
RET
*******************************************
SPI_ERASE:
PUSH ACC
MOV A,#0ACH ;WRITE SPI BYTE 1
LCALL WRITE_BYTE
MOV A,#80H ;WRITE SPI BYTE 2
LCALL WRITE_BYTE
MOV A,#00H ;WRITE SPI BYTE 3
LCALL WRITE_BYTE
MOV A,#00H ;WRITE SPI BYTE 4
LCALL WRITE_BYTE
POP ACC
LLL:
MOV R7,#20
MOV R0,#0FFH
LCALL DELAY
DJNZ R7,LLL
RET
***********************************
READ_BYTE:
MOV A,#0
WRITE_BYTE:
MOV R0,#8
RW0:
RLC A
MOV P1.3,C
NOP
NOP
SETB P1.1
PUSH ACC
MOV A,B
RLC A
MOV C,P1.2
MOV B,A
POP ACC
CLR P1.1
NOP
NOP
RW3:
DJNZ R0,RW0
MOV A,B
RET
******************************************
DELAY:
MOV R0,#0FFH
DJNZ R0,$
DJNZ R7,DELAY
RET

Added after 2 minutes:

i m testing functon write and function read.. its does not work, too.
Thank you for help me.
 

programming at89s51

Test this first, after that test other function
Code:
RST   bit   P1.0
SCK   bit   P1.1
MISO  bit   P1.2
MOSI  bit   P1.3

MAIN:
        MOV   P2,#0
        MOV   SCON,#52H
        MOV   TMOD,#20h
        MOV   TH1,#-3
        SETB  TR1
        MOV   A,#'B'
        ACALL SEND_PC
        ACALL SPI_INIT
        ACALL Out2Hex     ; echo result to PC
        MOV   A,#'C'
        ACALL SEND_PC
        CLR   RST

        SJMP  $
        
; Print A as 2 Hex char        
Out2Hex:
        PUSH  A
        SWAP  A
        ACALL OutHex
        POP   A
; Print A as 1 Hex char        
OutHex:
        ANL   A,#00Fh
        ADD   A,#030h
        CJNE  A,#03Ah,Test
Test:
        JC    SEND_PC
        ADD   A,#7          ; 'A' .. 'F'
SEND_PC:
        MOV   SBUF,A
        JNB   TI,$
        CLR   TI
        RET
       
*****************************************

SPI_INIT:
        CLR   SCK
        SETB  RST
        MOV   A,#0ACH           ;WRITE SPI BYTE 1
        ACALL WRITE_BYTE
        MOV   A,#053H           ;WRITE SPI BYTE 2
        ACALL WRITE_BYTE
        MOV   A,#00H            ;WRITE SPI BYTE 3
        ACALL WRITE_BYTE
        MOV   A,#00H            ;WRITE SPI BYTE 4
WRITE_BYTE:
        MOV   R0,#8
RW0:
        RLC   A
        MOV   MOSI,C
        NOP
        NOP
        SETB  SCK
        PUSH  ACC
        MOV   A,B
        MOV   C,MISO      ; don't alter sequence
        RLC   A           ;  of this 2 lines
        MOV   B,A
        POP   ACC
        CLR   SCK
        DJNZ  R0,RW0
        MOV   A,B
        RET
 

make sure your interrupt be closed.
as you have set the timer and your code starts from address 0x0000, which is the interrupt vector address
 

Thank you budhy.
I writed SPI_INIT as you write. I work very good.
after I'm coding WriteByte and ReadByte as :
KHOA:
MOV P2,#0
MOV SCON,#52H
MOV TMOD,#21H
MOV TH1,#-3
MOV TL1,TH1
SETB TR1
MOV ADDH,#0
MOV ADDL,#0

MOV A,#'A'
ACALL SEND_PC
ACALL SPI_INIT
ACALL OUT2HEX ; echo result to PC
ACALL SPI_ERASE

MOV R1,#'Z'
ACALL WRITEBYTE ;It not work
ACALL READBYTE ; It not work output FF
ACALL SEND_PC
MOV A,#'R'
ACALL SEND_PC
CLR P1.0
SJMP $













WRITEBYTE:
MOV A,#40H ;WRITE SPI BYTE 1
ACALL WRITE_BYTE
MOV A,ADDH ;WRITE SPI BYTE 2
ACALL WRITE_BYTE
MOV A,ADDL ;WRITE SPI BYTE 3
ACALL WRITE_BYTE
MOV A,@R1 ;WRITE SPI BYTE 4
ACALL WRITE_BYTE

MOV R7,#0FFH
ACALL DELAY
RET

READBYTE:
MOV A,#20H ;WRITE SPI BYTE 1
ACALL WRITE_BYTE
MOV A,ADDL ;WRITE SPI BYTE 2
ACALL WRITE_BYTE
MOV A,ADDL ;WRITE SPI BYTE 3
ACALL WRITE_BYTE
ACALL READ_BYTE
MOV @R1,A
RET

it not work. i can't fix error. please you help me.. Thank you very much
Joe

Added after 1 minutes:

your email : joedarton@gmail.com
 

Sorry, please send your complete code as a attachment.
 

my code

Added after 4 minutes:

i dont attach file. please give me your email..!
 

Status
Not open for further replies.

Similar threads

Part and Inventory Search

Welcome to EDABoard.com

Sponsor

Back
Top