Email: Password: Remember Me | Create Account (Free)

Back to Subject List

Old thread has been locked -- no new posts accepted in this thread
???
05/09/07 16:49
Read: times


 
#138912 - project
Hello !
At first I would like say that I am a beginner on this field .
I would like to program a microcontroller of Silabs and i use the C8051FX20-TB.
First I would like to program a PWM with output signal 40kHz.
That is in fact that, what should function first befor it further goes. Sorry for my bad Englisch.
The second part is a programm to be used for the calculation of the phase difference.
Somebody already had experiences with that and could help me.
Thanks for the efforts

For the first part I had considered following:

CPU 8051
INCLUDE stddef51

PWM_OFFVALUE EQU 10
PWM_ONVALUE EQU 11
PWM_COUNT EQU 12
PWM_OUT EQU P3.0

SEGMENT code
ORG 0h
jmp start

; Interruptbehandlungsroutine Timer 0
; Jeder Durchlauf braucht 9 Zyklen
ORG 0Bh
djnz PWM_COUNT, pwm_exit
jb PWM_OUT, pwm_on
pwm_off:
mov PWM_COUNT, PWM_ONVALUE
setb PWM_OUT
reti
pwm_on:
mov PWM_COUNT, PWM_OFFVALUE
clr PWM_OUT
pwm_exit:
reti

; Initialisierung
start:
mov TL0, #235
mov TH0, #235
mov SP, #20h
mov TMOD,#2
mov TCON,#16
mov IE, #130

; Hauptprogramm
main:
; quick 'n dirty Parameter als Test von P1 holen
mov a,P1
subb a,#20
mov PWM_ONVALUE, a
subb a,#255
mov PWM_OFFVALUE, a
jmp main
END

---------------------------------------------------------------

If I enter the code so nothing with my microcontroller passes. must I initialize still anything?
Or is something wrong?

Thats the first Question i have!!



For the second part I read through the PCA Cookbook and I wanted to attempt following:


; Befehl wo Daten gespeichert werden sollen im RAM
CAPTURE_0 DATA 30H
CAPTURE_1 DATA 32H
PHASE DATA 34H
FLAG_0 BIT 20H.0
FLAG_1 BIT 20H.1
;

ORG 0000H
JMP PCA_INIT
ORG 0033H
JMP PCA_INTERRUPT

;
PCA_INIT: ; PCA Timer initialisieren

MOV CMOD, #00H
MOV CH, #00H
MOV CL, #00H
; in Listing 1. Initialize two PCA modules as follows
;
MOV CCAPM0, #21H
MOV CCAPM1, #21H
;
SETB EC ;Einschalten PCA interrupt
SETB EA
SETB CR ;PCA Timer einschalten ( Zähler Bit)
CLR FLAG ;Reset Test Flag

;**************************************************************************************
; Hauptprogramm
;**************************************************************************************
; Im Hauptprogramm werden nur Modul 0 und Modul 1 verwendet.

PCA_INTERRUPT:
JB CCF0, MODULE_0
JB CCF1, MODULE_1
;

MODULE_0:
CLR CCF0
MOV CAPTURE_0, CCAP0L
MOV CAPTURE_0+1, CCAP0H
JB FLAG_1, CALCULATE_PHASE
SETB FLAG_0
RETI
MODUL_1:
CLR CCF_1
MOV CAPTURE_1, CCAP1L
MOV CAPTURE_1+1, CCAP1H
JB FLAG_0, CALCULATE_PHASE

SETB FLAG_1
RETI





;
CALCULATE_PHASE:
PUSH ACC
PUSH PSW

CLR C
;
JB FLAG_0, MOD0_LEADING
JB FLAG_1, MOD1_LEADING
;
MOD0_LEADING:
MOV A, CAPTURE_1
SUBB A, CAPTURE_0
MOV PHASE, A
MOV A, CAPTURE _1+1
SUBB A, CAPTURE_0+1
MOV PHASE+1, A
CLR FLAG_0
JMP EXIT
;
MOD1_LEADING:
MOV A, CAPTURE_0
SUBB A, CAPTURE_1
MOV PHASE, A
MOV A, CAPTURE_0+1
SUBB A, CAPTURE_1+1
MOV PHASE+1, A
CLR FLAG_1
EXIT:
POP PSW
POP ACC
RETI




List of 13 messages in thread
TopicAuthorDate
project            01/01/70 00:00      
   OK, first \'lesson\'            01/01/70 00:00      
   good practice            01/01/70 00:00      
      correct, but let me add            01/01/70 00:00      
   Code formatted            01/01/70 00:00      
      but still not commented            01/01/70 00:00      
      But you didn't tell him how!            01/01/70 00:00      
   Question?            01/01/70 00:00      
   I guess you are using a C8051F020            01/01/70 00:00      
      Or is it the C8051F120?            01/01/70 00:00      
         link            01/01/70 00:00      
            look here            01/01/70 00:00      
            Does not fit            01/01/70 00:00      

Back to Subject List