Professional Documents
Culture Documents
8051 Board Report
8051 Board Report
OBJECTIVES:
1. To design an Embedded System based on Atmel AT89C55/AT89S52 microcontroller.
2. Programming the system using Assembly & C language and verify the system.
3. Interface different peripherals to the system according to the design requirements.
Practical # 1
In this practical we interface 8 bit led bar with 8051 microcontroller port 1
and run a moving pattern of light on that bar by sending rotating pattern bits
from controller. 16x2 LCD module is interfaced on the same port so we are
using selector switch which selects LED Bar in this practical.
Circuit diagram:
Assembly Code:
ORG 00H
MOV A, #1H
RL A
ACALL DELAY
SJMP AGAIN
;------------------------------------------------------------------------------------------------------------------------------------------
; DELAY SUBROUTINE
;------------------------------------------------------------------------------------------------------------------------------------------
CLR TR0
CLR TF0
RET
END
Practical # 2
In this practical we will interface 16x2 LCD on port 1 of microcontroller and this time switch
enables LCD and disables Led Bar. LCD module is operated in 4 bit mode upper 4 bits of
ports are connected to 4 data pins of LCD and 3 pins are connected to control signal of LCD.
Control signal of LCD includes Enable, Data/ Register select and Enable signals.
Circuit Diagram:
Assembly Code:
ORG 00H
LCD_REG EQU R0
COMNWRT_M EQU R2
;------------------------------------------------------------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------------------------------------------------------
MAIN:
ACALL INITIALIZE_LCD
ACALL DISPLAY_MESSAGE
SJMP $
; ~~~~~~~~~~~~~~~~~~~~~SUBROUTINES~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;-----------------------------------------------------------------------------------------------------------------------------------------
; 5 ms DELAY
;----------------------------------------------------------------------------------------------------------------------------------------
SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
RET
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
DELAY_1:
SETB TR1
CLR TF1
CLR TR1
CLR TF1
RET
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
MOV P1, A
MOV P1, A
ACALL DELAY_5ms
/*Sets 4-bit operation and selects 2-line display and 5x10 dot character font. 4-bit operation starts from
this step and resetting is necessary (Number of display lines and character fonts cannot be changed after
step #3.) */
MOV A, #00100000B
MOV P1, A
MOV A, #11000000B
MOV P1, A
ACALL DELAY_5ms
MOV A, #01H
ACALL COMNWRT
RET
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
MOV COMNWRT_M, A
ANL A, #11110000B
MOV A, COMNWRT_M
SWAP A
ANL A, #11110000B
MOV P1, A
RET
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
MOV 31H, A
ORL A, #00001111B
ANL A, #11110001B
MOV P1, A
MOV A, 31H
SWAP A
ORL A, #00001111B
ANL A, #11110001B
MOV P1, A
ACALL DELAY_1
ACALL DELAY_1
SETB P1.2
NOP
CLR P1.2
RET
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
DISPLAY_MESSAGE:
LOOP_1: CLR A
MOVC A, @A+DPTR
ACALL DATAWRT
INC LCD_REG
INC DPTR
SJMP HERE_1
MOV A, #0C0H
ACALL COMNWRT
SJMP LOOP_1
HERE_1: CLR A
RET
LCD_CONTENT:
END
Practical # 3
In this practical we interface Dallas Semiconductor serial RTC with 8051 board and Time and
date are shown on LCD.
Circuit Diagram:
Assembly Code:
ORG 00H
PM BIT FLAG.2
LCD_REG EQU R0
SAVE EQU R1
COMNWRT_M EQU R2
;------------------------------------------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------------------------------------
MAIN:
ACALL INITIALIZE_LCD
CLR LASTREAD
CLR ACK
ACALL DISPLAY_MESSAGE
; add this code only when u r setting time on rtc, once u set time and date then don't add it.
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
ACALL START_CONDITION
ACALL SEND_BYTE
MOV A, #0H
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL SEND_BYTE
ACALL STOP_CONDITION
ACALL DELAY
;~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
;----------------------------------------------------------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------------------------------------------------------
READ:
CLR LASTREAD
; Reading RTC
ACALL START_CONDITION
ACALL SEND_BYTE
MOV A, #0H
; REGISTER # 1
ACALL SEND_BYTE
ACALL STOP_CONDITION
ACALL DELAY
ACALL START_CONDITION
ACALL SEND_BYTE
ACALL DELAY
MOV RTC, A
MOV RTC+1, A
SETB PM
SJMP GO_ON
AM: CLR, PM
MOV RTC+2, A
ACALL READ_BYTE
MOV RTC+3, A
ACALL READ_BYTE
MOV RTC+4, A
ACALL READ_BYTE
MOV RTC+5, A
SETB LASTREAD
ACALL READ_BYTE
MOV RTC+6, A
ACALL STOP_CONDITION
ACALL DISPLAY_RTC
SJMP READ
START_CONDITION:
SETB SDA
ACALL SCL_HIGH
ACALL DELAY
; PROVIDING DELAY OF T hold time/repeated start= 4.7uSEC (ATLEAST)
RET
STOP_CONDITION:
CLR SDA
ACALL SCL_HIGH
ACALL DELAY
RET
SEND_BYTE:
CLR SCL
LOOP_0:
SETB SDA
SJMP ONE
NOT_ONE:
CLR SDA
ACALL SCL_HIGH
LCALLDELAY
RL A
CLR SCL
ACALL DELAY
SETB SDA
SETB ACK
ACALL SCL_HIGH
ACALL DELAY
CLR ACK
CLEAR:
ACALL DELAY
CLR SCL
ACALL DELAY
RET
;----------------------------------------------------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------------------------------------------------
MOV A, #00H
LCALLDELAY
LCALLDELAY
RET
;---------------------------------------------------------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------------------------------------------------------
SCL_HIGH:
RET
;---------------------------------------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------------------------------------
NOP
NOP
NOP
NOP
RET
;-----------------------------------------------------------------------------------------------------------------------------------------
;-----------------------------------------------------------------------------------------------------------------------------------------
MOV A, #80H+5
ACALL COMNWRT
ACALL DATAWRT
MOV A, BCD+5
ACALL DATAWRT
MOV A, #':'
ACALL DATAWRT
ACALL DATAWRT
MOV A, BCD+3
ACALL DATAWRT
MOV A, #':'
ACALL DATAWRT
ACALL DATAWRT
MOV A, BCD+1
ACALL DATAWRT
MOV A, #0C0H+5
ACALL COMNWRT
MOV A, BCD+8
ACALL DATAWRT
ACALL DATAWRT
MOV A, #'-'
ACALL DATAWRT
MOV A, BCD+10
ACALL DATAWRT
ACALL DATAWRT
MOV A, #'-'
ACALL DATAWRT
MOV A, BCD+12
ACALL DATAWRT
ACALL DATAWRT
MOV A, #080h+14d
ACALL COMNWRT
MOV A, #'P'
ACALL DATAWRT
MOV A, #'M'
ACALL DATAWRT
SJMP ATLAST
ACALL DATAWRT
MOV A, #'M'
ACALL DATAWRT
ATLAST: RET
;------------------------------------------------------------------------------------------------------------------------------------
; THIS SUBROUTINE CONVERTS BCD DATA INTO ASCII (for displaying on LCD)
;------------------------------------------------------------------------------------------------------------------------------------
BCD_ASCII_CONVERTER:
; SECONDS
MOV A, RTC
MOV SAVE, A
SWAP A
ANL A, #0FH
ORL A, #30H
MOV BCD, A
MOV A, SAVE
ANL A, #0FH
ORL A, #30H
MOV BCD+1, A
; MINUTES
MOV A, RTC+1
MOV SAVE, A
SWAP A
ANL A, #0FH
ORL A, #30H
MOV BCD+2, A
MOV A, SAVE
ANL A, #0FH
ORL A, #30H
MOV BCD+3, A
; HOURS
MOV A, RTC+2
MOV SAVE, A
SWAP A
ANL A, #0FH
ORL A, #30H
MOV BCD+4, A
MOV A, SAVE
ANL A, #0FH
ORL A, #30H
MOV BCD+5, A
; DAY OF WEEK
MOV A, RTC+3
MOV SAVE, A
SWAP A
ANL A, #0FH
ORL A, #30H
MOV BCD+6, A
MOV A, SAVE
ANL A, #0FH
ORL A, #30H
MOV BCD+7, A
; DAY OF MONTH
MOV A, RTC+4
MOV SAVE, A
SWAP A
ANL A,#0FH
ORL A,#30H
MOV BCD+8, A
MOV A, SAVE
ANL A, #0FH
ORL A, #30H
MOV BCD+9, A
; MONTH
MOV A, RTC+5
MOV SAVE, A
SWAP A
ANL A, #0FH
ORL A, #30H
MOV BCD+10, A
MOV A, SAVE
ANL A, #0FH
ORL A, #30H
MOV BCD+11, A
; YEAR
MOV A, RTC+6
MOV SAVE, A
SWAP A
ANL A,#0FH
ORL A,#30H
MOV BCD+12, A
MOV A, SAVE
ANL A, #0FH
ORL A, #30H
MOV BCD+13, A
RET
DB "DATE: ",0
;----------------------------------------------------------------------------------------------------------------------------------------
END
Practical # 4
In this practical we interface 0831 serial ADC with microcontroller and display its data on
serial port.
Circuit diagram:
Assembly Code:
ORG 00H
CS BIT P2.2
DO BIT P2.3
COMNWRT_M EQU R2
LCD_REG EQU R0
ADC_DATA EQU R1
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
MAIN:
ACALL INITIALIZE_LCD
ACALL ISPLAY_MESSAGE
H1: CLR CS
NOP
NOP
CLR CLK
INSTITUTE OF INDUSTRIAL ELECTRONICS ENGINEERING – IIEE KARACHI 31
AT89C55/AT89S52
(3RD YEAR) DEVELOPMENT SYSTEM
NOP
NOP
CLR A
NOP
NOP
CLR CLK
NOP
NOP
RLC A
DJNZ R3, H2
SETB CS
ACALL DISPLAY_ADC_VALUE
JMP H1
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
DISPLAY_ADC_VALUE:
;Convert 8 bit adc value into 3 digit BCD result and save it at
;locations 34H,33H,32H
MOV B, #0AH
DIV AB
MOV 32H,B
MOV B, #0AH
DIV AB
MOV 33H, B
MOV B, #0AH
DIV AB
MOV 34H, B
MOV A, #0C0H + 6
ACALL COMNWRT
MOV A, 34H
ORL A, #30H
ACALL DATAWRT
MOV A, 33H
ORL A, #30H
ACALL DATAWRT
MOV A, 32H
ORL A, #30H
ACALL DATAWRT
RET
DB "value: ",0
END
Practical # 5
In this practical we are performing serial communication between 8051 and host pc. The
data of ADC is transferred to PC as well as it is also displayed on LCD.
Circuit Diagram:
In this circuit MAX232 level translator is not shown and directly a virtual terminal is
connected which displays the data out from 8051 UART, notices that same data is also
present on LCD as well.
Assembly Code:
;only desired to output data on serial port then LCD portion can be erased
ORG 00H
CS BIT P2.2
DO BIT P2.3
COMNWRT_M EQU R2
LCD_REG EQU R0
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
MAIN:
ACALL INITIALIZE_LCD
ACALL DISPLAY_MESSAGE
H1: CLR CS
NOP
NOP
CLR CLK
NOP
NOP
CLR A
NOP
NOP
CLR CLK
NOP
NOP
RLC A
DJNZ R3, H2
SETB CS
ACALL DISPLAY_ADC_VALUE
JMP H1
;------------------------------------------------------------------------------------------------------------------------------------------
; MODIFIED
;------------------------------------------------------------------------------------------------------------------------------------------
delay_5ms:
SETB TR0
JNB TF0, $
CLR TF0
CLR TR0
RET
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
DELAY_1:
SETB TR0
CLR TF0
CLR TR0
CLR TF0
RET
;------------------------------------------------------------------------------------------------------------------------------------------
; Although this routine has same name as in the previous practical but it is modified form
;display_adc_value convert 8 bit adc value into 3 digit BCD result and save it at locations
;34H,33H,32H
;------------------------------------------------------------------------------------------------------------------------------------------
MOV B, #0AH
DIV AB
MOV 32H, B
MOV B, #0AH
DIV AB
MOV 33H,B
MOV B, #0AH
DIV AB
MOV 34H, B
MOV A, #0C0H + 6
ACALL COMNWRT
MOV A, 34H
ORL A, #30H
ACALL SERIAL_OUT
ACALL DATAWRT
MOV A, 33H
ORL A, #30H
ACALL SERIAL_OUT
ACALL DATAWRT
MOV A, 32H
ORL A, #30H
ACALL SERIAL_OUT
ACALL DATAWRT
ACALL SERIAL_OUT
ACALL SERIAL_OUT
RET
;------------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------------
SERIAL_OUT:
MOV SBUF, A
JNB TI, $
CLR TI
RET
DB "value: " ,0
END
Practical # 6
INSTITUTE OF INDUSTRIAL ELECTRONICS ENGINEERING – IIEE KARACHI 41
AT89C55/AT89S52
(3RD YEAR) DEVELOPMENT SYSTEM
In this practical we use two external interrupts of AT89S51 microcontroller and also interface
8 Kilo Byte EEPROM on the same I2C (software) bus where RTC was interfaced, so routines
of I2C communication are copied from practical # 3.
Circuit Diagram:
In this practical, on first external interrupt we store the time and date of RTC in EEPROM and
on second interrupt we retrieve stored values of time and date from EEPROM and display
them on LCD.
INSTITUTE OF INDUSTRIAL ELECTRONICS ENGINEERING – IIEE KARACHI 42
AT89C55/AT89S52
(3RD YEAR) DEVELOPMENT SYSTEM
Assembly Code:
PM BIT FLAG.2
LCD_REG EQU R0
SAVE EQU R1
COMNWRT_M EQU R2
ORG 00H
LJMP READ_RTC_AND_STORE_IT_IN_EEPROM
LJMP READ_EEPROM_AND_DISPLAY_IT_ON_LCD
;---------------------------------------------------------------------------------------------------------------------------------------
;---------------------------------------------------------------------------------------------------------------------------------------
ORG 030H
ACALL INITIALIZE_LCD
; INTERRUPTS 0 AND 1
; -------------------------------------------------------------------------------------------------------------------------------------------
; SUBROUTINES
;-------------------------------------------------------------------------------------------------------------------------------------------
;-------------------------------------------------------------------------------------------------------------------------------------
;--------------------------------------------------------------------------------------------------------------------------------------
SEND_BYTE:
CLR SCL
SETB SDA
SJMP ONE
; EEPROM IS 5 ms
ACALL SCL_HIGH
LCALL DELAY
RL A
CLR SCL
ACALL DELAY
SETB SDA
SETB ACK
ACALL SCL_HIGH
ACALL DELAY
CLR ACK
CLR SCL
ACALL DELAY
RET
;-----------------------------------------------------------------------------------------------------------------------------------------
;----------------------------------------------------------------------------------------------------------------------------------------
ACALL DISPLAY_MESSAGE
ACALL BCD_ASCII_CONVERTER
MOV A, #80H+5
ACALL COMNWRT
ACALL DATAWRT
MOV A, BCD+5
ACALL DATAWRT
MOV A, #':'
ACALL DATAWRT
ACALL DATAWRT
MOV A, BCD+3
ACALL DATAWRT
MOV A, #':'
ACALL DATAWRT
ACALL DATAWRT
MOV A, BCD+1
ACALL DATAWRT
MOV A, #0C0H+5
ACALL COMNWRT
MOV A, BCD+8
ACALL DATAWRT
ACALL DATAWRT
MOV A, #'-'
ACALL DATAWRT
MOV A, BCD+10
ACALL DATAWRT
ACALL DATAWRT
MOV A, #'-'
ACALL DATAWRT
MOV A, BCD+12
ACALL DATAWRT
ACALL DATAWRT
MOV A, #080H+14D
ACALL COMNWRT
MOV A, #'P'
ACALL DATAWRT
MOV A, #'M'
ACALL DATAWRT
SJMP ATLAST
ACALL DATAWRT
MOV A, #'M'
ACALL DATAWRT
ATLAST: RET
;------------------------------------------------------------------------------------------------------------------------------------
; THIS SUBROUTINE READ RTC AND STORE THE CONTENT OF RTC IN EEPROM
;------------------------------------------------------------------------------------------------------------------------------------
READ_RTC_AND_STORE_IT_IN_EEPROM:
CLR LASTREAD
CLR ACK
ACALL START_CONDITION
ACALL SEND_BYTE
MOV A, #0H
ACALL SEND_BYTE
ACALL STOP_CONDITION
ACALL DELAY
ACALL START_CONDITION
ACALL SEND_BYTE
ACALL DELAY
MOV RTC, A
MOV RTC+1, A
SETB PM
SJMP GO_ON
AM: CLR PM
MOV RTC+2, A
ACALL READ_BYTE
MOV RTC+3, A
ACALL READ_BYTE
MOV RTC+4, A
ACALL READ_BYTE
MOV RTC+5, A
SETB LASTREAD
ACALL READ_BYTE
MOV RTC+6, A
ACALL STOP_CONDITION
ACALL START_CONDITION
MOV A, #10100000B
ACALL SEND_BYTE
MOV A, #00000000B
ACALL SEND_BYTE
MOV A, #00000000B
ACALL SEND_BYTE
MOV A, RTC
ACALL SEND_BYTE
MOV A, RTC+1
ACALL SEND_BYTE
MOV A, RTC+2
ACALL SEND_BYTE
MOV A, RTC+3
ACALL SEND_BYTE
MOV A, RTC+4
ACALL SEND_BYTE
MOV A, RTC+5
ACALL SEND_BYTE
MOV A, RTC+6
ACALL SEND_BYTE
MOV A, #00H
MOV A, #0FFH
ACALL DELAY
ACALL STOP_CONDITION
ACALL DISPLAY_RTC
RETI
;-------------------------------------------------------------------------------------------------------------------------------------
;------------------------------------------------------------------------------------------------------------------------------------
READ_EEPROM_AND_DISPLAY_IT_ON_LCD:
CLR LASTREAD
ACALL DELAY
ACALL START_CONDITION
MOV A, #10100000B
ACALL SEND_BYTE
MOV A, #00000000B
ACALL SEND_BYTE
MOV A, #00000000B
ACALL SEND_BYTE
ACALL DELAY
ACALL START_CONDITION
MOV A, #10100001B
ACALL SEND_BYTE
ACALL DELAY
ACALL READ_BYTE
MOV RTC, A
ACALL DELAY_5ms
ACALL READ_BYTE
MOV RTC+1, A
ACALL DELAY_5ms
ACALL READ_BYTE
MOV RTC+2, A
ACALL DELAY_5ms
ACALL READ_BYTE
MOV RTC+3, A
ACALL DELAY_5ms
ACALL READ_BYTE
MOV RTC+4, A
ACALL DELAY_5ms
ACALL READ_BYTE
MOV RTC+5, A
ACALL DELAY_5ms
ACALL READ_BYTE
MOV RTC+6, A
SETB LASTREAD
ACALL DELAY_5ms
ACALL READ_BYTE
SETB PM
SJMP GO_ON_i
AM_i: CLR PM
ACALL DISPLAY_RTC
RETI
;------------------------------------------------------------------------------------------------------------------------------------------
DB "EEPROM Interface", 0
DB "DATE: ", 0
END