Технический форум
Вернуться   Технический форум > Электроника, самоделки и техника > Форум по электронике > Микропроцессоры


Ответ
 
Опции темы Опции просмотра
Старый 07.06.2012, 11:03   #11 (permalink)
Ильмир
МАГистр
 
Аватар для Ильмир
 
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
По умолчанию

ты программу для CodeVisionAVR писал? в разных программах синтаксис немного отличается, поэтому при компиляции могут возникнуть ошибки
в CodeVisionAVR необходимо создать проект для Mega16, появится проект с текстом программы, потом сгенерированный код можно заменить на свой
Ильмир вне форума   Ответить с цитированием

Старый 07.06.2012, 11:03
Helpmaster
Member
 
Аватар для Helpmaster
 
Регистрация: 08.03.2016
Сообщений: 0

Если проблема еще не решена, можете обратиться к похожим темам

ATmega16 и DS1820

Старый 13.06.2012, 22:05   #12 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Цитата:
Сообщение от Ильмир Посмотреть сообщение
ты программу для CodeVisionAVR писал? в разных программах синтаксис немного отличается, поэтому при компиляции могут возникнуть ошибки
в CodeVisionAVR необходимо создать проект для Mega16, появится проект с текстом программы, потом сгенерированный код можно заменить на свой
Ильмир, можно в картинках если не затруднит?
News вне форума   Ответить с цитированием
Старый 14.06.2012, 13:47   #13 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Помогите получить ХЕКС файл.
Исходный код.
Цитата:
#include <mega16.h>
Inicializacion()
{
//Делаем выходом ПОРТ А
DDRA=255;
//Делаем входом ПОРТ В
DDRB=0;
}
Main()
{
Inicializacion();
//Запускаем таймер 0 (Время переполнения 32МСЕК)
TCCR0=0b00000101;
while(TOV0){PORTA.0=0; PORTA.2=0; PORTA.4=0; PORTA.6=0; PORTA.1=1; PORTA.3=1; PORTA.5=1; PORTA.7=1; TIFR = 0x01;}
//Запускаем таймер 0 (Время переполнения 32МСЕК)
TCCR0=0b00000101;
while(TOV0){PORTA^=1; PORTA^=0; TIFR = 0x01;}
}
News вне форума   Ответить с цитированием
Старый 14.06.2012, 15:46   #14 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Все. Разобрался.
Программа нифига не работает (Наверное в адресах накосячил)
News вне форума   Ответить с цитированием
Старый 14.06.2012, 22:07   #15 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Цитата:
#include <mega16.h>
main()
{
//Инициализируем ПОРТ А как выход.
DDRA=225;
//Запускаем 8 Битный таймер с коэф. деления 1024, тем самым получая 3.8 переполнений в секунду или каждые 263М сек
TCCR0 = 0b00000101;
//Если бит 0 в регистре TIFR (Переполнение таймера) равен 0, то уровень на ноге 0 ПОРА А - высокий.
//Иначе (Если бит равен 1) условие в цыкле While преобретае положительное значение и обрывается.
while(!(TIFR=0b00000001)){PORTA.0=1;}
//Обнуляем бит О в регистре TIFR путем его перезаписи.
TIFR=0b00000001;
//Обнуляем состояние ноги 0 ПОРА А.
PORTA.0=0;
//Аналогично, но теперь 0 нога ПОРТА А теперь равна 0.
while(!(TIFR=0b00000001)){PORTA.0=0;}
//Обнуляем бит О в регистре TIFR путем его перезаписи.
TIFR=0b00000001;
//Программа подошла к концу и перезагружается.
}
Взгляните. Светодиод на ноге 1 ПОРТА А постоянно горит, хотя "Зацыкливания" эмулятор не показывает...
ieaaeea.jpg

Тест.zip
ПС: Заменил в условиях цикла = на &. Та-же фигня, но теперь на обработку цикла требуется больше времени.

Последний раз редактировалось News; 14.06.2012 в 22:14
News вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Старый 14.06.2012, 22:38   #16 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

