Sunday, January 13, 2008

89S51 Microcontroller Based System Design using CKIT-06A

Golam Mostafa
Associate Professor, AUST,
Tel: 7161846, Email: mostafagb@yahoo.com


A: Introduction to 89S51 Microcontroller

A single chip of 40-pin dip package (Fig-1) containing (i) Boolean Processor (ii) 4K Flash to store Program Codes, (iii) 128 Byte RAM, (iv) 2 Timers/Counters, (v) 2 Hardware Interrupts, (vi) Full-duplex Serial IO, (vii) 26 Individual Programmable IO Lines, (viii) Program Code Security Bit and (ix) In System Programming Interface (ISP). The 89S51 MCU provides a very cost effective single chip solution to many of the system designs like Digital Taximeter, Digital Weighing Machine and the similar. The readers are referred to ‘MicroTalk-8051/User Technical Reference Manual/By: Golam Mostafa’ for the detailed application notes of the 89S51 microcontroller. The ISP interface of the 89S51 allows a user to program it (reading, erasing, writing and security bit set) without removing it from the holding instrument and using a very simple PC-based driver and a communication link (Fig-2).

B: Introduction to CKIT- 06A

The CKIT (Fig-3a and 3b) is a very low cost MCU learning/development system and is particularly built for the students and the amateurs, who cannot easily afford to procure the costly development systems like MicroTalk-8051 (Fig-4) and a conventional ROM programmer.

Thanks to the Atmel Co. for the development and release of their ‘S-Series’ of CISC (89S51, 89S52, 89S8252) and RISC (S2313, S8515) microcontrollers, which inspired the author to develop the CKIT. These MCU have hardware ports called ‘In System Programming Port’ or simply ISP Port. The ISP port allows a user to write binary codes into the EEPROM of the MCU using only a 3-core cable and a programming driver.

Figure-2 refers to the hardware aspect of the ISP port of the MCU. The DOS-based Software Driver (P89S51.EXE), DOS-based 8051 Assembler (ASM51), InteHex-to-BINary Converter, Example Programs, Data Conversion Algorithms and Example System Designs (Digital Taximeter, Digital Weighing Machine and Remote Controlled Regulation System) could be found in the User Technical Reference Manual that accompanies the CKIT trainer. The source codes for the software driver could be obtained from the author under some moderate conditions.

The users are informed that there exits some instability within the functioning of the ‘Programming Driver’. It has been observed that the programmer does not always become successful in writing the codes/data into the EEPROM in one attempt. It requires erasing the chip for the second and third times and then writing the codes into the EEPROM. Some of us may be inspired to write a GUI-based driver for the CKIT, which would work in the WINDOWS platform.

C: Example System Design using CKIT06A and 89S51 MCU

Procedures:

1. Use telephone hook up wires and build the following circuit on the breadboard and connect them with the MCU as per diagram of Fig-5.

i. 20mS TT (Time Tick) acquisition circuit from the line frequency

ii. Time Display Unit using CC-type 7-Sement Display devices

2. Boot the PC in pure DOS mode and enter in the path: C:\CKITA

3. Connect the CKIT with the PC using the LPT port.

4. Store the program C:\CKITA\CK24HR.BIN in the code memory of the MCU.

5. Execute the program: CK24HR.

6. The 24-Hr Clock should run. If the clock does not work, adjust the time delay of the program.

Design Analysis of the 24-Hr Clock System:

1. See Figure-6 for the Data Structure of 24-Hr Clock

2. The Source Codes for the 24-Hr Clock:

$mod51

; program for 7segment test

$OBJECT(c:\ckita\CK24Hr.obj)

ORG 0000H

DB 02H

DB 00H

DB 10H

ORG 0010H

L1: MOV SP, #70H
MOV PSW, #00H

MOV 54H, #00H ; Hour
MOV 53H, #00H ; Minutes
MOV 52H, #00H ; Seconds

MOV 40H, #3FH ; 0
MOV 41H, #06H ; 1
MOV 42H, #5BH ; 2
MOV 43H, #4FH ; 3
MOV 44H, #66H ; 4
MOV 45H, #6DH ; 5
MOV 46H, #7DH ; 6
MOV 47H, #07H ; 7
MOV 48H, #7FH ; 8
MOV 49H, #6FH ; 9 CC-code table at upper RAM of MCU

MOV IE, #00H ; all interrupts are disabled
MOV TMOD, #06H; ; Time Integration Tick (for 1sec)
MOV TH0, #0CEH;
MOV TL0, #0CEH
CLR TF0
SETB TR0 ; Timer-0 is put into run mode

HERE:

JBC TF0, TIME_UPDATE
LJMP CCX7S ; 1-sec has not yet elapsed

TIME_UPDATE:

MOV A, 52H
ADD A, #01H
DA A
CJNE A, #60H, ADJ1
MOV 52H, #00H
MOV A, 53H
ADD A, #01H
DA A
CJNE A, #60H, ADJ2
MOV 53H, #00H
MOV A, 54H
ADD A, #01H
DA A
CJNE A, #24H, ADJ3
MOV 54H, #00H
LJMP BCD2CC

ADJ1:

MOV 52H, A
LJMP BCD2CC

ADJ2:

MOV 53H, A
LJMP BCD2CC

ADJ3:

MOV 54H, A

BCD2CC:

MOV R0, #54H ; R0 points at BCD Table
MOV R1, #3FH ; R1 points at CA Table
MOV R2, #03H ; Number of BCD bytes to convert

LSR1:

MOV A, @R0 ; A=00 ; getting 1st BCD
RR A
RR A
RR A
RR A
ANL A, #0FH ; A =00 ; to get cc code
ADD A, #40H ; A= 80
MOV 03H, R1 ; R1=R3=3F ; temporary saved
MOV R1, A ; R1 = 40
MOV A, @R1 ; A = C0
MOV R1, 03H ; R1 = R3 = 3F
MOV @R1, A ; (3F) = C0H
MOV A, @R0 ; A = 00
ANL A, #0FH
ADD A, #40H ; A = 40
MOV 03H, R1 ; R1=R3=3F
MOV R1, A ; R1 = 40
MOV A, @R1 ; A = C0
MOV R1, 03H ; R1=R3 = 3F
DEC R1 ; R1=3E
MOV @R1, A ; (3EH) = C0
DJNZ R2, LFW
LJMP FRWX

LFW:

DEC R0
DEC R1
LJMP LSR1

FRWX:

MOV A, 3EH ; placing points
ORL A, #80H
MOV 3EH, A
MOV A, 3CH
ORL A, #80H
MOV 3CH, A

CCX7S:

MOV P0, 3FH
MOV P2, #3EH ; DP0 0011 1110
LCALL TDELAY
MOV
P0, 3EH
MOV
P2, #3DH ; DP1 0011 1101
LCALL
TDELAY
MOV
P0, 3DH
MOV
P2, #3BH ; DP2 0011 1011
LCALL
TDELAY
MOV
P0, 3CH
MOV
P2, #37H ; DP3 0011 0111
LCALL TDELAY
MOV
P0, 3BH
MOV P2, #2FH ; DP4 0010 1111
LCALL TDELAY
MOV
P0, 3AH
MOV
P2, #1FH ; DP5 0001 1111
LCALL TDELAY
LJMP
HERE

TDELAY:

MOV R6, #20H

HERE2:

MOV R7, #20H

HERE1:

DJNZ R7, HERE1
DJNZ R6, HERE2
RET

END

Figure-1

Figure-2

Figure-3
Figure-4 and Figure-5

Figure-6

Figure-7


0 comments: