BS83B08 örnek kod

Başlatan merve damar, 20 Ağustos 2019, 17:02:01

merve damar

Merhaba iyi çalışmalar. holteğin BS83B08 işlemcisi ile çalışan var mı? Örnek kod ve önerebileceğiniz bir kaynak da olabilir.

merve damar

ht-Ide 3000 kullanmak istiyoruz. Açıkçası datasheetten, amaçladığımız adreslemeyi nasıl yapacağımızı bilmiyoruz. Bu sebeple daha kolay anlaşılır kodlar bulmak istiyoruz. Yani register olarak.

elektro77

Alıntı yapılan: merve damar - 20 Ağustos 2019, 17:20:10ht-Ide 3000 kullanmak istiyoruz. Açıkçası datasheetten, amaçladığımız adreslemeyi nasıl yapacağımızı bilmiyoruz. Bu sebeple daha kolay anlaşılır kodlar bulmak istiyoruz. Yani register olarak.
BU dediğiniz HT-IDE 3000 ne işe yarar ve nerede kullanılır bi açıklayın önce bizde bir öğrenelim. ondan sonra register ayarları konusunda bi yardımcı olan çıkar heralde. ete hocamın sitesinde yardımsız bırakmayız insanları.
ama önce konu hakkında iyi bir açıklama yapmanız gerekli.Hiç bilmeyene açıklama yapar gibi.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

merve damar

Alıntı yapılan: elektro77 - 21 Ağustos 2019, 08:59:39BU dediğiniz HT-IDE 3000 ne işe yarar ve nerede kullanılır bi açıklayın önce bizde bir öğrenelim. ondan sonra register ayarları konusunda bi yardımcı olan çıkar heralde. ete hocamın sitesinde yardımsız bırakmayız insanları.
ama önce konu hakkında iyi bir açıklama yapmanız gerekli.Hiç bilmeyene açıklama yapar gibi.

 HT-IDE 3000 C dilinde bir çeşit derleyicidir. Yalnızca Holtek için ayarlanmıştır. BS83B08 de holtek işlemcisidir. 8 bit olduğundan register olarak kod yazmak o kadar zor değil diye düşünmekteyiz. Yeni geçtiğimiz için araştırma aşamasındayız.

elektro77

#4
datasheet inide koysaydınız keşke. Neyse. benim anladığım kadarı ile bu işemci dokunmatik keypadler için özel olarak ayarlanmış ve çeşitli sayılarda pinlere sahip bir işlemci. peki bu işlmeciye ne gibi bir programlayıcı ile yazılım atıyorsunuz.Örneğin pickit3 gibi
aşagğıda birde datasheet ekledim. c dilinde bazı örnekler var. belki bakmışsınızdır.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

merve damar

Örnek bir kod bulduk. O kodları çalıştırmaya çalışıyoruz. Pragramcı resimdedir.


merve damar

http://read.pudn.com/downloads416/sourcecode/asm/1767214/C%20%E8%AF%AD%E8%A8%80%E8%B0%83%E7%94%A8LIB/Touch/Touch.c__.htm
Burdaki Kodu çalıştırmaya çalışıyoruz. Fakat 24üncü satırda hata veriyor. Bu satırdaki kodun ne anlama geldiğini biliyor musunuz?

elektro77

gönderdiğiniz linkteki program aşağıdadır.
 yazdıklarınızda  24. satır deyince _wctl = 0b11110000; kodunda hata verdiğini sanıyorum. bu tüm parantez içinde bir hata olabileceği anlamına gelir sadece bu kodda değil. bu kod parantez başı çünki.
ayrıca datasheete baktığınızda wctl diye bir register olmadığını görüyorum. Bu kodun wdt1 olma olasılığı daha yüksek. yani watch dog timer.
// # "BS83B08-3.h" dahil   
#include "Extern_Reg_Function.h"   
   
geçersiz  EXT_ASM ( geçersiz )   
{   
    #asm   
    BS83B08.INC DAHİL   
    extern   _TKS_TIME_BASE: BYTE   
    #endasm    
}   
işaretsiz  karakter  KeyStatus [2];   
   
