Pic C'de süre için ince ayar

ibora

Usta Üye
Katılım
14 Eyl 2008
Mesajlar
1,203
Puanları
156
Yaş
56
Arkadaşlar merhaba,
12F629 ile 36KHz kare dalga elde etmek istiyorum. Bunun için bir çıkışı 13.88uSn aralıklarla on-off yapmalıyım. Kristal frekansım 20MHz. Aşağıdaki programda gecikmeyi nasıl 13.88uSn'ye ayarlayacağımı anlatabilirmisiniz. Assembler ile yazsam NOP komutu eklemem gerektiğini biliyorum ama bunu Micro C'de nasıl yapacağımı bilmiyorum.

#include <12F629.h>
#FUSES NOWDT //No Watch Dog Timer
#FUSES HS //High speed Osc (> 4mhz for PCM/PCH) (>10mhz for PCD)
#FUSES NOCPD //No EE protection
#FUSES NOPROTECT //Code not protected from reading
#FUSES MCLR //Master Clear pin enabled
#FUSES NOPUT //No Power Up Timer
#FUSES NOBROWNOUT //No brownout reset
#use delay(clock=20000000)

#define LED PIN_A0 //CHANGE PIN_XX TO YOUR LED PIN NUMBER, EX: PIN_A5
void main()
{
setup_timer_0(RTCC_INTERNAL|RTCC_DIV_1);
setup_timer_1(T1_DISABLED);
//setup_ccp1(CCP_OFF);
setup_comparator(NC_NC);
setup_vref(FALSE);
set_tris_a(0x3E);
while(true){
output_low(LED);
delay_us(13);
output_high(LED);
delay_us(13);
}
}
 
Verdiğin kod mikroC değil, CCS PIC C.
Ancak mikroC'de, ASM etiketi içerisinde yazabilirsin. Örneğin;


Kod:
asm {
        BCF     STATUS,RP1
        BSF     STATUS,RP0
        ...
      }
 
Evet yanlış yazmışım. Peki CCS C de nasıl yaparız?
 
Kod:
int find_parity(int data)
{
int count;
#asm
MOV #0x08, W0
MOV W0, count
CLR W0
loop:
XOR.B data,W0
RRC data,W0
DEC count,F
BRA NZ, loop
MOV #0x01,W0
ADD count,F
MOV count, W0
MOV W0, _RETURN_
#endasm
}
 
Bu siteyi kullanmak için çerezler gereklidir. Siteyi kullanmaya devam etmek için onları kabul etmelisiniz. Daha fazla bilgi edin…