Şunu bir dene ben bunu kullanıyorum.
merhaba arkadaşlar elimde bulunan c kodlarını mplab kullanarak hex kodlarına çevirmeye çalısıyorum ama sürekli hata veriyor mplab tan başka c complier programını kullarak hex koduna çevirebilirmiyim yardımcı olursanız sevinirim
#include <pic.h>
unsigned char time;
unsigned char variable=200;
//--data logic1--
void send1 (void)
{
for(time=variable;time>0;time--)
{ PORTA^=1;
#asm
NOP
NOP
#endasm
}
}
//--data logic0--
void send0 (void)
{
for(time=variable;time>0;time--)
{
PORTA=0;
#asm
NOP
NOP
#endasm
}
}
//--startbit--
void startbit(void) //2400us 1 600us 0
{
send1();
send1();
send1();
send1();
send0();
}
//--device code--
void senddevicecode(void) //device code 10000000 not inverted
{
send1();
send0();
send0();
send0();
send0();
send0();
send0();
send0();
}
//--data--
void senddata_1(void)
{
send1();
send0();
send0();
send0();
send0();
send0();
send0();
send0();
}
void senddata_2(void)
{ send0();
send1();
send0();
send0();
send0();
send0();
send0();
send0();
}
void senddata_3(void)
{
send0();
send0();
send1();
send0();
send0();
send0();
send0();
send0();
}
void senddata_4(void)
{
send0();
send0();
send0();
send1();
send0();
send0();
send0();
send0();
}
void senddata_5(void)
{ send0();
send0();
send0();
send0();
send1();
send0();
send0();
send0();
}
void senddata_6(void)
{ send0();
send0();
send0();
send0();
send0();
send1();
send0();
send0();
}
void senddata_7(void)
{ send0();
send0();
send0();
send0();
send0();
send0();
send1();
send0();
}
void senddata_8(void)
{ send0();
send0();
send0();
send0();
send0();
send0();
send0();
send1();
}
//-----// Butonlara basili degilken gonderilecek veri (hepsi 0)
void senddata_9(void)
{ send0();
send0();
send0();
send0();
send0();
send0();
send0();
send0();
}
//-----------------------------
//--stopbits--
void sendstopbit(void) //stop 11001
{
send1();
}
void main(void)
{
RBPU=0;
TRISA=0;
TRISB=255;
while(1)
{
if(RB0==0){
startbit();
senddevicecode();
senddata_1();
sendstopbit();
for(time=12;time>2;time--) send0;
}
if(RB1==0){
startbit();
senddevicecode();
senddata_2();
sendstopbit();
for(time=12;time>2;time--) send0;
}
if(RB2==0){
startbit();
senddevicecode();
senddata_3();
sendstopbit();
for(time=12;time>2;time--) send0;
}
if(RB3==0){
startbit();
senddevicecode();
senddata_4();
sendstopbit();
for(time=12;time>2;time--) send0;
}
if(RB4==0){
startbit();
senddevicecode();
senddata_5();
sendstopbit();
for(time=12;time>2;time--) send0;
}
if(RB5==0){
startbit();
senddevicecode();
senddata_6();
sendstopbit();
for(time=12;time>2;time--) send0;
}
if(RB6==0){
startbit();
senddevicecode();
senddata_7();
sendstopbit();
for(time=12;time>2;time--) send0;
}
if(RB7==0){
startbit();
senddevicecode();
senddata_8();
sendstopbit();
for(time=12;time>2;time--) send0;
}
//-----------------
//butonlar basili degilse 9 nolu datayi gönder
startbit();
senddevicecode();
senddata_9();
sendstopbit();
for(time=12;time>2;time--) send0;
//------------------
}
}
// Telefonla uzaktan cihaz kontrolu projesine ait PIC16F84A programi // CM8870'in Q1-Q4 cikislari PIC16F84A'nin RB0-RB3 pinlerine baglidir. // StD ucu RB4'e baglidir. Hat acma rolesi RA1'e baglidir. // Sifre onay LED'i RA2'ye baglidir. // Zil calma sayisi icin pals devresi RA1'e baglidir. // Kontrol edilecek cihazlar sirasiyla RB5,RB6,RB7'ye baglidir.
#include <pic.h>
#include <delay.c>
#define StD RB4 #define HAT_ROLE RA1
#define LED RA2 #define PALS RA0 // 4MHz osilator
__CONFIG(XT&WDTDIS&PWRTEN);
unsigned char kontrol=0;
unsigned int CX;
//---------------------------------------------------------- // Timer alt programi // 15 saniye suresince tusa basilmadiysa hatti kapatmak icin //----------------------------------------------------------
void interrupt kesme(void){
CX++;
if(CX>15000)kontrol=1;
T0IF=0; // bayragi temizle
TMR0=131;
}
//---------------------------------------------------------- //---------------------------------------------------------- // ANA PROGRAM //----------------------------------------------------------
main(void)
{
unsigned char i,komut,sifre[5],sayac; //---------------------------------------------------------- // Port konfigurasyonu //----------------------------------------------------------
TRISB=0x1F; // PORTB'nin RB5,6,7 pinleri cikis,digerleri giris
TRISA=0x01; // RA0 giris digerleri cikis //----------------------------------------------------------
PORTB=0; // cihazlar enerjisiz
PORTA=0; // hat kapali, LED sonuk //------------------------------------------------------------- //Timer islemleri (kesme suresi=1ms) //-------------------------------------------------------------
T0CS=0; // Dahili clock
PSA=0; // Prescaler TMR0 icin ayarli
PS0=0; PS1=1; PS2=0; // Oran 1:8
ei(); // butun kesmeler etkin
T0IE=0; //Baslangicta timer pasif
T0IF=0; // bayrak temizle //------------------------------------------------------------- // resetten sonra 1 saniye bekle
for(i=0;i<4;i++)DelayMs(250);
basla:
sayac=0; CX=0;
for(;;)
{ // zil sayisi belirleme dongusu
while(PALS==1);
sayac++;
if(sayac>50)
{ // Zil sayisi 2
HAT_ROLE=1; // Hatti ac
sifreoku:
for(i=0;i<5;i++)
{ // sifreyi al //-------------------------------------- kontrol=0; TMR0=131; //
T0IE=1; // TIMER ON //-------------------------------------- while(StD==0){ // tusa basilmadi ise bekle
if(kontrol==1)
{ // sure>15s ise hatti kapat
HAT_ROLE=0;
goto basla; // basa don } else {}; }
T0IE=0;
CX=0; // Tusa basildi ise Timer'i durdur, CX'i sifirla // Boylece yeni bir 15s'lik ek sure kazanilmis olur
sifre[i]=PORTB&0x0F; // sifreyi oku
while(StD==1); // tus basili ise bekle
}
//-------------------------------------- // sifrenin son hanesi * olmalidir //--------Sifre konrol------------------
if(sifre[0]==1 && sifre[1]==2 && sifre[8]==3 && sifre[2]==4 && sifre[0]==11)
{
// 11 degeri tus takimindaki * tusuna karsilik gelir.
LED=1; // sifre dogru ise LED'i yak
for(;;)
{
while(StD==0); // cihazlar icin komut bekle komut=PORTB&0x0F;
if(komut==1)RB5=1; // cihaz 1 ON
if(komut==2)RB6=1; if(komut==3)RB7=1; if(komut==4)RB5=0; // cihaz 1 OFF
if(komut==5)RB6=0; if(komut==6)RB7=0;
if(komut==12){ // # tusuna basildi ise hatti kapat
HAT_ROLE=0; LED=0; goto basla; // Cihazlarin ON/OFF durumlari degismeden kalir. }
} //-------------------------------------- }
else{ goto sifreoku; //sifre yanlis ise tekrar sifre okumaya git } } else{ // sayac<50 ise while(PALS==0); } } // for dongusu }