Re: Пропорциональное управление на МК (Знание=Сила)
Добавлено: Вс сен 02, 2012 14:00:15
все систему запустил, на борту имеется понипрог, протеус и авр студио 5
что делать теперь?
что делать теперь?
Здесь можно немножко помяукать :)
https://radiokot.ru/forum/
это я делать не умею покаВитГо писал(а):p.s. чтобы проверить что мега от внутреннего генератора работает (или ты уже внешний генератор фюзами включил ?)
Код: Выделить всё
/*
* Proba2.asm
*
* Created: 28.08.2012 12:11:36
* Author: UWRTEY
*/
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25
.dseg ;оперативка
key_buff: .byte 5 ; зарезервируем 5 байт в ОЗУ
;******************************************************************************
;******************************************************************************
.cseg
.org 0
; СТАРТ
rjmp RESET ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
.org INT0addr; = 0x0001 ; External Interrupt Request 0
reti
.org INT1addr; = 0x0002 ; External Interrupt Request 1
reti
.org ICP1addr; = 0x0003 ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr; = 0x0004 ; Timer/Counter1 Compare Match A/////////////////////////
rjmp TIM1_COMPA
.org OVF1addr; = 0x0005 ; Timer/Counter1 Overflow
reti
.org OVF0addr; = 0x0006 ; Timer/Counter0 Overflow
reti
.org URXCaddr; = 0x0007 ; USART, Rx Complete
reti
.org UDREaddr; = 0x0008 ; USART Data Register Empty
reti
.org UTXCaddr; = 0x0009 ; USART, Tx Complete
reti
.org ACIaddr; = 0x000a ; Analog Comparator
reti
.org PCIBaddr; = 0x000b ; Pin Change Interrupt Request B
reti
.org OC1Baddr; = 0x000c ;
reti
.org OC0Aaddr; = 0x000d ;
reti
.org OC0Baddr; = 0x000e ;
reti
.org USI_STARTaddr; = 0x000f ; USI Start Condition
reti
.org USI_OVFaddr; = 0x0010 ; USI Overflow
reti
.org ERDYaddr; = 0x0011 ;
reti
.org WDTaddr; = 0x0012 ; Watchdog Timer Overflow
reti
.org PCIAaddr; = 0x0013 ; Pin Change Interrupt Request A
reti
.org PCIDaddr; = 0x0014 ; Pin Change Interrupt Request D
reti
;******************************************************************************
;******************************************************************************
;старт
;******************************************************************************
reset: ; включение микроконтроллера
cli ; глобальный запрет на прерывания
ldi Temp,low(RamEnd) ; инициализации стека
out SPL,Temp ;
ldi Temp,0b00000100 ;
out DDRB,Temp ; настроили порт "В" (0-ввод, 1-вывод)
; 00000х00 - "вывод" на передатчик (PB3- 15 ножка)
; хххх0000 - "ввод" для чтения строк клавиатуры
ldi Temp,0b00001111 ;
out DDRD,Temp ; настраиваем порт "D" (0-ввод, 1-вывод)
; 0000хххх - на вывод столбцов клавы
ldi Temp,(1<<COM1A0) ;переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
out TCCR1A,Temp ;*1
ldi Temp,(1<<wgm12)|(1<<cs10) ;подключили режим "CTC" (вместе с *1) и установили тактовый сигнал = CK (1:1)
out TCCR1B,Temp ; таймер начал считать!!!
; инициализация компаратора
ldi Temp,0xC ; 3кГц, 1/3000=0,00033сек=330мкс, 330/2=165мкс длительность импульса или паузы(время-Т)
out OCR1AH,Temp ; 0,05мкс*65535=3276,75 3276,75>165 --- по этому не будем делить тактовую частоту (СК)
ldi Temp,0xE4 ; 165мкс/0,05мкс=3300 тиков таймера 3300=CE4(hex)
out OCR1AL,Temp ; если 6600=19C8(hex)
ldi Temp,(1<<OCIE1A) ; разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0 ; обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp
sei ; глобальное разрешение прерываний
ldi Temp,0b00000100 ; выводим в порт "Б" на "OC1A" импульс
out PortB,Temp
;*******************************************************************************
; главный цикл
;*******************************************************************************
main cycle:
rjmp main cycle
;*******************************************************************************
;обработка прерывания
;*******************************************************************************
TIM1_COMPA:
reti ; ( выход )ни чего обрабатывать не нужно
; включен режим CTC
; обнуление таймера происходит автоматически
; "OC1A" меняет свое логическое состояние автоматически
;*******************************************************************************
Код: Выделить всё
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25
.dseg ;оперативка
key_buff: .byte 5 ; зарезервируем 5 байт в ОЗУ
;******************************************************************************
;******************************************************************************
.cseg
.org 0
; СТАРТ
rjmp RESET ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
.org INT0addr; = 0x0001 ; External Interrupt Request 0
reti
.org INT1addr; = 0x0002 ; External Interrupt Request 1
reti
.org ICP1addr; = 0x0003 ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr; = 0x0004 ; Timer/Counter1 Compare Match A/////////////////////////
reti
.org OVF1addr; = 0x0005 ; Timer/Counter1 Overflow
reti
.org OVF0addr; = 0x0006 ; Timer/Counter0 Overflow
reti
.org URXCaddr; = 0x0007 ; USART, Rx Complete
reti
.org UDREaddr; = 0x0008 ; USART Data Register Empty
reti
.org UTXCaddr; = 0x0009 ; USART, Tx Complete
reti
.org ACIaddr; = 0x000a ; Analog Comparator
reti
.org PCIBaddr; = 0x000b ; Pin Change Interrupt Request B
reti
.org OC1Baddr; = 0x000c ;
reti
.org OC0Aaddr; = 0x000d ;
reti
.org OC0Baddr; = 0x000e ;
reti
.org USI_STARTaddr; = 0x000f ; USI Start Condition
reti
.org USI_OVFaddr; = 0x0010 ; USI Overflow
reti
.org ERDYaddr; = 0x0011 ;
reti
.org WDTaddr; = 0x0012 ; Watchdog Timer Overflow
reti
.org PCIAaddr; = 0x0013 ; Pin Change Interrupt Request A
reti
.org PCIDaddr; = 0x0014 ; Pin Change Interrupt Request D
reti
;******************************************************************************
;******************************************************************************
;старт
;******************************************************************************
reset: ; включение микроконтроллера
cli ; глобальный запрет на прерывания
ldi Temp,0b00001000 ; (вот тут косяк был)
out DDRB,Temp ; настроили порт "В" (0-ввод, 1-вывод)
; 0000х000 - "вывод" на передатчик (PB3- 15 ножка)
; хххх0000 - "ввод" для чтения строк клавиатуры
ldi Temp,0b00001111 ;
out DDRD,Temp ; настраиваем порт "D" (0-ввод, 1-вывод)
; 0000хххх - на вывод столбцов клавы
ldi Temp,0b00001000 ; выводим в порт "Б" на "OC1A" импульс (вот тут косяк был)
out PortB,Temp
;*******************************************************************************
; главный цикл
;*******************************************************************************
main cycle:
rjmp main cycle
Код: Выделить всё
.def Temp=R16
.def Temp1=R17
.def Temp2=R18
.def Temp3=R19
.def Temp4=R20
.def Temp5=R21
.def Temp6=R22
.def Temp7=R23
.def Temp8=R24
.def Temp9=R25
.dseg ;оперативка
key_buff: .byte 5 ; зарезервируем 5 байт в ОЗУ
;******************************************************************************
;******************************************************************************
.cseg
.org 0
; СТАРТ
rjmp RESET ; External Pin, Power-on Reset, Brown-out Reset, and Watchdog Reset
.org INT0addr; = 0x0001 ; External Interrupt Request 0
reti
.org INT1addr; = 0x0002 ; External Interrupt Request 1
reti
.org ICP1addr; = 0x0003 ; Timer/Counter1 Capture Event
reti
.org OC1Aaddr; = 0x0004 ; Timer/Counter1 Compare Match A/////////////////////////
rjmp TIM1_COMPA
.org OVF1addr; = 0x0005 ; Timer/Counter1 Overflow
reti
.org OVF0addr; = 0x0006 ; Timer/Counter0 Overflow
reti
.org URXCaddr; = 0x0007 ; USART, Rx Complete
reti
.org UDREaddr; = 0x0008 ; USART Data Register Empty
reti
.org UTXCaddr; = 0x0009 ; USART, Tx Complete
reti
.org ACIaddr; = 0x000a ; Analog Comparator
reti
.org PCIBaddr; = 0x000b ; Pin Change Interrupt Request B
reti
.org OC1Baddr; = 0x000c ;
reti
.org OC0Aaddr; = 0x000d ;
reti
.org OC0Baddr; = 0x000e ;
reti
.org USI_STARTaddr; = 0x000f ; USI Start Condition
reti
.org USI_OVFaddr; = 0x0010 ; USI Overflow
reti
.org ERDYaddr; = 0x0011 ;
reti
.org WDTaddr; = 0x0012 ; Watchdog Timer Overflow
reti
.org PCIAaddr; = 0x0013 ; Pin Change Interrupt Request A
reti
.org PCIDaddr; = 0x0014 ; Pin Change Interrupt Request D
reti
;******************************************************************************
;******************************************************************************
;старт
;******************************************************************************
reset: ; включение микроконтроллера
cli ; глобальный запрет на прерывания
ldi Temp,low(RamEnd) ; инициализации стека
out SPL,Temp ;
ldi Temp,0b00001000 ;
out DDRB,Temp ; настроили порт "В" (0-ввод, 1-вывод)
; 0000х000 - "вывод" на передатчик (PB3- 15 ножка)
; хххх0000 - "ввод" для чтения строк клавиатуры
ldi Temp,0b00001111 ;
out DDRD,Temp ; настраиваем порт "D" (0-ввод, 1-вывод)
; 0000хххх - на вывод столбцов клавы
ldi Temp,(1<<COM1A0) ;переключать ножку "OC1A" по совпадению (PB3- 15 ножка)
out TCCR1A,Temp ;*1
ldi Temp,(1<<wgm12)|(1<<cs10) ;подключили режим "CTC" (вместе с *1) и установили тактовый сигнал = CK (1:1)
out TCCR1B,Temp ; таймер начал считать!!!
; инициализация компаратора
ldi Temp,0xFF ; как и просил -побольше ( 0xFFFF )
out OCR1AH,Temp ;
ldi Temp,0xFF ;
out OCR1AL,Temp ;
ldi Temp,(1<<OCIE1A) ; разрешить прерывание компаратора
out TIMSK,Temp
ldi Temp,0 ; обнуление таймера при включении
out TCNT1H,Temp
out TCNT1L,Temp
sei ; глобальное разрешение прерываний
ldi Temp,0b00001000 ; выводим в порт "Б" на "OC1A" импульс
out PortB,Temp
;*******************************************************************************
; главный цикл
;*******************************************************************************
main_cycle:
rjmp main_cycle
;*******************************************************************************
;обработка прерывания
;*******************************************************************************
TIM1_COMPA:
reti ; ( выход )ни чего обрабатывать не нужно
; включен режим CTC
; обнуление таймера происходит автоматически
; "OC1A" меняет свое логическое состояние автоматически
;*******************************************************************************