Task 1 A switch is connected to pin P12 Write an 8051 C prog
Task 1: A switch is connected to pin P1.2. Write an 8051 C program to monitor SW and create the following frequencies on pin P1.7: SW=0: 500Hz SW=1: 750Hz, use Timer 0, mode 1 for both of them.
Solution
I will use a crystal of 12Mhz
Here is the code, i added how i do the code in the comentaries follow the flow of the code start-->configuraion-->begin(infinte loop)
CODE:
CSEG AT 0000H ;CODE START
LJMP CONFIGURATION ;JUMP TO CONFIGURATION
;-----INTERRUPTION-BEGIN----
ORG 000BH ;INTERRUPTION OF TIMER0
LJMP TIMER0
;-----INTERRUPTION-END-------
BEGIN: ;BEGINING OF THE INFINITE LOOP
JB P1.2,TWO ;IF P1.2 IS SET JUMP TO TWO TO DO THE 750HZ SIGNAL
MOV TH0,#0FCH ;CONFIGUTARION TO GET 1ms
MOV TL0,#018H
SETB TR0 ;TIMER0 ON
SETB P1.7 ;SET P1.7
WAIT1:
JNB TF0,WAIT1 ; IF THE FLAG OF OWERFLOW DOESN\'\'T SET IT WAITS, HERE IT WAITS THE MIDDEL OF THE PERIOD
CLR TR0 ;TIMER0 STOP
MOV TH0,#0FCH ;CONFIGUTARION TO GET 1ms
MOV TL0,#018H
SETB TR0 ;TIMER0 ON
CLR P1.7 ;CLEAR P1.7
WAIT2:
JNB TF0,WAIT2 ; IF THE FLAG OF OWERFLOW DOESN\'\'T SET IT WAITS, HERE IT WAITS THE MIDDEL OF THE PERIOD
JNB P1.2,BEGIN ;IF P1.2 IS ZERO JUMP TO NEGIN TO DO THE 500hz SIGNAL
TWO:
MOV TH0,#0FDH ;CONFIGUTARION TO GET 0.66ms
MOV TL0,#066H
SETB TR0 ;TIMER0 ON
SETB P1.7 ;SET P1.7
WAIT3:
JNB TF0,WAIT3 ; IF THE FLAG OF OWERFLOW DOESN\'\'T SET IT WAITS, HERE IT WAITS THE MIDDEL OF THE PERIOD
CLR TR0 ;TIMER0 STOP
MOV TH0,#0FDH ;CONFIGUTARION TO GET 0.66ms
MOV TL0,#066H
SETB TR0 ;TIMER0 ON
CLR P1.7 ;CLEAR P1.7
WAIT4:
JNB TF0,WAIT4 ; IF THE FLAG OF OWERFLOW DOESN\'\'T SET IT WAITS, HERE IT WAITS THE MIDDEL OF THE PERIOD
LJMP BEGIN ; ENDING OF THE INFINITE LOOP
CONFIGURATION: ;CONFIGURATION BEGIN
;-----INTERRUPTION-BEGIN-----
SETB EA ;ENABLE GLOBAL INTERRUPTION
SETB ET0 ;ENABLE OF INTERRUPTION OF TIMER0
;-----INTERRUPTION-END-------
;-----CONFG-TIMERS-BEGIN-------
MOV TMOD,#00000001B ;CONFIGURATION OF THE TMOD REGISTER TMOD TO MAKE TIMER0 WORKING AS 8 BIT
;--CALCULETING-THE-THX-TLX-OF THE TIMER-BEGIN---
;(1/12)(FRECUENCY OF THE CRYSTAL)=A ;A IS EQUALS TO THE FRECUENCY TO MAKE ONE INSTRUCTION
;B=(1/A) ;B IS EQUALS TO THE TIME TO MAKE ONE INSTRUCTION
;C=(TIME I WANT)/B
;THXTLX=( 2^8 -C ) ;TRANSFORM THE SUBSTRACTION TO HEXADECIMAL
;-----CALCULO-THX-TLX-FIN----
;FOR 750HZ 375MHZ UP 375HZ DOWN
;705HZ=1,3333333ms
;UPTIME 0.6666ms DOWNTIME 0.6666ms
;TH0=FD TL0=66
;FOR 500MHZ 250MHZ UP 250MHZ DOWN
;500HZ=2ms
;UPTIME 1ms DOWNTIME 1ms
;FOR ONE ms WE GET
;TH0=FC TL0=18
;-----CONFG-TIMERS-FIN----------
LJMP BEGIN ;GO TO THE INFINITE LOOP AFTER THE CONFIGURATION
RET
;---INTERRUPCTION-SUBRUTINE---
TIMER0:
CLR TF0 ;CLEAR THE OVERFLOW FLAG OF TIMER0
RETI
END ;END OF THE CODE

