2014-11-17 11 views
-1

Здесь мне нужно вывести осциллограмму осциллографа в C, которая должна быть в восходящей пилообразной волне. Я не уверен, что мой код верен. Любая помощь или предложения?Без использования прерываний производят восходящий пилообразный сигнал

while(1) 
{ 
    for (i = 1; i < 360; i++); 

    // Check to see if status.TRDY is 1 
    while(*(base+2) & 0x40 != 1); 

    // while shift register is not empty 
    // Make the sawtooth pattern 
    if (saw == 0x1fff){ 
     saw = 0x1000; 
    } 
    else { 
     saw = saw+1; 
    } 
    // transmit sawtooth to the oscilloscope 
    *(base+1) = saw; 
} 
+0

Что происходит, когда вы компилируете и запускаете код? –

+0

Я не могу скомпилировать его перед тем, как попасть в лабораторию, и перед лабораторией мы должны быть уверены, что это работает, поэтому я запутался с моим кодом, если он делает обманную вещь – user4186509

+0

@ user4186509 у вас нет средств попробовать свой код? – thumbmunkeys

ответ

0

Это только упрощает опубликованный код OP. Он не отвечает, как программировать ЦАП. OP использует 16-битовое значение амплитуды, но его регистрационная адресация предлагает 8-битные регистры - возможно, нужны две записи.

Я предлагаю вам также аргументы функции, определяющие период пилообразной волны и количество шагов. Вам также необходимо условие выхода. Я оставляю эти моменты вам.

@ Крис Страттон также отметил, что порт ввода/вывода должен быть правильным типом языка.

#define MINSAW 0x1000 
#define MAXSAW 0x1FFF 

unsigned *base = (unsigned *)0xD000; // "insert your value" 

int main() { 
    unsigned saw, i; 
    while(1) { 
     for (i = 0; i < 360; i++) { 
      // ratio the waveform amplitude 
      saw = MINSAW + i * (MAXSAW - MINSAW)/359; 

      // Check to see if status.TRDY is 1 
      while((*(base+2) & 0x40) != 0x40); 

      // transmit sawtooth to the oscilloscope 
      *(base+1) = saw; 
     } 
    } 
    return 1; 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^