PIC18F452 içindeki üreteci kullanmadan kare dalga oluşturmak.

Forastero

Üye
Katılım
10 May 2007
Mesajlar
34
Puanları
1
Yaş
39
PIC18F452 içindeki PWM ÜRetECİ KULLANMADAN KARE DALGA OLUŞTURMAK

oluşturmak istyorum elimde bir kaç kod var
sürekli biçimde PORTD 0 da oluşturulmak isteniyor

yardımcı olabilirmisiniz

Asembly programını kullanıyoruz yapamadım windows yedide test programları çalışırken hata veriyor


*****

list P=PIC18F452, F=INHX32, C=160, N=0, ST=OFF, MM=OFF, R=DEC, X=ON
#include P18F452.inc

__CONFIG _CONFIG1H, _HS_OSC_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_42_2L
__CONFIG _CONFIG2H, _WDT_OFF_2H
__CONFIG _CONFIG3H, _CCP2MX_ON_3H
__CONFIG _CONFIG4L, _LVP_OFF_4L

cblock 0x030
counter



endc

goto init
org 0x300
goto Timerkesmesi
org 0x308

init

movlw B'11000111'
movwf T0CON
bsf INTCON,TMR0IE
bsf INTCON,GIE

bcf TRISD,0
clrf TRISD
goto main
main

incf counter,f
movlw D'3'
cpfsgt counter
goto countersmaller
goto counterbigger

countersmaller
bcf PORTD,0
goto main

counterbigger
bsf PORTD,0
clrf counter
goto main

Timerkesmesi

bcf INTCON,TMR0IF
btg PORTD,0
clrwdt
retfie
end

böyle bir program iş görür mü

_____________________________

list P=PIC18F452, F=INHX32, C=160, N=0, ST=OFF, MM=OFF, R=DEC, X=ON
#include P18F452.inc
__CONFIG _CONFIG1H, _HS_OSC_1H ;HS oscillator
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_42_2L ;Reset
__CONFIG _CONFIG2H, _WDT_OFF_2H ;Watchdog timer disabled
__CONFIG _CONFIG3H, _CCP2MX_ON_3H ;CCP2 to RC1 (rather than to RB3)
__CONFIG _CONFIG4L, _LVP_OFF_4L ;RB5 enabled for I/O
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
cblock 0x000
endc
;;;;;;; Mainline program;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
org 0x0300
bcf TRISD,0
bcf PORTD,0
bcf T0CON,7 ;saat kapalı
bcf T0CON,6 ;16 bitlik saat
bcf T0CON,5 ;kristalden clok al
bcf T0CON,4 ;kenar belirle
bcf T0CON,3 ;yavaşlatıcıyı aç
bsf T0CON,2 ;
bsf T0CON,1 ; 1/256 lık yavaşlat
bsf T0CON,0 ;
bsf T0CON,7 ;saat açık
Dongu: bsf PORTD,0
movff 0xFF,TMR0H
movff 0xD9,TMR0L
bcf INTCON,2
bsf T0CON,7
WT: btfss INTCON,2
bra WT
bcf PORTD,0
movff 0xFF,TMR0H
movff 0x8B,TMR0L
bcf INTCON,2
bsf T0CON,7
BKL: btfss INTCON,2
bra BKL
bra Dongu
end


ya da böyle bir program işimi görür mü test edemiyorum hiç birini yardımlarınızı bekliyorum
 
Win7 32 bit te hepside sorunsuz çalışır ...
 
ACCESS ve BANKED ları da koysanız iyi olurdu.. Derleyici varsayılan olarak BANKED kullanıyor olabilir.. Sorun çıkarabilir..

Aslında yapmak istediğiniz önemli,, pic in hiç işlem yapmadan sadece sabit bir frekans üretmesini sağlamak ise o zaman altta yazdığınıza benzer bir program yapın.. Yok eğer o esnada işlemciye başka işler yaptıracaksanız kesme kullanmanız gerekir.. Kesmeyi iyi programladığınız taktirde saykıllık kayma dahi olmaz.. Ama program döngüsünde iş biraz değişebilir..

Pic işlem yapmayacaksa main fonksiyonunun oralara böyle bir kod yazabilirsiniz.. 20Mhz için düşünürsek..
BASA_DON
MOVLW d'100' ;100 = 10milisaniye
MOVWF SAYAC, BANKED
RCALL BEKLE_100uS
DECFSZ SAYAC, F, BANKED
BRA $-2*h'02' ;2 satır öncesine gider,, rcall'a..

BCF PORTD, 0, ACCESS

MOVLW d'200' ;200 = 20milisaniye
MOVWF SAYAC, BANKED
RCALL BEKLE_100uS
DECFSZ SAYAC, F, BANKED
BRA $-2*h'02' ;2 satır öncesine gider,, rcall'a..

MOVLW d'100' ;100 = 10milisaniye
MOVWF SAYAC, BANKED
RCALL BEKLE_100uS
DECFSZ SAYAC, F, BANKED
BRA $-2*h'02' ;2 satır öncesine gider,, rcall'a..

BSF PORTD, 0, ACCESS

BRA BASA_DON

BEKLE_100uS
MOVLW h'7B'
NOP
DECFSZ WREG, F, ACCESS
BRA $-2*h'02' ;2 satır öncesine gider,, nop 'a..

Yine de birkaç saykıllık fazlalık var bu kodda.. Alt fonksiyonlar ile üst fonksiyonlar bir bütün olarak düşünmelisin.. Bu tip bekleme yaparak giriş çıkış yaparsan..

Bu arada 18Flerde kesme adresi 0x000008'dir.. Düşük değerli kesmeler aktifse onlar içinse 0x000018'dir.. org 0x300 yanlış yani.. Ayrıca üst programda kesmeler ana döngü ile kesme karmançorman bişeyler yapmışlar.. Baştan bi elden geçirmeniz gerekiyor..
 

Forum istatistikleri

Konular
128,198
Mesajlar
915,766
Kullanıcılar
449,979
Son üye
schule48

Yeni konular

Geri
Üst