Работа по прерыванию

Вопросы настройки, программирования, прошивки микроконтроллеров и микросхем программируемой логики
Закрыто
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Работа по прерыванию

Сообщение kras »

Из серии "ничего не работает". Наверное, как-то не так делаю настройку, а может что-то смотрю не так (в отладчике MPLAB).

Код: Выделить всё

	list P=16F630
			#include <P16F630.INC>	; условимся, что резонатор на 10МГц. Пренебрегаю пока командами, отнимающими мало времени на их выполнение
            __CONFIG    H'3FF2'
INTCON		EQU			H'000B'
STATUS      EQU         H'0003'
TRISC       EQU         H'0087'
PORTC       EQU         H'0007'
OPTION_REG	EQU			H'0081'
            org         0           ; начало программы             
; подготовительные моменты
            bsf         STATUS,5    ; переход в Банк 1 
            clrf        TRISC
			movlw       b'00111100'
            movwf       TRISC
            bcf         STATUS,5    ; переход назад в Банк 0
            clrf        PORTC       ; очистка порта
			movlw       b'10000000'
            movwf       OPTION_REG
; отслеживание нажатия кнопки
m1	;btfss       PORTC,2				; цикл меандра
	;goto		m1
	movlw		b'00111111'
	movwf		PORTC
	nop
	nop
	nop
nop
	nop
	nop
nop
	nop
	nop
nop
	nop
	nop
	clrf		PORTC
	nop
	nop
	nop
nop
	nop
	nop
nop
	nop
	nop
nop
	nop
	nop
	goto		m1					; 2 цикла
	end
Тут главные вещи: я задал названия регистров прерывания и таймеров, затем настроил их значения. Теперь я ожидаю, что когда-нибудь у меня в регистре прерываний установится в '1' бит TOIF. Но сколько я ни эмулировал, этого не происходил. Что упустил?
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Реклама
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Работа по прерыванию

Сообщение Аlex »

Ткните носом слепого в обработчик прерываний. В Вашем коде я, почему-то, его не нашёл :roll:
Реклама
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

Обработчик, как я сейчас понимаю, должен что-то делать по установлению бита 2 INTCON в 1. У меня пока это установление даже не получается!
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Работа по прерыванию

Сообщение Аlex »

Для того, что-бы поднялся TOIF, нужно настроить таймер. Почитайте как это делается в ДатаШите на свой МК.
Реклама
Эиком - электронные компоненты и радиодетали
Аватара пользователя
БАТАРЕЙКУС
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб фев 07, 2009 19:21:25

Re: Работа по прерыванию

Сообщение БАТАРЕЙКУС »

вот простейшая программа с работой прерывания по таймеру

Код: Выделить всё

                   LIST        p=16F630 
                   __CONFIG    H'3C4'              ; H'3C4'
;=====================
; REGISTRI CPECIALNOGO NAZNA4ENIJA.
;=====================
Indf               equ         00h                 ;
Tmr0               equ         01h                 ;
OptionR            equ         81h                 ; 
PC                 equ         02h                 ;
Status             equ         03h                 ;
FSR                equ         04h                 ;
PortA              equ         05h                 ;
TrisA              equ         85h                 ;
PortB              equ         06h                 ; 
TrisB              equ         86h                 ;
PortC              equ         07h                 ;
TrisC              equ         87h                 ;

PCLATH             equ         0Ah                 ;
IntCon             equ         0Bh                 ;
PIR1               equ         0Ch                 ;
PIE1               equ         8Ch                 ;
TMR1L              equ         0Eh                 ;
TMR1H              equ         0Fh                 ;
T1CON              equ         10h                 ;

Temp_Status        equ         72h                 ;
Temp_W             equ         73h                 ;
;=====================

;=====================
RP0                equ         5                   ;
RP1                equ         6                   ;
;+++++++++++++++++++++++++++++++++++++++++++++++++++
 

;=====================
                   org         0                   ; 
                   goto        START               ; 
;*********************************************************************************************

;=====================
;            Обработка прерываний                       
;=====================
                   org         4                   ;     
;=====================
;               ОБРАБОТКА ПРЕРЫВАНИЙ
;=====================
                   movwf       Temp_W              ; сохранение данных аккумулятора

                   swapf       Status,W            ; сохранение данных 
                   clrf        Status              ; выбор банка 0
                   movwf       Temp_Status         ; регистра Status