// ------------------------------------------------ -------------------   
// # pragma vektör ext_int @ 0x04   
// # pragma vektör sim_int @ 0x10   
// # pragma vektörü eeprom_int @ 0x14   
// # pragma vektör timer0_int @ 0x1c   
#pragma vektör tb_int @ 0x20   
// ------------------------------------------------ -------------------   
   
   
geçersiz  ana ()   
{   
    _wctl = 0b11110000;   
    _clrwdt1 ();   
    _clrwdt2 ();   
    SYSTEM_INITIAL ();   
   
   
    ise (1) {   
        yapmak {   
            _clrwdt1 ();   
            _clrwdt2 ();   
            SCAN_TOUCH_KEY ();   
            #ifdef UART_MODE   
                UART_TEST ();   
            #endif   
           // #ifdef HXT_IIC_MODE   
           // HXT_IIC_TEST ();      
           // #ifdef   
   
   
        } while (! SCAN_CYCLEF);   
        // - Bitmap ile anahtar durumunu oku   
        GET_KEY_BITMAP ();       // DATA_BUT [0], _ DATA_BUF [1], _ DATA_BUF [2] 'te ÇIKIŞ   
        KeyStatus [0] = DATA_BUF [0];   
        KeyStatus [1] = DATA_BUF [1];   
   
        eğer (KeyStatus [0])   
        {   
            _pa4 = 1;     // KeyStatus [0] .0 = 1; Tuşa basın1   
        }   
        Başka   
        {   
            _pa4 = 0; // KeyStatus [0] .0 = 0; Anahtar 1'i bırakın   
        }   
    }   
}   
   
   
geçersiz  tb_int ( geçersiz )   
{   
    #asm   
        SIZ _TKS_TIME_BASE; [70H]   
        JMP $ + 3   
        SDZ _TKS_TIME_BASE; [70H]   
        NOP   
        NOP   
    #endasm   
}  
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

elektro77

#8
0b11110000 ayrıca bu kodun keypedde herhangi bir tuşa basılıp basılmadığını tarama ile ilgili bir komut olduğunu zannediyorum.
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

Burak

#9
Acaba derleyici "Special Function Register (SFR)" tanımlamalarının yapıldığı "Device Header" dosyasında vektör adresleriyle tanımlanmış ifadelere erişim sağlayamadığı için hata veriyor olabilir mi ? Yani verdiğiniz örnek yazılımdaki hata 24. satırda oluşuyorsa derlenirken eğer, bu 1. satırdaki kodun kapatılmış olmasından kaynaklanıyor olabilir diye düşünüyorum . Tam hata mesajını kodu ile paylaşırsanız daha net öneride bulunabiliriz .

//#include "BS83B08-3.h" bu kodda ki "//" ifadelerini silip tekrar deneyin . Belki faydalı olur ..

Burak
Ω Gens Una Sumus Ω

merve damar

Alıntı yapılan: elektro77 - 22 Ağustos 2019, 09:22:19gönderdiğiniz linkteki program aşağıdadır.
 yazdıklarınızda  24. satır deyince _wctl = 0b11110000; kodunda hata verdiğini sanıyorum. bu tüm parantez içinde bir hata olabileceği anlamına gelir sadece bu kodda değil. bu kod parantez başı çünki.
ayrıca datasheete baktığınızda wctl diye bir register olmadığını görüyorum. Bu kodun wdt1 olma olasılığı daha yüksek. yani watch dog timer.
// # "BS83B08-3.h" dahil   
#include "Extern_Reg_Function.h"   
   
geçersiz  EXT_ASM ( geçersiz )   
{   
    #asm   
    BS83B08.INC DAHİL   
    extern   _TKS_TIME_BASE: BYTE   
    #endasm    
}   
işaretsiz  karakter  KeyStatus [2];   
   
