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

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
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

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site