micro assgn

8
7/30/2019 Micro Assgn http://slidepdf.com/reader/full/micro-assgn 1/8  ASSIGNMENT MICROCONTROLLER AND APPLICATIONS  SUBMITTED BY: N.KOUNDINYA (10BEC0265) J.SRAVANKUMAR (10BEC0254) T.PRABATH (10BEC0401) SLOT D1 ECE304

Upload: kamana-sai-sarath-reddy

Post on 14-Apr-2018

219 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 1/8

 

ASSIGNMENT

MICROCONTROLLER

AND

APPLICATIONS 

SUBMITTED BY:

N.KOUNDINYA (10BEC0265)

J.SRAVANKUMAR (10BEC0254)

T.PRABATH (10BEC0401)

SLOT D1

ECE304

Page 2: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 2/8

AIM:

A very simple Frequency counter project. This project is powered with small P89V51RD2 microcontroller

with LCD and the frequency count is displayed on to the LCD

WORKING PRINCIPLE:

As we all know frequency of a signal is number of cycle per second. I made use of this logic to calculate

frequency of the input signal.

8051 has two timers, Timer 0 is configured for 1 second delay to sample the input signal and Timer 1 is

used as a counter to calculate number of cycles in that 1 second. If timer1 overflows then the overflow is

counter in another register which is considered as the high byte of Frequency. Input signal is provided at

P3.5/T1 which is input for Timer 1 in counter mode. LCD is connected to microcontroller port 1 in 4-bit

mode. Currently program is using 2 Line LCD but it can be used for 1 line LCD too.

Program initializes the Timer0 in 16-bit mode with 50mS delay value, a tick value of 20 is loaded to have

total delay of 1s (50 x 20 = 1000 mS). Timer 1 is configured in 16-bit counter mode. After a sample of 1

sec, we get the number of cycles hence the frequency of input signal from timer1 registers (TH1:TL1)

and high byte of Frequency. So total 3 byte value is then converted to a decimal equivalent representedin hex. This decimal value is then updated to LCD. The whole process repeats again

HARDWARE CONNECTION DIAGRAM:

Page 3: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 3/8

CODE:

;D4 - P1.0; D5 - P1.1 ;D6 - P1.2;D7 - P1.3;EN - P1.7;RW - P1.6;RS - P1.5

lcd_port equ P1 ;LCD connected to Port3

en equ P1.7 ;Enable connected to P1.7

var1 equ r2temp equ r3

temp1 equ r4

delay equ r5

tick equ r6

Freq equ r7

XX0 equ 30H ;4Byte hex 2 Dec conv variables

XX1 equ 31H

XX2 equ 32H

XX3 equ 33H

YY0 equ 34H

YY1 equ 35H

YY2 equ 36H

YY3 equ 37H

YY4 equ 38H

ZZ0 equ 39H

ZZ1 equ 3AH

ZZ2 equ 3BH

ZZ3 equ 3CH

ZZ4 equ 3DH

BITS equ 3EH

UpdateLCD equ 0Horg 0000H

sjmp main

org 000BH ;TMR0 ISR

ajmp TMR0_ISR

org 001BH ;TMR1 ISR

ajmp TMR1_ISR

main:

mov SP,#50H

mov tick,#20

mov tmod,#51Hmov Freq,#00

mov IE,#10001010B

clr UpdateLCD

acall lcd_init

mov a,#'F'

acall lcd_dat

mov a,#'r'

Page 4: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 4/8

acall lcd_dat

mov a,#'e'

acall lcd_dat

mov a,#'q'

acall lcd_dat

mov a,#':'

acall lcd_dat

mov a,#' '

acall lcd_dat

again:

mov a,#86H

acall lcd_cmd

mov TH0, #3CH

mov TL0, #0BAH

mov tick, #20

mov Freq, #0

mov TH1, #0

mov TL1, #0setb TR0

setb TR1

 jnb UpdateLCD,$

clr UpdateLCD

mov XX2,Freq

mov XX1,TH1

mov XX0,TL1

acall X2D