// ------------------------------------------------ -------------------   
// # pragma vektör ext_int @ 0x04   
// # pragma vektör sim_int @ 0x10   
// # pragma vektörü eeprom_int @ 0x14   
// # pragma vektör timer0_int @ 0x1c   
#pragma vektör tb_int @ 0x20   
// ------------------------------------------------ -------------------   
   
   
geçersiz  ana ()   
{   
    _wctl = 0b11110000;   
    _clrwdt1 ();   
    _clrwdt2 ();   
    SYSTEM_INITIAL ();   
   
   
    ise (1) {   
        yapmak {   
            _clrwdt1 ();   
            _clrwdt2 ();   
            SCAN_TOUCH_KEY ();   
            #ifdef UART_MODE   
                UART_TEST ();   
            #endif   
           // #ifdef HXT_IIC_MODE   
           // HXT_IIC_TEST ();      
           // #ifdef   
   
   
        } while (! SCAN_CYCLEF);   
        // - Bitmap ile anahtar durumunu oku   
        GET_KEY_BITMAP ();       // DATA_BUT [0], _ DATA_BUF [1], _ DATA_BUF [2] 'te ÇIKIŞ   
        KeyStatus [0] = DATA_BUF [0];   
        KeyStatus [1] = DATA_BUF [1];   
   
        eğer (KeyStatus [0])   
        {   
            _pa4 = 1;     // KeyStatus [0] .0 = 1; Tuşa basın1   
        }   
        Başka   
        {   
            _pa4 = 0; // KeyStatus [0] .0 = 0; Anahtar 1'i bırakın   
        }   
    }   
}   
   
   
geçersiz  tb_int ( geçersiz )   
{   
    #asm   
        SIZ _TKS_TIME_BASE; [70H]   
        JMP $ + 3   
        SDZ _TKS_TIME_BASE; [70H]   
        NOP   
        NOP   
    #endasm   
}  

Dediğinizi datasheetten inceleyip bir şeyler çıkartmaya çalışacağım. Telegramda programlama gruplarında da aynı problemi paylaştım. Hata kodunu falan paylaştım sizle de paylaşabilirim. Orada o satırda kullanılan ifade için değişken tipi yetersiz cevabını aldım.
Evet böyle bir register yok ve biz bu kodun önem taşıdığını düşünmekteyiz. Siz de Tuşa basılıp basılmama gibi bi durum söz konusu diyorsunuz. Yardım edebilirseniz bu sorunu çözebilirim. Vakit ayırdığınız için çok teşekkürler.



elektro77

yukarıda
burak bey in söylediğini yapın birde
"Eğer bir konuyu öğrenmek istiyorsan o konunun öğretmeni ol; daha iyi öğrenmek istiyorsan o konuda bir kitap yaz; daha da iyi öğrenmek istiyorsan yazdığın kitabi oku"

merve damar

Alıntı yapılan: Burak - 22 Ağustos 2019, 09:48:11Acaba derleyici "Special Function Register (SFR)" tanımlamalarının yapıldığı "Device Header" dosyasında vektör adresleriyle tanımlanmış ifadelere erişim sağlayamadığı için hata veriyor olabilir mi ? Yani verdiğiniz örnek yazılımdaki hata 24. satırda oluşuyorsa derlenirken eğer, bu 1. satırdaki kodun kapatılmış olmasından kaynaklanıyor olabilir diye düşünüyorum . Tam hata mesajını kodu ile paylaşırsanız daha net öneride bulunabiliriz .

//#include "BS83B08-3.h" bu kodda ki "//" ifadelerini silip tekrar deneyin . Belki faydalı olur ..

Burak

Ana fonksiyon ile birlikte paylaşılan kütüphaneleri inceledim hemen bu önerinizden sonra. Onu paylaşmak isterim. Aşağıda paylaşılan kodlar İnitial adında bir dosyada bulunmaktadır.