;===============
                   clrf        PIR1                ; сброс флага вызвовшего прерывание

                   movlw       0xEF                ; запись данных в старший
                   movwf       TMR1H               ; регистр таймера TMR1 

                   movlw       0xC1                ; запись данных в младший
                   movwf       TMR1L               ; регистр таймера TMR1 
;===============
                   swapf       Temp_Status,W       ; регистра Status
                   movwf       Status              ; сохранение данных 

                   swapf       Temp_W,F            ; сохранение данных аккумулятора
                   swapf       Temp_W,W            ;
;----------------------------------------------------

                   retfie                          ; выход из прерывания

;===============

;===============
; Первичная инициализация регистров
;===============
START              movlw       b'11000000'         ; разрешение глобального прерывания 
                   movwf       IntCon              ; и прерывание от перефирийных модулей.
;----------------------------------------------------
; Настройка выводов порта А, B, C.
;----------------------------------------------------
                   bcf         Status,RP0          ;  банк - 0
                   bcf         Status,RP1          ;  банк - 0
                   clrf        PortA               ; сброс порта А
                   clrf        PortB               ; сброс порта B
                   clrf        PortC               ; сброс порта B

                   bsf         Status,RP0          ; банк - 1

                   movlw       b'10000000'         ;  
                   movwf       OptionR             ;

                   movlw       b'00000111'         ; выводы 0,1,2 порта А
                   movwf       TrisA               ; настроены на вход.
                   clrf        TrisB               ; порт В настроен на выход
                   clrf        TrisC               ; порт C настроен на выход
                   bcf         Status,RP0          ; банк - 0
;----------------------------------------------------



;----------------------------------------------------
; Настройка TMR1
;----------------------------------------------------
                   bsf         Status,RP0          ;  банк - 1
                   movlw       B'00000001'         ; Разрешение прерывания 
                   movwf       PIE1                ; по переполнению TMR1
                   bcf         Status,RP0          ; банк - 0
;---------------------------------------------------
                   movlw       0xEF                ; предустановка старшего
                   movwf       TMR1H               ; регистра таймера TMR1

                   movlw       0xC1                ;  предустановка младшего
                   movwf       TMR1L               ; регистра таймера TMR1
;---------------------------------------------------
                   movlw       b'00000001'         ;
                   movwf       T1CON               ;
 ;---------------------------------------------------



                   goto        $                   ; рабочая часть программы
                                                   ; здесь программа может делать чёта.




;=================
                   end
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Реклама
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

Сброс и установка бита получились, но я не понял логику. Там где прога, я написал, например:

Код: Выделить всё

m1:
					btfsc IntCon,2
					goto			m2      
					goto			m1                   ; рабочая часть программы
m2:
Когда приходит черед команды goto m2, происходит супердолгий автоматический цикл (просто на этой команде в регистре W начинаются пробежки цифр и тп). Может быть, это как-то связано с прерыванием, но дебагер меня туда не тащит.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Реклама
Аватара пользователя
БАТАРЕЙКУС
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб фев 07, 2009 19:21:25

Re: Работа по прерыванию

Сообщение БАТАРЕЙКУС »

kras писал(а):Сброс и установка бита получились, но я не понял логику. Там где прога, я написал, например:

Код: Выделить всё

m1:
					btfsc IntCon,2
					goto			m2      
					goto			m1                   ; рабочая часть программы
m2:
Когда приходит черед команды goto m2, происходит супердолгий автоматический цикл (просто на этой команде в регистре W начинаются пробежки цифр и тп). Может быть, это как-то связано с прерыванием, но дебагер меня туда не тащит.
этот код бредовый когда выполняется команда goto m1 то переход осуществится в вашем случае к строчке btfsc IntCon,2
а при исполнении кода goto m2 по вашему куда должна прыгнуть программа ведь за каракулей m2нечего не стоит, вот программа и выёживается как может, я подозреваю что переход осуществляется в начала памяти программ
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

Тогда не понял про прерывания. Мне нужно минимум команд в самой программе, а счет таймера должен быть зациклен в теле этой программы. Нужно генерировать меандр.

Код: Выделить всё

m1:
					btfsc IntCon,2
					goto			$      
					goto			m1
Вот так просто циклится на $. Ну я просто и не могу найти, что такое $. А в другом случае сильно долго перезагруз идет, а короче у меня не получается (если установить метку m2 перед "обработкой прерываний").
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
alex_p_82
Встал на лапы
Сообщения: 86
Зарегистрирован: Ср сен 09, 2009 11:27:29
Откуда: Украина