mov a,ZZ3

acall disp_nummov a,ZZ2

acall disp_num

mov a,ZZ1

acall disp_num

mov a,ZZ0

acall disp_num

mov a,#'H'

acall lcd_dat

mov a,#'z'

acall lcd_dat

sjmp again

TMR0_ISR:

djnz tick, TMR0_ISR_GO

clr TR1

clr TF1

clr TR0

clr TF0

Page 5: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 5/8

setb UpdateLCD

reti

TMR0_ISR_GO:

mov TH0, #3CH

mov TL0, #0BAH

reti

TMR1_ISR:

inc Freq

reti

disp_num:

mov DPTR,#hex_table

mov temp1,a

anl a,#0F0H

swap a

movc a,@a+DPTR

acall lcd_dat

mov a,temp1

anl a,#0FH

movc a,@a+dptr

acall lcd_dat

ret

lcd_reset: ;LCD reset sequence

mov lcd_port, #0FFH

mov delay,#20 ;20mS delay

acall delaymsmov lcd_port, #83H ;Data = 30H, EN = 1, First Init

mov lcd_port, #03H ;Data = 30H, EN = 0

mov delay,#15 ;Delay 15mS

acall delayms

mov lcd_port, #83H ;Second Init, Data = 30H, EN = 1

mov lcd_port, #03H ;Data = 30H, EN = 0

mov delay,#5 ;Delay 5mS

acall delayms

mov lcd_port, #83H ;Third Init

mov lcd_port, #03H

mov delay,#5 ;Delay 5mS

acall delayms

mov lcd_port, #82H ;Select Data width (20H for 4bit)

mov lcd_port, #02H ;Data = 20H, EN = 0

mov delay,#5 ;Delay 5mS

acall delayms

ret

lcd_init:

Page 6: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 6/8

acall lcd_reset ;Call LCD Reset sequence

mov a,#28H ;4-bit, 2 line, 5x7 dots

acall lcd_cmd ;Call LCD command

mov a,#0CH ;Display ON cursor OFF

acall lcd_cmd ;Call LCD command

mov a,#06H ;Set entry mode (Auto increment)

acall lcd_cmd ;Call LCD command

mov a,#80H ;Bring cursor to line 1

acall lcd_cmd ;Call LCD command

ret

lcd_wait:

mov a,#0CFH

mov temp,00H

mov lcd_port, a

mov temp, lcd_port

clr en

setb en

mov lcd_port, a

clr en

mov a,temp

 jb acc.3, lcd_wait

ret

lcd_cmd: ;LCD command Routine

mov temp,a ;Save a copy of command to tempswap a ;Swap to use higher nibble

anl a,#0FH ;Mask the first four bits

add a,#80H ;Enable = 1, RS = 0, RW = 0

mov lcd_port,a ;Move it to lcd port

anl a,#0FH ;Enable = 0, RS = 0, RW = 0

mov lcd_port,a ;Move to lcd port

mov a,temp ;Reload the command from temp

anl a,#0FH ;Mask first four bits

add a,#80H ;Enable = 1

mov lcd_port,a ;Move to port

anl a,#0FH ;Enable = 0

mov lcd_port,a ;Move to lcd port

acall lcd_wait

ret

lcd_dat: ;LCD data Routine

mov temp,a ;Keep copy of data in temp

Page 7: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 7/8

swap a ;We need higher nibble

anl a,#0FH ;Mask first four bits

add a,#0A0H ;Enable = 1, RS = 1, RW = 0

mov lcd_port,a ;Move to lcd port

nop

clr en ;Enable = 0

mov a,temp ;Reload the data from temp

anl a,#0FH ;we need lower nibble now

add a,#0A0H ;Enable = 1, RS = 1, RW = 0

mov lcd_port,a ;Move to lcd port

nop

clr en ;Enable = 0

acall lcd_wait

ret

delayms:mov var1,#230

d:

nop

nop

djnz var1,d

djnz delay,delayms

ret

X2D: CALL CLEARYZ ;Clear All YY and ZZ bytes