//;;*OUTPUT  :                                              *                         
//;;*USED REG.:                                              *                         
//;;*FUNCTION :                                              *                         
//;;***********************************************************
void SYSTEM_INITIAL(void)
{
#asm
                ;---------------------
                ;-SYSTEM CLOCK INITIAL
                ;---------------------
                MOV    A,SystemClock  ;0=8MHz;1=12MHz;2=16MHz;Other=8MHz
                CALL    _SET_SYS_CLK


                ;----------------
                ;-WDT INITIAL  -
                ;----------------
                MOV    A,11110000B    ;one SEC. time out
                MOV    WCTL,A
                CLR    WDT
                CLR    WDT1
                CLR    WDT2


                ;----------------
                ;-RAM INITIAL ---
                ;----------------
                ;-CLEAR RAM BANK1
                CLR    BP
                SET    BP.0
                MOV    A,80H
                #endasm
              CLEAR_RAM();
              #asm
                ;-CLEAR RAM BANK0
                CLR    BP
                MOV    A,60H
                #endasm
                CLEAR_RAM();
                #asm

                ;----------------
                ;-IO INITIAL  ---
                ;----------------
                ;-PA INITIAL
                CLR    PAPU
                CLR    PAC
                CLR    PA
                ;-PB INITIAL
                CLR    PBPU
                CLR    PBC
                CLR    PB
                ;-PC INITIAL
                //CLR    PCPU
                //CLR    PCC
                //CLR    PC


                ;----------------
                ;-LIBRARY INITIAL                 
                ;----------------                 
                ;-LOAD LIBRARY OPTION/THRESHOLD
                #endasm
                LOAD_HXT_REFERENCE();
                #asm
                ;-TKS VARIES INITIAL     
                CALL    _TKS_INITIAL
                ;-SET as KEY or IO : 0=KEY 1=IO
                MOV    A,KEY8_KEY1_ATTR       
                MOV    _DATA_BUF
  • ,A
                MOV    A,KEY16_KEY9_ATTR     
                MOV    _DATA_BUF[1],A
                CALL    _SET_KEY_ATTR



                ;-----------------------------
                ;-HXT EDITOR INTERFACE INITIAL
                ;-----------------------------
                IFDEF  HXT_IIC_MODE
                CALL    HXT_IIC_INITIAL
                ENDIF

                ;-ENABLE GLOBE INT.
                SET    EMI
                RET
#endasm
}



//;;***********************************************************                         
//;;*SUB. NAME:                                              *                         
//;;*INPUT    :                                              *                         
//;;*OUTPUT  :                                              *                         
//;;*USED REG.:                                              *                         
//;;*FUNCTION :                                              *                         
//;;***********************************************************
#define        GlobeOptionA    (CalibrateTime<<4)|KeyDebounce
#define        GlobeOptionB    (MaximumOnTime<<4)|SamplingTime
#define        GlobeOptionC    (PowerOnBalance<<7)|(ReBalance<<6)|(OneKeyActive<<5)|(AutoRSelect<<3)
void LOAD_HXT_REFERENCE(void)
{
#asm
                ;-TKS LIBRARY OPTION
                MOV    A,GlobeOptionA
                MOV    _GLOBE_VARIES
  • ,A         
                MOV    A,GlobeOptionB
                MOV    _GLOBE_VARIES[1],A           
                MOV    A,GlobeOptionC
                MOV    _GLOBE_VARIES[2],A             
                ;-KEY1 THRESHOLD
                MOV    A,Key1Threshold
                MOV    _GLOBE_VARIES[3],A             
                ;-KEY2 THRESHOLD
                MOV    A,Key2Threshold
                MOV    _GLOBE_VARIES[4],A             
                ;-KEY3 THRESHOLD
                MOV    A,Key3Threshold
                MOV    _GLOBE_VARIES[5],A             
                ;-KEY4 THRESHOLD
                MOV    A,Key4Threshold
                MOV    _GLOBE_VARIES[6],A             
                ;-KEY5 THRESHOLD
                MOV    A,Key5Threshold
                MOV    _GLOBE_VARIES[7],A             
                ;-KEY6 THRESHOLD
                MOV    A,Key6Threshold
                MOV    _GLOBE_VARIES[8],A             
                ;-KEY7 THRESHOLD
                MOV    A,Key7Threshold
                MOV    _GLOBE_VARIES[9],A             
                ;-KEY8 THRESHOLD
                MOV    A,Key8Threshold
                MOV    _GLOBE_VARIES[10],A             
                ;-KEY9 THRESHOLD
                MOV    A,Key9Threshold
                MOV    _GLOBE_VARIES[11],A             
                ;-KEY10 THRESHOLD
                MOV    A,Key10Threshold
                MOV    _GLOBE_VARIES[12],A             
                ;-KEY11 THRESHOLD
                MOV    A,Key11Threshold
                MOV    _GLOBE_VARIES[13],A             
                ;-KEY12 THRESHOLD
                MOV    A,Key12Threshold
                MOV    _GLOBE_VARIES[14],A             
                ;-KEY13 THRESHOLD
                MOV    A,Key13Threshold
                MOV    _GLOBE_VARIES[15],A             
                ;-KEY14 THRESHOLD
                MOV    A,Key14Threshold
                MOV    _GLOBE_VARIES[16],A             
                ;-KEY15 THRESHOLD
                MOV    A,Key15Threshold
                MOV    _GLOBE_VARIES[17],A             
                ;-KEY16 THRESHOLD
                MOV    A,Key16Threshold
                MOV    _GLOBE_VARIES[18],A             
                RET
#endasm
}