Re: Работа по прерыванию

Сообщение alex_p_82 »

kras писал(а): Вот так просто циклится на $.
Так и должно быть. Вместо $ пишется название метки
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

Что-то мне еще ошибок дофига понаписало при выполнении операций с регистрами
Вложения
11.jpg
(89.58 КБ) 419 скачиваний
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Аватара пользователя
БАТАРЕЙКУС
Потрогал лапой паяльник
Сообщения: 347
Зарегистрирован: Сб фев 07, 2009 19:21:25

Re: Работа по прерыванию

Сообщение БАТАРЕЙКУС »

kras писал(а):Тогда не понял про прерывания. Мне нужно минимум команд в самой программе, а счет таймера должен быть зациклен в теле этой программы. Нужно генерировать меандр.
а что в прерываниях непонятно? в програмее идёт инициализация таймера TMR1 и от вызывает прерывания.
комант здесь минимум.
а на счёт ошибок даж незнаю мож в создании проекто какаят ошибка.
Мечтатель - не тот, кто сидит на диване и думает о несбыточном, а тот, кто всеми силами стремится воплотить несбыточное в реальность.
Аватара пользователя
Аlex
Модератор
Сообщения: 4614
Зарегистрирован: Чт мар 18, 2010 23:09:57
Откуда: Планета Земля
Контактная информация:

Re: Работа по прерыванию

Сообщение Аlex »

kras писал(а):Что-то мне еще ошибок дофига понаписало при выполнении операций с регистрами
Покажите весь код. Мы не экстрасенсы... :roll:
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

Код: Выделить всё

 LIST        p=16F630 
                   __CONFIG    H'3C4'              ; H'3C4'
;=====================
; REGISTRI CPECIALNOGO NAZNA4ENIJA.
;=====================
Indf               equ         00h                 ;
Tmr0               equ         01h                 ;
OptionR            equ         81h                 ; 
PC                 equ         02h                 ;
Status             equ         03h                 ;
FSR                equ         04h                 ;
PortA              equ         05h                 ;
TrisA              equ         85h                 ;
PortB              equ         06h                 ; 
TrisB              equ         86h                 ;
PortC              equ         07h                 ;
TrisC              equ         87h                 ;

PCLATH             equ         0Ah                 ;
IntCon             equ         0Bh                 ;
PIR1               equ         0Ch                 ;
PIE1               equ         8Ch                 ;
TMR1L              equ         0Eh                 ;
TMR1H              equ         0Fh                 ;
T1CON              equ         10h                 ;

Temp_Status        equ         72h                 ;
Temp_W             equ         73h                 ;
;=====================

;=====================
RP0                equ         5                   ;
RP1                equ         6                   ;
;+++++++++++++++++++++++++++++++++++++++++++++++++++


;=====================
                   org         0                   ; 
                   goto        START               ; 
;*********************************************************************************************

;=====================
;            Обработка прерываний                       
;=====================
                   org         4                   ;     
;=====================
;               ОБРАБОТКА ПРЕРЫВАНИЙ
m2
					movlw       b'00111111'         ;
                   	movwf       PortC
;=====================
                   movwf       Temp_W              ; сохранение данных аккумулятора

                   swapf       Status,W            ; сохранение данных 
                   clrf        Status              ; выбор банка 0
                   movwf       Temp_Status         ; регистра Status
;===============
                   clrf        PIR1                ; сброс флага вызвовшего прерывание

                   movlw       0xEF                ; запись данных в старший
                   movwf       TMR1H               ; регистр таймера TMR1 

                   movlw       0xC1                ; запись данных в младший
                   movwf       TMR1L               ; регистр таймера TMR1 
;===============
                   swapf       Temp_Status,W       ; регистра Status
                   movwf       Status              ; сохранение данных 

                   swapf       Temp_W,F            ; сохранение данных аккумулятора
                   swapf       Temp_W,W            ;
;----------------------------------------------------

                   retfie                          ; выход из прерывания

;===============

;===============
; Первичная инициализация регистров
;===============
START              movlw       b'11000000'         ; разрешение глобального прерывания 
                   movwf       IntCon              ; и прерывание от перефирийных модулей.
