[8051] Como criar um PWM

Exemplo de como criar um PWM por software.

ORG   0000H                 ;DEFINE ENDERECO INICIAL DO PROGRAMA

;VALORES DE REFERENCIA PARA PWM
VALOR_100   EQU   250                   ;DEFINE VALOR MAXIMO DO PWM
VALOR_75    EQU   187                   ;DEFINE VALOR DE 75%
VALOR_50    EQU   125                   ;DEFINE VALOR DE 50%
VALOR_25    EQU   62                    ;DEFINE VALOR DE 25%
VALOR_0     EQU   0                     ;DEFINE VALOR DE 0%

;POSICOES DOS BITS
POSICAO_1   EQU   50                    ;POSICAO DE ARMAZENAMENTO DO BIT MAIS FRACO
POSICAO_2   EQU   51                    ;POSICAO DE ARMAZENAMENTO DO BIT MEDIO
POSICAO_3   EQU   52                    ;POSICAO DE ARMAZENAMENTO DO BIT MAIS FORTE

MOV   B,#01H                ;DEFINE BIT INICIAL PARA ROTAÇÃO DOS BITS
RODA_INI:
MOV   A,B                   ;MOVE CONTEUDO DE B PARA ACUMULADOR
RR    A                     ;ROTACIONA ACUMULADOR PARA DIREITA
MOV   B,A                   ;GUARDA VALOR DA ROTAÇÃO
CPL   A                     ;INVERTE BITS DO ACUMULADOR
MOV   POSICAO_1,A           ;ARMAZENA POSICAO 1
CPL   A                     ;RETORNA INVERSAO DOS BITS DO ACUMULADOR
RR    A                     ;ROTACIONA ACUMULADOR PARA DIREITA
CPL   A                     ;INVERTE BITS DO ACUMULADOR
MOV   POSICAO_2,A           ;ARMAZENA POSICAO 2
CPL   A                     ;RETORNA INVERSAO DOS BITS DO ACUMULADOR
RR    A                     ;ROTACIONA ACUMULADOR PARA DIREITA
CPL   A                     ;INVERTE BITS DO ACUMULADOR
MOV   POSICAO_3,A           ;ARMAZENA POSICAO 3

MOV  R3,#50                 ;DELAY PARA VISUALIZAÇÃO

RODA:
;POSICAO DO PWM COM LED LUZ MAIS FRACA
MOV   R1,#VALOR_75          ;TEMPO DESLIGADO
MOV   R0,#VALOR_25          ;TEMPO LIGADO

MOV   P2,POSICAO_1           ;LIGA BIT DA POSICAO 1
DJNZ  R0,$                  ;REALIZA CONTAGEM DO TEMPO LIGADO
MOV   P2,#11111111B         ;TUDO DESLIGADO
DJNZ  R1,$                  ;REALIZA CONTAGEM DO TEMPO LIGADO
;POSICAO DO PWM COM LED LUZ MEDIA
MOV   R1,#VALOR_50          ;TEMPO DESLIGADO
MOV   R0,#VALOR_50          ;TEMPO LIGADO

MOV   P2,POSICAO_2          ;LIGA BIT DA POSICAO 2
DJNZ  R0,$                  ;REALIZA CONTAGEM DO TEMPO LIGADO
MOV   P2,#11111111B         ;TUDO DESLIGADO
DJNZ  R1,$                  ;REALIZA CONTAGEM DO TEMPO LIGADO

;POSICAO DO PWM COM LED LUZ MAIS FORTE
MOV   R1,#VALOR_25          ;TEMPO DESLIGADO
MOV   R0,#VALOR_75          ;TEMPO LIGADO

MOV   P2,POSICAO_3          ;LIGA BIT DA POSICAO 3
DJNZ  R0,$                  ;REALIZA CONTAGEM DO TEMPO LIGADO
MOV   P2,#11111111B         ;TUDO DESLIGADO
DJNZ  R1,$                  ;REALIZA CONTAGEM DO TEMPO LIGADO

DJNZ  R3,RODA               ;SE NÃO ZERO VAI PARA RODA

LJMP  RODA_INI              ;Volta Para O Inicio Do Programa

;TEMPO DE 1 SEGUNDO
;R0=08 R1=250 R2=250
T_1S:       MOV   R0,#08H
VOLTA2:     MOV   R1,#0FFH
VOLTA1:     MOV   R2,#0FFH
DJNZ  R2,$
DJNZ  R1,VOLTA1
DJNZ  R0,VOLTA2
RET

END

Nesse exemplo os LEDS estão no P2.


Obrigado e até o próximo post.

DATEK Tecnologia Eletrônica
[8051] Como criar um PWM
Tags:             

Deixe uma resposta

%d blogueiros gostam disto: