Timers programming in Assembly level language for 8051 Microcontroller
Write ALP to generate square wave of 50% duty cycle on P2.3. Use Timer0 to generate time delay. Mode 1
Assembly Code:
ORG 0000H
MOV TMOD,#01H
HERE: MOV TL0,#0F2H
MOV TH0,#0FFH
CPL P2.3
ACALL DELAY
SJMP HERE
DELAY: SETB TR0
AGAIN: JNB TF0,AGAIN
CLR TR0
CLR TF0
RET
END
Write ALP to generate square wave of 50% duty cycle on P2.3. Use Timer0 to generate time delay. Mode 2
Assembly Code:
ORG 0000H
MOV TMOD,#02H // Timer 0, Mode 2
MOV TL0,#0F0H
MOV TH0,#0FH
HERE: CPL P2.3
ACALL DELAY
SJMP HERE
DELAY: SETB TR0
AGAIN: JNB TF0,AGAIN
CLR TF0
RET
END
Write ALP to generate square wave of 2kHz frequency on pin P1.1 (Crystal frequency= 11.0592MHz)
Assembly Code:
ORG 0000H
MOV TMOD,#01H
HERE: MOV TL0,#1AH
MOV TH0,#0FFH
CPL P1.1
ACALL DELAY
SJMP HERE
DELAY: SETB TR0
AGAIN: JNB TF0,AGAIN
CLR TR0
CLR TF0
RET
END
Write ALP for Counter 1 in mode 2 to count pulses fed into pin T1.
Assembly Code:
ORG 0000H
MOV TMOD,#01100000B //Counter 1, Mode 2
//Count External Pulses
MOV TH1, #00H //Clear TH1
SETB P3.5 //Make T1 pin Input
AGAIN: SETB TR1 //Start the counter
BACK: MOV A,TL1 //Get copy of Count TL1
MOV R7, A //Store value of count in R7
JNB TF1, BACK //Keep Counting until counter overflow
CLR TR1 //Stop Counter 1
CLR TF1 //Make TF=0
SJMP AGAIN //Keep Doing It
END