;----------------------------------------------------
; Настройка выводов порта А, B, C.
;----------------------------------------------------
                   bcf         Status,RP0          ;  банк - 0
                   bcf         Status,RP1          ;  банк - 0
                   clrf        PortA               ; сброс порта А
                   clrf        PortB               ; сброс порта B
                   clrf        PortC               ; сброс порта B

                   bsf         Status,RP0          ; банк - 1

                   movlw       b'10000000'         ;  
                   movwf       OptionR             ;

                   movlw       b'00000111'         ; выводы 0,1,2 порта А
                   movwf       TrisA               ; настроены на вход.
                   clrf        TrisB               ; порт В настроен на выход
                   clrf        TrisC               ; порт C настроен на выход
                   bcf         Status,RP0          ; банк - 0
;----------------------------------------------------



;----------------------------------------------------
; Настройка TMR1
;----------------------------------------------------
                   bsf         Status,RP0          ;  банк - 1
                   movlw       B'00000001'         ; Разрешение прерывания 
                   movwf       PIE1                ; по переполнению TMR1
                   bcf         Status,RP0          ; банк - 0
;---------------------------------------------------
                   movlw       0xEF                ; предустановка старшего
                   movwf       TMR1H               ; регистра таймера TMR1

                   movlw       0xC1                ;  предустановка младшего
                   movwf       TMR1L               ; регистра таймера TMR1
;---------------------------------------------------
                   movlw       b'00000001'         ;
                   movwf       T1CON               ;
;---------------------------------------------------
m1:					movlw       b'00111111'         ;
                   	movwf       PortC
					btfsc IntCon,2
					goto			m2      
					goto			m1                   ; рабочая часть программы



;=================
                   end
Поставил только две метки и 5 команд перед end, предложенный пример здесь больше не менял. Вот мне сейчас надо сгенерировать меандр таким способом.
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

Ну это одно, а я еще не могу найти, как сделать несколько прерываний. То есть первое = org 4 -> retfie. А второе?
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Re: Работа по прерыванию

Сообщение TripleKill »

Нету там второго.
В даташите описано:

When an interrupt is serviced:
• The GIE is cleared to disable any further interrupt
• The return address is pushed onto the stack
• The PC is loaded with 0004h

Once in the Interrupt Service Routine, the source(s) of
the interrupt can be determined by polling the interrupt
flag bits.

Вид прерывания определяется по флагам, а вектор у него всегда один - 0004h.
Можно вот такую схему предложить:
Изображение
Код обработки можно расположить в любом месте, но вызываться он будет всё равно из кода под 0004h

P.S. По поводу вашего кода. Как-то неправильно это - вызывать прерывание самостоятельно из основного кода. По идее, если всё правильно настроено, оно должно само срабатывать при подходящих условиях. Знающие люди, поправьте, если ошибаюсь, давно на асме не писал.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

А сори, я новый код просто не писал. При разрешенных прерываниях последнее вызывается автоматически, сэтим все норм. Меандр тоже получается сгенерировать, но теперь думаю, как оптимальнее. С прерыванием тут не очень хорошо получается, потому что в таком коде оно может произойти не на том месте, в результате чего сигнал колеблется:

Код: Выделить всё

 LIST        p=16F630 
                   __CONFIG    H'3C4'              ; H'3C4'
;=====================
; REGISTRI CPECIALNOGO NAZNA4ENIJA.
;=====================
Indf               equ         00h                 ;
Tmr0               equ         01h                 ;
OptionR            equ         81h                 ; 
PC                 equ         02h                 ;
Status             equ         03h                 ;
FSR                equ         04h                 ;
PortA              equ         05h                 ;
TrisA              equ         85h                 ;
PortB              equ         06h                 ; 
TrisB              equ         86h                 ;
PortC              equ         07h                 ;
TrisC              equ         87h                 ;

PCLATH             equ         0Ah                 ;
IntCon             equ         0Bh                 ;
PIR1               equ         0Ch                 ;
PIE1               equ         8Ch                 ;
TMR1L              equ         0Eh                 ;
TMR1H              equ         0Fh                 ;
T1CON              equ         10h                 ;
va	               equ         20h                 ;
freql			   equ		   30h				   ;
freqh			   equ		   40h				   ;
sa				   equ		   50h

Temp_Status        equ         72h                 ;
Temp_W             equ         73h                 ;
;=====================

;=====================
RP0                equ         5                   ;
RP1                equ         6                   ;
;+++++++++++++++++++++++++++++++++++++++++++++++++++


