PWM en 8051 con contador PCA

1

Leí en la documentación de AT89C51RC2, que puedo crear uno de los 5 puertos para generar la señal PWM si configuro correctamente algunos registros. Algunas cosas que no entiendo. No sé qué es el contador de PCA y cómo se comporta. Hay lo que se me ocurrió de acuerdo con la documentación.

CEX0 equ P1.3                   
CCAPM0 equ 0DAh                 
CCAP0L equ 0EAh                 
CCAP0H equ 0FAh
CL equ 0E9h
CCON equ 0D8h


DSEG at 30h   

CSEG                

    ORG 0000h               
    AJMP START

START:  
    MOV CCAPM0,#10000010B
    MOV CCAP0H,#0FFh
    MOV CCAP0L,#0FFh
    ORL CCON,#01000000B

MAIN:  

    MOV R6,#0FFh        
    DJNZ R6,$   

    MOV A,01000000B
    XRL A,CCON
    JNZ null 

 LJMP MAIN          

 null:
    MOV CL,#0
    MOV CCON,#01000000B
    LJMP MAIN 

END       

No sé en qué dirección cuenta el contador de CPA, si es necesario para restablecerlo, no sé si olvidé establecer algunos registros. Este código no funciona. Parece que el contador ni siquiera cuenta.

¿Alguna sugerencia?

    
pregunta user50222

1 respuesta

1

Se necesita otro registro para establecer.

CMOD equ 0D9h

Necesito configurar el modo del contador de PCA y habilitar la interrupción de desbordamiento del contador. Así que el código va

CEX0 equ P1.3                   
CCAPM0 equ 0DAh                 
CCAP0L equ 0EAh                 
CCAP0H equ 0FAh
CL equ 0E9h
CCON equ 0D8h
CMOD equ 0D9h


DSEG at 30h                     

CSEG                

    ORG 0000h               
    AJMP START


START:  
    MOV SP,#70H             
    SETB EA                 ; global interrupt enable
    MOV CCAPM0,#10000010B    
    MOV CCAP0H,#0FFh     
    MOV CCAP0L,#0FFh        
    ORL CCON,#01000000B
    ANL CMOD,#11111001B     ; PCA counter mode 0
    ORL CMOD,#00000001B     ; PCA counter interrupt enable

MAIN:  

MOV

    R6,#0FFh        ;delay, because I use serial to change duty cycle, 
    DJNZ R6,$       ;so it had time to change


    MOV A,01000000B
    XRL A,CCON
    JNZ null 

 LJMP MAIN               

 null:
    MOV CL,#0
    MOV CCON,#01000000B
    LJMP MAIN 

END                     

Puedo ver que funciona con un voltímetro o un LED conectado al puerto P1.3.

    
respondido por el user50222

Lea otras preguntas en las etiquetas