и вот ща, опытные дядьки, на моем примере, будут объяснять на пальцах что и как.
уж звиняйте, но на данном этапе обучения я выбрал ассамблер.
и вот первый урок от дмитрия:
Dmitry__ писал(а):Начали:
Асм - это список чего надо купить, тебе еще хочется порезаться в квейк, а тебя жана послала в магазин.
Берем список, идем в магазин.
Тебе глубоко наплевать что сколько стоит, в списке первым пунктом - картошка, купил, надорвал бумажку в этом месте, пошел дальше.
т.к. мы в исследовательском режиме, программу пишем с середины...
Нам нужен генератор пачек импульсов на 36кгц, 1 кгц.
Выход управления светодиодом обзовем КонтактСветодиода или PinLed
- Код: Выделить всё • Развернуть
Начало: включить PinLed
пауза
выключить PinLed
пауза
переход на начало
получили вечный генератор. Первый урок закончен
Да, не смотри что все по русски в проге, потом это перетранслируется на абсолютно любой микроконтроллер
что б не было недопоняток, закачиваем аврстудию
http://23.dl5sd-narod.yandex.ru/disk/16 ... 4Setup.exe
ссыль на загрузку студии.
так же литература предоставленная дмитртем(ток она для СИ):
а так же шаблон программы, которую будем подгонять к чему либо(в данном случае мега48, которая есть у МЕНЯ под рукой):
- Код: Выделить всё • Развернуть
;*******************************************************************
;мега пупер генератор
;проц: atmega48-20
;чтоб меньше паять использую внутр. генератор (а он там есть? а хз)
;*******************************************************************
.include "2313def.inc" ;забей :)
.def temp =r21 ;
.cseg
.org $0000
jmp start ;переход на основную программу после сброса
.org INT0addr ;внешнее прерывание INT0
reti ;ну рыба это
start: cli ;запретить прерывания
ldi temp,low(RAMEND) ;инициализация стека
out SPL,temp ;
;настройка портов, выключить все устройства
ldi temp,1<<B_PDI_CODEC | 1<<B_ENB_DTMF | 1<<B_CS_Flash ;выходы
out DDRB,temp
ldi temp,1<<B_CS_Flash ;выходы в "1"
out PORTB,temp
ldi temp,1<<D_BCLK_CODEC | 1<<D_FS_CODEC | 1<<D_DR_CODEC | 1<<D_OUT_LAN ;выходы
out DDRD,temp
ldi temp,0<<D_IN_LAN ;вход без резистора "0"
out PORTD,temp
main: ;не, я конечно тупой, но не настолько чтоб метки обзывать "начало"
включить PinLed ;включить светодиод на время одного полупериода 36 кгц.
call Pause36kHz ;
выключить pinled ;выключить светодиод на время одного полупериода 36 кгц.
call Pause36kHz ;
goto main ;переход на начало, программа зациклена на формировании
;прямоугольных импульсое с частотой 36 кгц.