pic c kodu asm koduna çeviremiyorum

Başlatan spawnseytan, 05 Nisan 2017, 21:46:01

spawnseytan

sürekli asm kodu kullandığım için pic c kodunda zorlandımve bu kodun hex dosyasını alamadım yardım edermisiniz
// ********************************************* *************************
// Dosya Adı: pictemp.c
// Sürüm: 1.0
// Açıklaması: PIC Termometre
// Yazar: RWB
// Hedef: Microchip PIC16F886 Mikrodenetleyici
// Derleyici: PIC10 / 12/16 MCU ailesi için HI-TECH C PRO V9.60PL5
// IDE: Microchip MPLAB IDE v8.00
// Programcı: PICKit2
// Son Güncelleme: 28 Şub 2009
// ********************************************* *************************
#include <pic.h>
/ * PIC Yapılandırma Biti:
** INTIO - Dahili RC Kullanımı Saat Yok
** WDTDIS - Wacthdog Zamanlayıcı Devre Dışı Bırak
** PWRTEN - Güç Açma Zamanlayıcısı Etkinleştir
** MCLRDIS - MCLR, IO olarak işlev görür
** UNPROTECT - Kod Korumayı Kaldır
** DUNPROTECT - EEPROM verilerini korumak için okumayın
** BORDIS - Brown Out Detect Disable
** IESODIS - Dahili Harici Geçiş Modu Devre Dışı Bırakma
** FCMDIS - Monitor Clock Fail Safe Disable
** BORV21 - Kahverengi Çıkış Sıfırlama 2.1 Volt
* /
__CONFIG (INTIO & WDTDIS & PWRTDIS & MCLRDIS & UNPROTECT & DUNPROTECT & \
  BORDIS & IESOEN & FCMDIS & LVPDIS & DEBUGEN); // Adres 0x2007
__CONFIG (BORV21); // Adres 0x2008
// 8 MHz'lik Dahili Saat Kullanımı
#define FOSC 8000000L
// Termometre için kullanılan değişken
#define LDR_THRESHOLD 50
#define MAX_DCYCLE 255
Const char SSEG [] = {
  0b11000000, // 0, LED Segmenti: A, B, C, D, E, F
  0b11111001, // 1, LED Segmenti: B, C
  0b10100100, // 2, LED Segmenti: A, B, D, E, G
  0b10110000, // 3, LED Segmenti: A, B, C, D, G
  0b10011001, // 4, LED Parçası: B, C, F, G
  0b10010010, // 5, LED Segmenti: A, C, D, F, G
  0b10000010, // 6, LED Segmenti: A, C, D, E, F, G
  0b11111000, // 7, LED Segmenti: A, B, C
  0b10000000, // 8, LED Segmenti: A, B, C, D, E, F, G
  0b10010000, // 9, LED Segmenti: A, B, C, D, F, G
  0b11000110, // C, LED Segmenti: A, D, E, F
  0b10001110 // F, LED Segmenti: A, E, F, G
};
Imzasız char DispDigit [4];
Imzasız char DigitCount;
Imzasız char TempType;
Statik boşluk kesme isr (void)
{
  If (T0IF) {// TIMER0 Kesme Bayrağı
    / * Segmenti Düşük Çek * /
    PORTC = Boşalt [DigitCount];
    / * Sayı ve Sonraki Satır Kodunu Etkinleştir * /
    PORTB = ~ (1 << DigitCount ++);     

    / * Sayı Sayısını Sıfırla * /
    If (DigitCount> 3)
      DigitCount = 0;

    TMRs = 156; // 3.2 ms için İlk Değer Kesinti
    T0IF = 0; // TIMER0 kesme bayrağını temizle
  }
}
// Gecikme İşlevi
#define _delay_us (x) {unsigned char us; \
	  	       Us = (x) / (12000000 / FOSC) | 1; \
		       (- us! = 0) devam ederken; }
