Пн июл 09, 2012 20:54:47
PORTB=0x00000001;
PORTB=PORTB<1;
Пн июл 09, 2012 21:56:14
Пн июл 09, 2012 23:57:48
Вт июл 10, 2012 09:40:57
Вт июл 10, 2012 09:48:09
Вт июл 10, 2012 09:54:06
Вт июл 10, 2012 12:07:21
Вт июл 10, 2012 16:57:44
Вт июл 10, 2012 17:04:03
Rondo писал(а):0b - это двоичные числа, шестнадцатиричные - 0x
Вт июл 10, 2012 17:53:52
Вт июл 10, 2012 18:03:22
Rondo писал(а):0x10000000 это ж 8 бит
Вт июл 10, 2012 18:26:27
Вт июл 10, 2012 19:24:46
Вт июл 10, 2012 19:24:59
PORTA=(VPORT & 0x000F) | ((VPORT & 0x0F00) >> 4);
PORTB=((VPORT & 0x00F0) >> 4) | ((VPORT & 0xF000) >> 8);
Вт июл 10, 2012 20:19:50
// Массив соответствия виртуальных пинов
unsigned char ptable[11,3]{
// Порт B Порт C Порт D
{0b00010000, 0b00000000, 0b00000000}, // виртуальный пин 0
{0b00000000, 0b00100000, 0b00000000},
{0b00000000, 0b10000000, 0b00000000},
{0b00001000, 0b00000000, 0b00100000},
{0b00000000, 0b00000100, 0b00000000},
{0b00000100, 0b00000000, 0b00000000},
{0b00000000, 0b00000000, 0b00000000},
{0b00000000, 0b00000001, 0b00000000},
{0b00000000, 0b00000000, 0b00001000},
{0b00000000, 0b00000000, 0b00000010},
{0b10000000, 0b00000000, 0b00000000} // виртуальный пин 1
}
// Установка виртульного пина по его номеру
// num от 0 до 10 (в данном случае)
void setBit(unsigned char num)
{
PORTB|=ptable[num, 0];
PORTC|=ptable[num, 1];
PORTD|=ptable[num, 2];
}
// Сброс виртуального пина
void clearBit(unsigned char num)
{
PORTB&=(~ptable[num, 0]);
PORTC&=(~ptable[num, 1]);
PORTD&=(~ptable[num, 2]);
}
Вт июл 10, 2012 21:35:54
.include "m8def.inc" ; Используем ATMega8
; ROM ===============
.CSEG ; ROM
.org $000
rjmp RESET ;
.org $009
rjmp TMR0_OVF ; TIMER0 OVF Переполнение таймера/счетчика Т0
; ---------- R E S E T ----------
.ORG INT_VECTORS_SIZE ; Конец таблицы прерываний
RESET:
cli
ldi r16, high(RAMEND) ; Main program start
out SPH, r16 ; Set Stack Pointer to top of RAM
ldi r16, low(RAMEND) ;
out SPL, r16 ;
clr r16
out TCCR0, r16 ; Стоп Timer0
out TCNT0, r16 ; Сброс Timer/Counter0
ldi r16, 0b00000001 ; Используем вектор переполнения TIMER0 OVF
out TIMSK, r16 ;
sei
ldi YL, low(SRAM_START) ; Начало ОЗУ
ldi YH, high(SRAM_START);
; При тактовой частоте МК 8 МГц, частота обновления около 30 Гц
ldi r16, 0b00000101 ; Запускаем Timer0 предделитель частоты 1:1024
out TCCR0, r16 ; 001=1:1,010=1:8,011=1:64,100=1:256,101=1:1024
;передаем регистры в переменные драйвера
ldi r16, 0b11001111 ; LEFT low 0bxxxxxxxx
std Y+0, r16 ;
ldi r16, 0b00000101 ; LEFT high 0b?????xxx
std Y+1, r16 ;
ldi r16, 0b00011111 ; RIGHT low 0bxxxxxxxx
std Y+2, r16 ;
ldi r16, 0b00000111 ; RIGHT high 0b?????xxx
std Y+3, r16 ;
MAIN:
; Типа бегущие огни для примера
ldd r16, Y+0
ldd r17, Y+1
lsr r16
in r20, SREG
lsr r17
in r21, SREG
sbrc r21, 0
sbr r16, 0x80
sbrc r20, 0
sbr r17, 0x04
std Y+0, r16 ;
std Y+1, r17 ;
ldd r18, Y+2 ;
ldd r19, Y+3 ;
lsr r18
in r20, SREG
lsr r19
in r21, SREG
sbrc r21, 0
sbr r18, 0x80
sbrc r20, 0
sbr r19, 0x04
std Y+2, r18 ;
std Y+3, r19 ;
in r16,MCUCR
ori r16, $80
out MCUCR, r16
sleep ; Ждем включения драйвера
rjmp MAIN ; Go again
;----------
TMR0_OVF:
push r16
push r17
push r18
push r19
in r16, SREG
push r16
; Очищаем порты
ldi r16, 0b00111111
out DDRC, r16
ser r16
out DDRB, r16
out DDRD, r16
clr r16
out PORTB, r16
out PORTC, r16
out PORTD, r16
; Читаем переменные
ldd r16, Y+0
ldd r17, Y+1
ldd r18, Y+2 ;
ldd r19, Y+3 ;
; И запихиваем в нужные биты портов
; Ряд слева
sbrc r16, 0
sbi PORTD,0 ; PD0
sbrc r16, 1
sbi PORTD,1 ; PD1
sbrc r16, 2
sbi PORTD,2 ; PD2
sbrc r16, 3
sbi PORTD,3 ; PD3
sbrc r16, 4
sbi PORTD,4 ; PD4
sbrc r16, 5
sbi PORTB,6 ; PB6
sbrc r16, 6
sbi PORTB,7 ; PB7
sbrc r16, 7
sbi PORTD,5 ; PD5
sbrc r17, 0
sbi PORTD,6 ; PD6
sbrc r17, 1
sbi PORTD,7 ; PD7
sbrc r17, 2
sbi PORTB,0 ; PB0
; Ряд справа
sbrc r18, 0
sbi PORTC,5 ; PC5
sbrc r18, 1
sbi PORTC,4 ; PC4
sbrc r18, 2
sbi PORTC,3 ; PC3
sbrc r18, 3
sbi PORTC,2 ; PC2
sbrc r18, 4
sbi PORTC,1 ; PC1
sbrc r18, 5
sbi PORTC,0 ; PC0
sbrc r18, 6
sbi PORTB,5 ; PB5
sbrc r18, 7
sbi PORTB,4 ; PB4
sbrc r19, 0
sbi PORTB,3 ; PB3
sbrc r19, 1
sbi PORTB,2 ; PB2
sbrc r19, 2
sbi PORTB,1 ; PB1
pop r16
out SREG, r16
pop r19
pop r18
pop r17
pop r16
reti
Ср июл 11, 2012 07:00:02
Ср июл 11, 2012 09:04:10
Ср июл 11, 2012 10:55:31
Ср июл 11, 2012 12:19:21