//;;***********************************************************                         
//;;*SUB. NAME:                                              *                         
//;;*INPUT    :                                              *                         
//;;*OUTPUT  :                                              *                         
//;;*USED REG.:                                              *                         
//;;*FUNCTION :                                              *                         
//;;***********************************************************
void CLEAR_RAM(void)
{
#asm
                MOV    MP1,A
                CLR    IAR1
                INCA    MP1
                SNZ    Z
                JMP    $-4
                RET
               
  #endasm
}

Burak

#13
Alıntı yapılan: merve damar - 22 Ağustos 2019, 10:02:14Dediğinizi datasheetten inceleyip bir şeyler çıkartmaya çalışacağım. Telegramda programlama gruplarında da aynı problemi paylaştım. Hata kodunu falan paylaştım sizle de paylaşabilirim. Orada o satırda kullanılan ifade için değişken tipi yetersiz cevabını aldım.
Evet böyle bir register yok ve biz bu kodun önem taşıdığını düşünmekteyiz. Siz de Tuşa basılıp basılmama gibi bi durum söz konusu diyorsunuz. Yardım edebilirseniz bu sorunu çözebilirim. Vakit ayırdığınız için çok teşekkürler.




SYSTEM_INITIAL fonksiyonuna bakıldığında wctl isimli register'a asm koduyla direkt isim sıfatıyla ulaşım sağlanabiliyor ama hata koduna baktığınızda 24. satırdaki ibaresitle _wctl isimli register tanımlanmamış yani bu chip'e özgü olarak yazılmış header dosyasına ulaşamıyorsunuz yada derleyici onu bulamıyor sorunumuz bu ..

Acaba BS83B08-3.h dosyasının içinde neler var ? Yada altındaki Extern_Reg_Function.h dosyasının içinde neler var .. Bu dosyaları programın yazıldığı dizin içerisine tekrar kopyalamak gerekebilir çünkü derleyici bu identifier'lara ulaşamıyor .

#include <BS83B08-3.h> 
#include <Extern_Reg_Function.h>

şeklinde oklar ile girip tekrar da deneyebilirsiniz ..
Ω Gens Una Sumus Ω

merve damar

Alıntı yapılan: Burak - 22 Ağustos 2019, 12:07:48SYSTEM_INITIAL fonksiyonuna bakıldığında wctl isimli register'a asm koduyla direkt isim sıfatıyla ulaşım sağlanabiliyor ama hata koduna baktığınızda 24. satırdaki ibaresitle _wctl isimli register tanımlanmamış yani bu chip'e özgü olarak yazılmış header dosyasına ulaşamıyorsunuz yada derleyici onu bulamıyor sorunumuz bu ..

Acaba BS83B08-3.h dosyasının içinde neler var ? Yada altındaki Extern_Reg_Function.h dosyasının içinde neler var .. Bu dosyaları programın yazıldığı dizin içerisine tekrar kopyalamak gerekebilir çünkü derleyici bu identifier'lara ulaşamıyor .

#include <BS83B08-3.h> 
#include <Extern_Reg_Function.h>

şeklinde oklar ile girip tekrar da deneyebilirsiniz ..
Öncelikle verdiğiniz bilgiler için çok teşekkür ederim. Mov komutu ile tanımlama yapılmış bu son attığım dosyada dediğiniz gibi assembly dilinde bir tanımlama yapılmış. Fakat ana fonksiyonda c dili altında bu değeri çağırmak istemiş. Bu mümkün mü?

 Extern_Reg_Function.h dosyasını paylaşacağım. Fakat BS83B08-3.h bu dosya kütüphaneler içinde bulunmuyor malesef. Kaldırılmış.

Powered by EzPortal