На Ассемблере.
Цитата:
;#include <mega16.h>
#ifndef __SLEEP_DEFINED__
#define __SLEEP_DEFINED__
.EQU __se_bit=0x40
.EQU __sm_mask=0xB0
.EQU __sm_powerdown=0x20
.EQU __sm_powersave=0x30
.EQU __sm_standby=0xA0
.EQU __sm_ext_standby=0xB0
.EQU __sm_adc_noise_red=0x10
.SET power_ctrl_reg=mcucr
#endif
;main()
; 0000 0003 {

.CSEG
_main:
; .FSTART _main
; 0000 0004 //Инициализируем ПОРТ А как выход.
; 0000 0005 DDRA=225;
LDI R30,LOW(225)
OUT 0x1A,R30
; 0000 0006 //Запускаем 8 Битный таймер с коэф. деления 1024, тем самым получая 3.8 переполнений в секунду или каждые 263М сек
; 0000 0007 TCCR0 = 0b00000101;
LDI R30,LOW(5)
OUT 0x33,R30
; 0000 0008 //Если бит 0 в регистре TIFR (Переполнение таймера) равен 0, то уровень на ноге 0 ПОРА А - высокий.
; 0000 0009 //Иначе (Если бит равен 1) условие в цыкле While преобретае положительное значение и обрывается.
; 0000 000A while(!(TIFR&0b00000001)){PORTA.0=1;}
_0x3:
IN R30,0x38
ANDI R30,LOW(0x1)
BRNE _0x5
SBI 0x1B,0
RJMP _0x3
_0x5:
; 0000 000B //Обнуляем бит О в регистре TIFR путем его перезаписи.
; 0000 000C TIFR=0b00000001;
LDI R30,LOW(1)
OUT 0x38,R30
; 0000 000D //Обнуляем состояние ноги 0 ПОРА А.
; 0000 000E PORTA.0=0;
CBI 0x1B,0
; 0000 000F //Аналогично, но теперь 0 нога ПОРТА А теперь равна 0.
; 0000 0010 while(!(TIFR&0b00000001)){PORTA.0=0;}
_0xA:
IN R30,0x38
ANDI R30,LOW(0x1)
BRNE _0xC
CBI 0x1B,0
RJMP _0xA
_0xC:
; 0000 0011 //Обнуляем бит О в регистре TIFR путем его перезаписи.
; 0000 0012 TIFR=0b00000001;
LDI R30,LOW(1)
OUT 0x38,R30
; 0000 0013 //Программа подошла к концу и перезагружается.
; 0000 0014 }
_0xF:
RJMP _0xF
; .FEND

.CSEG

.CSEG
;END OF CODE MARKER
__END_OF_CODE:
News вне форума   Ответить с цитированием
Старый 14.06.2012, 22:59   #17 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Видимо в симуляторе баг.
Миниатюры
neioeyoidh.jpg  
News вне форума   Ответить с цитированием
Старый 15.06.2012, 13:42   #18 (permalink)
Ильмир
МАГистр
 
Аватар для Ильмир
 
Регистрация: 11.07.2010
Сообщений: 2,196
Записей в дневнике: 9
Сказал(а) спасибо: 0
Поблагодарили 10 раз(а) в 2 сообщениях
Репутация: 2976
По умолчанию

Цитата:
Сообщение от News Посмотреть сообщение
Ильмир, можно в картинках если не затруднит?
разобрался с CVAVR ?
Ильмир вне форума   Ответить с цитированием
Старый 15.06.2012, 13:49   #19 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Цитата:
Сообщение от Ильмир Посмотреть сообщение
разобрался с CVAVR ?
Да. Все работает уже.
News вне форума   Ответить с цитированием
Старый 15.06.2012, 22:14   #20 (permalink)
News
Собираю Саб
 
Аватар для News
 
Регистрация: 12.04.2011
Сообщений: 1,611
Записей в дневнике: 1
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 524
По умолчанию

Поздравте меня! Все работает!
Вод только CVAVR накосячил и неправильно перевел на ассемблер код - поэтому задействованы ноги PA7, PA6, PA5.
Код с комментариями.
Цитата:
#include <mega16.h>
main()
{
//Инициализируем ПОРТ А как выход.
DDRA=225;
//Запускаем 8 Битный таймер с коэф. деления 1024, тем самым получая 3.8 переполнений в секунду или каждые 263М сек
TCCR0 = 0b00000101;
//Если бит 0 в регистре TIFR (Переполнение таймера) равен 0, то уровень на ноге 0 ПОРА А - высокий.
//Иначе (Если бит равен 1) условие в цыкле While преобретае положительное значение и обрывается.
while(!(TIFR&0b00000001)){PORTA.0=1;}
//Обнуляем бит О в регистре TIFR путем его перезаписи.
TIFR |=1<<0;
//Обнуляем состояние ноги 0 ПОРА А.
PORTA.0=0;
//Аналогично, но теперь 0 нога ПОРТА А теперь равна 0.
while(!(TIFR&0b00000001)){PORTA.0=0;}
//Обнуляем бит О в регистре TIFR путем его перезаписи.
TIFR |=1<<0;
//Программа подошла к концу и перезагружается.
}
И скрин
Миниатюры
ieaaeea.jpg  
News вне форума   Ответить с цитированием
Ads

Яндекс

Member
 
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Выкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.




Часовой пояс GMT +4, время: 00:08.

Powered by vBulletin® Version 6.2.5.
Copyright ©2000 - 2014, Jelsoft Enterprises Ltd.