;=====================
                   org         0                   ; 
                   goto        START               ; 
;*********************************************************************************************

;=====================
;            Обработка прерываний                       
;=====================
	org         4                   ;     
;=====================

;----------------------------------------------------
;               ОБРАБОТКА ПРЕРЫВАНИЙ		
;=====================
					INCFSZ freqh, 1
					btfsc va,2
					goto	m5
					goto	m4
m4:				movlw	b'11111111'
				movwf	va
					movlw       b'11000000'         ; разрешение глобального прерывания 
					movwf       IntCon
					clrf        PIR1                ; сброс флага вызвовшего прерывание
					movf		   freqh,0                
				    movwf       TMR1H 
					movf		   freql,0                ;  предустановка младшего
				    movwf       TMR1L
	retfie
m5:					movlw	b'00000000'
					movwf	va
					movlw       b'11000000'         ; разрешение глобального прерывания 
					movwf       IntCon
					clrf        PIR1                ; сброс флага вызвовшего прерывание
					movf		   freqh,0                
				    movwf       TMR1H 
					movf		   freql,0                ;  предустановка младшего
				    movwf       TMR1L
	retfie 

;===============
; Первичная инициализация регистров
;===============
START              movlw       b'11000000'         ; разрешение глобального прерывания 
                   movwf       IntCon              ; и прерывание от перефирийных модулей.

				   movlw       b'10000000'         ;  
                   movwf       OptionR             ;

;----------------------------------------------------
; Настройка выводов порта А, B, C.
;----------------------------------------------------
                   bcf         Status,RP0          ;  банк - 0
                   bcf         Status,RP1          ;  банк - 0
                   clrf        PortA               ; сброс порта А
                   clrf        PortB               ; сброс порта B
                   clrf        PortC               ; сброс порта B

                   bsf         Status,RP0          ; банк - 1

                   
                   movlw       b'00000111'         ; выводы 0,1,2 порта А
                   movwf       TrisA               ; настроены на вход.
                   clrf        TrisB               ; порт В настроен на выход
                   clrf        TrisC               ; порт C настроен на выход
                   bcf         Status,RP0          ; банк - 0

;----------------------------------------------------
; Настройка TMR1
;----------------------------------------------------
                   bsf         Status,RP0          ;  банк - 1
                   movlw       B'00000001'         ; Разрешение прерывания 
                   movwf       PIE1                ; по переполнению TMR1
                   bcf         Status,RP0          ; банк - 0
;---------------------------------------------------
movlw	b'00000000'
movwf	freql
movlw	b'11000000'
movwf	freqh
                   movf		   freqh,0                
				   movwf       TMR1H
                   movf		   freql,0                ;  предустановка младшего
				   movwf       TMR1L
;---------------------------------------------------
                   movlw       b'00000001'         ;
                   movwf       T1CON               ;
;---------------------------------------------------

m1:					btfsc va,2
					goto	m2
					goto	m3
m2:					movlw       b'00111111'
					movwf       PortC   
					goto			m1
m3:         		movlw       b'00000000'
					movwf       PortC   
					goto			m1          




;=================
                   end
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
TripleKill
Вымогатель припоя
Сообщения: 671
Зарегистрирован: Вт июн 29, 2010 12:31:49

Re: Работа по прерыванию

Сообщение TripleKill »

Если нужно просто генерировать меандр, то можно обойтись и без прерываний, используя программную задержку (вложенные DECFSZ/INCFSZ). Нужно только жёстко просчитать, сколько циклов занимают все операции (впрочем, с прерыванием это тоже нужно, если хотите получить соответствие ожиданиям).

Хотите ещё проще - можно взять тот же самый mikroC, которым я грешу :) , там так и вообще временнАя задержка выглядит как delay_ms(х) (х миллисекунд) или delay_us(х) (х микросекунд, если тактовая частота камня позволяет это сделать). Примеры там тоже есть.
kras
Опытный кот
Сообщения: 782
Зарегистрирован: Вт апр 26, 2011 18:37:06

Re: Работа по прерыванию

Сообщение kras »

Так надо попробовать microC:)
На практике можно не успеть сделать того, что можно хорошо обосновать в теории. Но без практики теория может отдаляться от нее, и когда они встретятся снова - не узнает даже неприкосновенное шампанское профессора в лаборатории. Моя практика: robofeya.ru
Закрыто

Вернуться в «Микроконтроллеры и ПЛИС»