Micro Assgn
-
Upload
kamana-sai-sarath-reddy -
Category
Documents
-
view
219 -
download
0
Transcript of 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
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:
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'
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
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:
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
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
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