Hoy en la tarde-noche subo uno que funciona ok con un GP32...
Código pwm para el Gp32...
Tiene una interrupción....
Asumí que sabes cómo se activan es Asm.
El código está hecho en Codewarrior...
;**************************************************************
;* *
;* PWM para el micro Gp32 *
;* *
;**************************************************************
; export symbols
XDEF Entry, main,INTER_TCH1
; include derivative specific macros
Include 'gp32_registers.inc'
; variable/data section
MY_ZEROPAGE: SECTION SHORT
; Insert here your data definition. For demonstration, temp_byte is used.
temp_byte ds.b 1
; code section
MyCode: SECTION
main:
Entry:
RSP ;Reset al Stack Pointer
BSR Config_Uc ;Salto a subrutina de configuración del micro
BSR Config_PWM ;Salto a subrutina de PWM
BSR Config_TIM ;Salto a subrutina de configuración del modulo TIM
ciclo: WAIT
JMP ciclo;
Config_Uc: CLI ;Activación de interrupciones globales.
CLRA ;Limpia el registro A
CLRX ;Limpia el registro X
CLRH ;Limpia el registro H
MOV #09H, CONFIG1 ;Deshabilita Cop,Stop,Habilita LVI,5V
MOV #00H, CONFIG2 ;
RTS
Config_PWM: BSET 5,T1SC ;PARAR EL CONTADOR.
BSET 4,T1SC ;RESET AL TIMER.
BCLR 2,T1SC ;PREESCALER DE 1.
BCLR 1,T1SC ;PREESCALER DE 1.
BCLR 0,T1SC ;PREESCALER DE 1.
MOV #00CH,T1MODH ;VALORES PARA
MOV #80H,T1MODL ;PERIODO DE 1mS PWM.
MOV #09H,T1CH1H ;11.7mS PARA ENCENDIDO
MOV #0FFH,T1CH1L ;DE LED EN 3S.
BCLR 5,T1SC0 ;UNBUFFERED MS0B.
BSET 4,T1SC0 ;UNBUFFERED MS0A.
BSET 1,T1SC0 ;TOGGLE OUTPUT
BSET 3,T1SC0 ;CLEAR OUTPUT
BCLR 2,T1SC0 ;ON COMPARE.
RTS
Config_TIM: BCLR 5,T1SC1 ;UNBUFFERED MS0B.
BSET 4,T1SC1 ;UNBUFFERED MS0A.
BSET 1,T1SC1 ;TOGGLE OUTPUT
BSET 3,T1SC1 ;CLEAR OUTPUT
BCLR 2,T1SC1 ;ON COMPARE.
BSET 6,T1SC1 ;HABILITO INTERRUPCION T1CH1
MOV #00H,T1CH0L
MOV #00H,T1CH0H
BCLR 5,T1SC ;ACTIVO EL CONTADOR
RTS
INTER_TCH1: INC T1CH0L
LDA #0FFH
CMP T1CH0L
BEQ INI1
BCLR 7,T1SC1
RTI
INI1: INC T1CH0H
LDA #0F0H
CMP T1CH0H
BGE INI2
BCLR 7,T1SC1
RTI
INI2: BSET 5,T1SC
BCLR 7,T1SC1
RTI