Domenius je napisal/a: |
Z uporabo timerja, samo pri takšnih preprostoh primerih se to skoraj ne splača. Delay funkcija je napisana tako, da sama preračuna zakasnitev glede na nastavljeno vrednost kristala - preberi si malo komentarje v delay.h pa boš laže našel napako. |
Koda: |
#include <avr/io.h>
#include <avr/interrupt.h> volatile unsigned char delay; /********************** prekinitev timerja 0 **********************/ SIGNAL(SIG_OVERFLOW0) // signal handler for tcnt0 overflow interrupt { TCNT0 = 61; // 50 ms @ 4M ++delay; } int main(void) { DDRB = 0xff; TIMSK = 0x02; // enable TCNT0 overflow TCNT0 = 61; // 50 ms @ 4M TCCR0 = 0x05; // count with cpu clock/1024 sei(); // enable interrupts while (1) { if (delay==20) // 1 sek { delay=0; PORTB ^= 0xff; } } } |
Koda: |
PORTC.5=0; |
Koda: |
../7segmentni.c:12: error: expected ';' before numeric constant |
VolkD je napisal/a: |
CodeVisionAVR govori drugačen dialekt jezika C. Obvlada bitne spremenljivke. WINAVR to ne zna. |
Koda: |
struct { uint8_t bit1: 1; uint8_t bit2: 1; } bitfield; |
upornik je napisal/a: | ||||
Zdravo!
Mene pa zanima, zakaj mi WinAVR javi napako pri takšnem zapisu:
Enako mi javi če uporabim naprimer PIND.x=y; Za probo sem omenjene zapise prevedel z CVAVR in so se prevedli brez problema... Mogoče ve kdo, v čem je problem? Hvala za odgovor! |
Koda: |
// z masko postavi PC5 na 1
PORTC |= 0x20; // z masko postavi PC5 na 0 PORTC &= ~0x20; |
Koda: |
if(PIND.5==0)
{................} |
Koda: |
if (bit_is_clear(PINB,1)) { naredi nekaj; } |