Void _delay_ms (imzasız int ms)
{
  Imzasız karakter i;
  yap {
    I = 4;
    yap {
      _delay_us (164);
    } While (- i);
  While (- ms);
}
/ * Yedi Segment Yerleştirme Numarası: 0'dan 99,9'a kadar kayan değer uygulaması * /
Void SSEG_putnum (float numarası)
{
   Imzasız karakter iDigit, iDigit1, iDecimal;
   Eğer (sayı> 99.9) iade;
   / * Genel kesme devre dışı * /
   GIE = ​​0;		                   

   IDigit = sayı; // Şamandırayı Integer'e Dönüştür
   IDecimal = (sayı - iDigit) * 10; // Ondalık Sayıyı Al
   DispDigit [1] = SSEG [iDecimal]; // İlk Ondalık Sayısal
   If (iDigit> = 10) {
     IDigit1 = iDigit / 10;
     DispDigit [3] = SSEG [iDigit1]; // İkinci Basamak
     IDigit = iDigit - (iDigit1 * 10);
   } Else {
     DispDigit [3] = SSEG [0]; // Sıfır İşaret İkinci Basamak
   }
   DispDigit [2] = SSEG [iDigit] & 0x7F; // Birinci basamak ondalık basamaklı
   / * Genel kesme etkinleştir * /
   GIE = ​​1;
}
Boşluk ana (void)
{
  Unsigned int iValue, iCTemp;
  Imzasız karakter ldr_value;
  Yüzme CentTemp;

  OSCCON = 0x70; / * 8 MHz dahili saat seçin * /

  TRISA = 0xFF; // RA0 - RA7 girişi
  TRISB = 0x00; // RB0 - RB7 için çıktı
  TRISC = 0x00; // RC0 - RC7 için çıktı
  ANSEL = 0b00000011; // PORT AN0 ve AN1'i analog giriş AN2'den AN7'ye dijital I / O'ya ayarlayın
  ANSELH = 0b00000000; // Diğerini Dijital G / Ç olarak ayarla
  / * İlk Çıkış Bağlantı Noktası * /
  PORTC = 0xFF;
  PORTB = 0xFF;
  / * Başlangıç ​​TIMER0: Süre: 1 / (Fosc / 4) x Önsözleyici x TMR0
     0.0005 ms x 64 * 100 = 3.2 ms * /
  OPSİYON = 0b00000101; // 1:64 Önceden Ayırıcı
  TMRs = 156; // her 3.2 ms'de kesme
  T0IE = 1; // TMR0 taşması üzerine kesmeyi etkinleştir
  GIE = ​​1; // Global interrupt enable
  / * Tek Çıkışlı Init PWM * /
  CCP1CON = 0b00001100; // Tekli PWM modu; P1A, P1C aktif-yüksek; P1B, P1D aktif-yüksek
  CCPR1L = MAX_DCYCLE; // Maks Duty Cycle ile başlayın
  T2CON = 0b00000101; // Postscaler: 1: 1, Zamanlayıcı2 = Açık, Önsözlü = 1: 4
  PR2 = 0x65; // Frekans: 4.90 kHz
  TMR2 = 0; // Sıfır sayaç ile başlayın
  PSTRCON = 0b00001000; // P1D'de Darbeli Direksiyonu Etkinleştir (RB4)
  / * Kullanılan başlangıç ​​değişkenleri * /
  DigitCount = 0;
  TempType = 0; // Santigrad Türü
  DispDigit [0] = SSEG [10]; // Centigrade Sign
  DispDigit [1] = SSEG [0]; // Sıfır Rakam
  DispDigit [2] = SSEG [0]; // Sıfır Rakam
  DispDigit [3] = SSEG [0]; // Sıfır Rakam
  için(;;) {
    / * İlk Örneği Alın * /
    ADCON0 = 0b11000001; // 8 MHz için FRC'yi seçin. ADC bağlantı noktası kanalı 0, A2D'yi Aç
    ADCON1 = 0b10110000; // Sağa Yaslanmış, Vref: VCFG1 ve VCFG0 (1 Volt Referansı)
    GODONE = 1; // kanaldaki dönüşümü başlatır 0
    (GODONE) devam ederken; // Bitirilen dönüşüm bekle
    IValue = ADRESL; // 8 bitlik LSB sonucu elde edin
    IValue + = (ADRESH << 8); // 2 bitlik MSB sonucunu elde edin
    ICTemp = iValue;
    _delay_ms (50);
    / * İkinci Örnek Alın * /
    GODONE = 1; // kanaldaki dönüşümü başlatır 0
    (GODONE) devam ederken; // Bitirilen dönüşüm bekle
    IValue = ADRESL; // 8 bitlik LSB sonucu elde edin
    IValue + = (ADRESH << 8); // 2 bitlik MSB sonucunu elde edin
    ICTemp + = iValue;
    _delay_ms (50);
    / * Üçüncü Numuneyi Al * /
    GODONE = 1; // kanaldaki dönüşümü başlatır 0
    (GODONE) devam ederken; // Bitirilen dönüşüm bekle
    IValue = ADRESL; // 8 bitlik LSB sonucu elde edin
    IValue + = (ADRESH << 8); // 2 bitlik MSB sonucunu elde edin
    ICTemp + = iValue;

    / * Ortalama Santigrat Değerini hesaplayın * /
    / * (ADC Değeri / 10.24) / Vref, LM35DZ Çıkış = 10mV / C, Vref = 1 Volt * /
    CentTemp = (iCTemp / 3.0) / 10.24;
    / * Işık Sensörünü Okuyun * /
    ADCON0 = 0b11000101; // 8 MHz için FRC'yi seçin. ADC bağlantı noktası kanalı 1, A2D'yi Aç
    ADCON1 = 0b00000000; // Sola Yaslanmış, Vref: Vss ve Vdd
    GODONE = 1; // kanaldaki dönüşümü başlatır 0
    (GODONE) devam ederken; // Bitirilen dönüşüm bekle
    Ldr_value = ADRESH; // LDR Değerini Alın, LSR'yi ADRESL'de Yoksay
    If (ldr_value> LDR_THRESHOLD)
     Ldr_value = LDR_THRESHOLD;
    CCPR1L = MAX_DCYCLE - (5 * ldr_value); // PWM Görev Döngüsünü Ayarlayın
    / * RA4 Anahtarı'nı okuyun * /
    If (RA4 == 0) {// Tuşa basıldığında Termometre Türünü değiştirin
      _delay_ms (1);
      If (RA4 == 0) {// Simple De bounce için tekrar okuyun
        TempType = ~ TempType; // Tip Bayrağını Değiştir
      }
    }
    / * Sıcaklık Tipini ayarlayın * /
    If (TempType) {
      / * Fahrenhayt = 9/5 x Santigrad + 32 * /
      CentTemp = ((9.0 / 5.0) * CentTemp) + 32;
      DispDigit [0] = SSEG [11]; // Fahrenheit Sign
    } Else {
      DispDigit [0] = SSEG [10]; // Centigrade Sign
    }

    / * Şimdi Sonuç Göster * /
    SSEG_putnum (CentTemp);
    _delay_ms (200);
  }
}
/ * EOF: pictemp.c * /[code]

spawnseytan

yapmak istediğim şeyin linki http://www.ermicro.com/blog/?p=844
ilk önce proteusa kuracağım ama hex dosyası lazım pic c de derleyince 3 hata veriyor

sadogan


spawnseytan

bana çeviride yardım edermisin yada zahmet olmazsa hex dosyasını atarmısın