MOV YY0,#1 ;DECIMAL ADDER = 1

MOV R0,#XX3 ;LOCATE HOW MANY BYTES WITH DATAMOV B,#4 ;POSSIBLE 8 BYTES W/DATA ON XX

BITS1: MOV A,@R0 ;GET BYTE FROM INPUT REGISTER

CJNE A,#0,BITS2 ;JUMP IF FOUND THE FIRST NON ZERO

DEC R0 ;GO TO LOWER BYTE

DJNZ B,BITS1 ;ONE BYTE DONE, GO AGAIN

BITS2: MOV A,#8 ;8 BITS PER BYTE, B CONTAINS BYTE #

MUL AB ;A = QUANTITY OF BITS W/DATA

MOV BITS,A ;SAVE

CJNE A,#0,X2DMAIN2 ;B = NUMBER OF DIGITS W/DATA

RET ;RETURN IF ONLY ZEROS AT XX

X2DMAIN1: CALL X2DSHIFTD ;SHIFT DECIMAL RESULT

X2DMAIN2: CALL X2DSHIFTH ;SHIFT HEXA

JNC X2DMAIN3 ;IF NOT CARRY, JUST SKIP IT

CALL X2DADD ;ADD NEW RESULT

X2DMAIN3: DJNZ BITS,X2DMAIN1 ;ONE BIT DONE, GO AGAIN

RET ;GENERAL EXIT FROM THIS ROUTINE

;ZZ0 - ZZ7 CONTAINS DECIMAL RESULT

Page 8: Micro Assgn

7/30/2019 Micro Assgn

http://slidepdf.com/reader/full/micro-assgn 8/8

 

X2DSHIFTD: MOV R0,#YY0 ;YY * 2 (DECIMAL)

MOV B,#4 ;NUMBER OF BYTES

CLR C ;NEED CARRY ZERO

X2DSHIFTD1: MOV A,@R0 ;IGNORE LAST CARRY

ADDC A,@R0 ;ADD BYTE TO ITSELF

DA A ;DECIMAL ADJUST

MOV @R0,A ;PUT IT BACK

INC R0 ;GO TO UPPER BYTE

DJNZ B,X2DSHIFTD1 ;DO IT 8 BYTES

RET ;RETURN

X2DSHIFTH: MOV R0,#XX3 ;SHIFT XX7 --> XX0 RIGHT 1 BIT

MOV B,#4 ;NUMBER OF BYTES

SHIFTR0B: CLR C ;NEED CARRY ZERO

SHIFTR0B1: MOV A,@R0 ;GET BYTE

RRC A ;ROTATE RIGHT THROUGH CARRY BIT

MOV @R0,A ;SAVE IT BACK

DEC R0 ;GO TO LOWER BYTEDJNZ B,SHIFTR0B1 ;DO IT AGAIN "B" TIMES

RET ;RETURN

X2DADD: MOV R0,#ZZ0 ; GET RESULT ZZ 8 BYTES REGISTER

MOV B,#4 ; 8 BYTES

MOV R1,#YY0 ; GET YY OPERATOR

CLR C ; NEED CARRY OFF

X2DADD1: MOV A,@R0 ; ZZ = ZZ + YY (8BYTES) W/DAA

ADDC A,@R1 ; ADD BYTE TO BYTE 8 TIMES

DA A ; DECIMAL ADJUST

MOV @R0,A ; PUT IT BACKINC R0 ; BUMP POINTER NEXT BYTE

INC R1 ; BUMP POINTER NEXT BYTE

DJNZ B,X2DADD1 ; ONE BYTE DONE, GO AGAIN

MOV A,ZZ3 ; LAST CARRY TO 9TH BYTE OF ZZ

ADDC A,#0 ; JUST CARRY TO ZZ8

MOV ZZ3,A ;

RET ; RETURN

CLEARYZ:

mov r1,#9

clr A

mov r0,#YY0

CLEARYZ_1:

mov @r0,A

inc r0

djnz r1, CLEARYZ_1

ret

hex_table:

db '0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'

end