Чт мар 17, 2022 17:04:37
Чт мар 17, 2022 18:42:22
Чт мар 17, 2022 19:34:20
Пт мар 18, 2022 09:19:31
Пт мар 18, 2022 09:27:50
Пт мар 18, 2022 09:37:59
Пт мар 18, 2022 10:00:55
Пт мар 18, 2022 12:16:43
Вс мар 20, 2022 23:06:02
Shumaher писал(а):просто копирую текст в исходники и трындец. Даже не компилируется
Пн мар 21, 2022 08:33:26
#include <avr/io.h>
#include <avr/interrupt.h>
#include <avr/pgmspace.h>
#include <util/delay.h>
typedef struct{
volatile uint8_t * port;
uint8_t and;
uint8_t or;
} seg_pin_t;
#define pn(p,b) {&PORT ## p, ~_BV(b), _BV(b)}
#define A _BV(0)
#define B _BV(1)
#define C _BV(2)
#define D _BV(3)
#define E _BV(4)
#define F _BV(5)
#define G _BV(6)
#define H _BV(7)
#define DIG0 (A+B+C+D+E+F)
#define DIG1 (B+C)
#define DIG2 (A+B+G+E+D)
#define DIG3 (A+B+C+D+G)
#define DIG4 (B+F+G+C)
#define DIG5 (A+F+G+C+D)
#define DIG6 (A+C+D+E+F+G)
#define DIG7 (A+B+C)
#define DIG8 (A+B+C+D+E+F+G)
#define DIG9 (A+B+C+D+F+G)
const __flash seg_pin_t pins[8] = {
pn(B,0),
pn(C,0),
pn(D,0),
pn(B,2),
pn(C,2),
pn(D,2),
pn(B,4),
pn(C,4)
};
const __flash seg_pin_t commons[4] = {
pn(D,1),
pn(D,4),
pn(B,1),
pn(C,1)
};
uint8_t scr[4] = {DIG5,DIG2,DIG3,DIG4};
ISR(TIMER0_OVF_vect){
static uint8_t com;
const __flash seg_pin_t *p = commons+com;
*p->port &= p->and;
if(++com >= 4) com = 0;
uint8_t d = scr[com];
d = ~d;
p = pins;
for(uint8_t i=0; i<8; i++, d>>=1){
*p->port = (*p->port & p->and) | (d & 1 ? p->or : 0);
p++;
}
p = commons+com;
*p->port |= p->or;
}
int main(void){
DDRB = 255;
DDRC = 255;
DDRD = 0x7F;
PORTD = 0x80;
TCCR0 = 4;
TIMSK = _BV(TOIE0);
sei();
while(1);
}
AVR Memory Usage
----------
Device: atmega16
Program: 432 bytes (2.6% Full)
(.text + .data + .bootloader)
Data: 5 bytes (0.5% Full)
(.data + .bss + .noinit)
#include <mega16.h>
// Declare your global variables here
#define uint8_t unsigned char
typedef struct {
volatile uint8_t * port;
uint8_t and;
uint8_t or;
} seg_pin_t;
#define pn(p,b) {&PORT ## p, ~_BV(b), _BV(b)}
#define _BV(bit) (1 << (bit))
#define A _BV(0)
#define B _BV(1)
#define C _BV(2)
#define D _BV(3)
#define E _BV(4)
#define F _BV(5)
#define G _BV(6)
#define H _BV(7)
#define DIG0 (A+B+C+D+E+F)
#define DIG1 (B+C)
#define DIG2 (A+B+G+E+D)
#define DIG3 (A+B+C+D+G)
#define DIG4 (B+F+G+C)
#define DIG5 (A+F+G+C+D)
#define DIG6 (A+C+D+E+F+G)
#define DIG7 (A+B+C)
#define DIG8 (A+B+C+D+E+F+G)
#define DIG9 (A+B+C+D+F+G)
flash const seg_pin_t pins[8] = {
pn(B,0),
pn(C,0),
pn(D,0),
pn(B,2),
pn(C,2),
pn(D,2),
pn(B,4),
pn(C,4)
};
flash const seg_pin_t commons[4] = {
pn(D,1),
pn(D,4),
pn(B,1),
pn(C,1)
};
uint8_t scr[4] = {DIG5,DIG2,DIG3,DIG4};
// Timer 0 overflow interrupt service routine
interrupt [TIM0_OVF] void timer0_ovf_isr(void)
{ uint8_t d; uint8_t i;
static uint8_t com;
flash const seg_pin_t *p = commons+com;
*p->port &= p->and;
if(++com >= 4) com = 0;
d = scr[com];
d = ~d;
p = pins;
for(i=0; i<8; i++, d>>=1){
*p->port = (*p->port & p->and) | (d & 1 ? p->or : 0);
p++;
}
p = commons+com;
*p->port |= p->or;
}
void main(void)
{
DDRB = 255;
DDRC = 255;
DDRD = 0x7F;
PORTD = 0x80;
TCCR0 = 4;
TIMSK = _BV(TOIE0);
#asm("sei")
while(1);
}
Program size: 254 words (508 bytes), 3,1% of FLASH
11 words (22 bytes), 4,2% reduced by Code Compression
Пн мар 28, 2022 10:28:32
Пн мар 28, 2022 10:49:36
Пн мар 28, 2022 21:13:37
Нет, необязательным.Shumaher писал(а):То есть что, это считается обязательным?
Чт май 05, 2022 16:42:33
Пт май 06, 2022 21:04:53
Пт май 06, 2022 21:11:47
Пт май 06, 2022 21:19:12
Сб май 07, 2022 14:11:37
Ерунду не несите.BOB51 писал(а):Только вот в этом случае саму программу и прошивку надо делать также по правилам CodeVisionAVR через ISP да предварительно удалив штатный бутлоадер ардуинки,