АвторСообщение
постоянный участник




Пост N: 102
Зарегистрирован: 26.12.06
Откуда: Санкт-Ленинград
Рейтинг: 0
ссылка на сообщение  Отправлено: 14.01.07 13:13. Заголовок: CCS PICC


Если кто не в курсе, это - компилятор для C (Си).
Сам сабж здесь: хттп://up-file.com/download/039ac98331/CCSPCWHv4020.rar.html
А вот здесь народ собирается его "брать мозговым штурмом".

Obligatus Servus Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 44 , стр: 1 2 All [только новые]





Пост N: 16
Зарегистрирован: 10.02.08
Рейтинг: 0
ссылка на сообщение  Отправлено: 15.02.08 23:54. Заголовок: А здесь вы не собира..


А здесь вы не собираетесь переходить на С ?
Есть весьма плодотворный опыт ( 3 года).

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 907
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 3
ссылка на сообщение  Отправлено: 16.10.08 18:11. Заголовок: dosikus пишет: Есть..


dosikus пишет:

 цитата:
Есть весьма плодотворный опыт

А есть инфа на русском?

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 497
Зарегистрирован: 14.01.07
Откуда: Россия, Лиски
Рейтинг: 1
ссылка на сообщение  Отправлено: 16.10.08 19:25. Заголовок: Буквально сегодня, с..


Буквально сегодня, скачал книгу. Называется примерно так:" С для PIC и AVR".

В радиотехнике, существует два вида неисправностей-есть контакт там, где его не должно быть никогда и, нет контакта там, где он должен быть постоянно. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 908
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 3
ссылка на сообщение  Отправлено: 16.10.08 19:51. Заголовок: igor пишет: Букваль..


igor пишет:

 цитата:
Буквально сегодня, скачал книгу.

А откуда если не секрет.
PS.
Начал было с USB разбиратся, а большенство примеров на Си...

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 498
Зарегистрирован: 14.01.07
Откуда: Россия, Лиски
Рейтинг: 1
ссылка на сообщение  Отправлено: 16.10.08 20:16. Заголовок: На работе качал. Зав..


На работе качал. Завтра, дам ссылку на страницу.

В радиотехнике, существует два вида неисправностей-есть контакт там, где его не должно быть никогда и, нет контакта там, где он должен быть постоянно. Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1037
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 17.10.08 02:19. Заголовок: У меня есть "Про..


У меня есть "Программирование на языке C для AVR и PIC микроконтроллеров" плюс CD с исходниками примеров (немногим меньше 10Мб). Плюс есть CCS PCWH v4.057 + KeyGen (CCS C Compiler) (25Mb) и MicroC v7.0 + Patch (11Mb).
Если интересно, могу скинуть в дополнение к той книге что у Игоря.
Плюс к этому есть MicroBasic v6 и mikroPascal v7 для для PIC12, PIC16 и PIC18.

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 499
Зарегистрирован: 14.01.07
Откуда: Россия, Лиски
Рейтинг: 1
ссылка на сообщение  Отправлено: 17.10.08 07:09. Заголовок: Да, именно такая кни..


Да, именно такая книга. Автор Ю.А.Шпак. здесь

В радиотехнике, существует два вида неисправностей-есть контакт там, где его не должно быть никогда и, нет контакта там, где он должен быть постоянно. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 910
Зарегистрирован: 12.01.07
Откуда: Приднестровье
Рейтинг: 3
ссылка на сообщение  Отправлено: 17.10.08 10:53. Заголовок: Альберто, спасибо, у..


Альберто, спасибо, у меня уже есть CCS PCWH v4.074 (dosikus дал ссылку), сейчас вот разбираюсь.
Есть у меня MicroBasic 5.0.0.2, но мне вообще не нравится размер HEX файла для МК создаваемого с его помощью.
Так ни одного МК не хватит!
Приведу такой пример.
Некоторое время назад, экспериментировал и индикатором на основе HD44780.
Написал две аналогичные программы на ASMе и MicroBasic.
ASM - 50 инструкций
MicroBasic - 590 инструкций


igor пишет:

 цитата:
Да, именно такая книга. Автор Ю.А.Шпак

Спасибо!
Завтра попробую скачать...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник




Пост N: 1038
Зарегистрирован: 12.02.07
Откуда: Argentina, Lincoln
Рейтинг: 3

Награды: Отлично!',
ссылка на сообщение  Отправлено: 18.10.08 00:46. Заголовок: Пётр пишет: ASM - 5..


Пётр пишет:

 цитата:
ASM - 50 инструкций
MicroBasic - 590 инструкций


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

Не ошибается только тот, кто ничего не делает. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 54
Зарегистрирован: 12.02.07
Откуда: Беларусь, Гомель
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.10.08 03:15. Заголовок: Вчера написал програ..


Вчера написал программу ПИ-регулятора на CCS PICC, в ближайшее время опробую в железе (в Proteus отрабатывает правильно), а потом хочу тот же алгоритм реализовать в ассемблере, вот здесь и можно будет сравнить ASM с C. Вообще вопрос ПИД-регулирования для меня оказался одним из самых интересных и самых сложных. Я долго к этому шел, и только сейчас многое прояснилось. Пока попытался реализовать самый простой способ регулирования (без фильтрации, без Д-составляющей). Просто для меня важно быстродействие ситемы. Кому интерсно, могу выслать на мыло рабочий экземпляр.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 55
Зарегистрирован: 12.02.07
Откуда: Беларусь, Гомель
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.10.08 04:16. Заголовок: Вот свежая книга, та..


Вот свежая книга, там ASM и C (не читал, просмотрел оглавление): http://rbook.ucoz.ru/news/2008-10-16-199

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 500
Зарегистрирован: 14.01.07
Откуда: Россия, Лиски
Рейтинг: 1
ссылка на сообщение  Отправлено: 18.10.08 07:56. Заголовок: Deputat пишет: Кому..


Deputat пишет:

 цитата:
Кому интерсно, могу выслать на мыло рабочий экземпляр.


Конечно интересно. Только одна беда - в С, я полный ботаник.

В радиотехнике, существует два вида неисправностей-есть контакт там, где его не должно быть никогда и, нет контакта там, где он должен быть постоянно. Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 56
Зарегистрирован: 12.02.07
Откуда: Беларусь, Гомель
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.10.08 11:13. Заголовок: К вечеру закончу раб..


К вечеру закончу работу над комментариями в программе, тогда и поделюсь со всеми желающими.

igor пишет:

 цитата:
Конечно интересно. Только одна беда - в С, я полный ботаник.



Все намного проще чем кажется. Особенно после ассемблера, на Си писать одно удовольствие. Сам учился по книге Шпака. Так что, дерзайте. В этой книге есть все для того, чтобы самостоятельно начать писать программы на Си.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 19
Зарегистрирован: 02.10.07
Откуда: Россия, Ульяновск
Рейтинг: 0
ссылка на сообщение  Отправлено: 18.04.09 19:12. Заголовок: а вот с какого комп..


а вот с какого компилера лучше начинать: CCS, HI-Tech, MicroC ?
Встраивается ли MicroC в MPLAB ?
Как я понял во всех этих прогах стандарт С не соблюдается, в каждой свои макросы и библиотеки.
Что посоветуют знатоки, чтобы не было потом больно за зря потраченное время.

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 13
Зарегистрирован: 07.04.09
Откуда: Россия, Иваново
Рейтинг: 0
ссылка на сообщение  Отправлено: 21.04.09 12:27. Заголовок: Встраивается ли Micr..



 цитата:
Встраивается ли MicroC в MPLAB ?

Нет.
У него своя среда, он и компилятор и отладчик.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 29
Зарегистрирован: 02.10.07
Откуда: Россия, Ульяновск
Рейтинг: 0
ссылка на сообщение  Отправлено: 04.06.09 15:31. Заголовок: определился с компил..


определился с компилером, понравился MicroC
кто-нибудь пишет в MicroC?
может скинете свои наработки(любые) или примерчики с описанием
пробовал пользовать встроенные, но что-то тяжко пока без привычки
Или может ссылку на самоучитель по MicroC кто даст (ИМЕННО по MicroC)

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 5
Зарегистрирован: 20.11.07
Откуда: Россия, г.Набережные Челны
Рейтинг: 0
ссылка на сообщение  Отправлено: 15.12.09 21:00. Заголовок: akd пишет: определи..


akd пишет:

 цитата:
определился с компилером, понравился MicroC
кто-нибудь пишет в MicroC?
может скинете свои наработки(любые) или примерчики с описанием
пробовал пользовать встроенные, но что-то тяжко пока без привычки
Или может ссылку на самоучитель по MicroC кто даст (ИМЕННО по MicroC)


+1, но "MicroC", читать как "CCS".

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 5
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 21.02.11 01:15. Заголовок: компиляторы


Я пробовал CCS , HI-TECH и могу сказать, что CCS для начала удобнее в понимании, он описан в книге Шпака, там много библиотечных примеров и имеет красивый вид. Но генерируемый код очень корявый, длинный, то есть не эффективный. Для программ с не нормированными функциями времени и при наличии свободного места в памяти, так вполне нормально работает. HI-TECH - этот, при соблюдении правил, генерирует очень приближенный к хорошему asm коду (избыточность процентов 15 - 20). Использование библиотечных функций компиляторов приводит к упрощению написания программы, но избыточность становится большой. В этом МикроС как раз и "приуспел" - он на библиотечных подпрограммах и развился, мол писать просто и удобно. Расплата - в разы длиннее код, за то программа короткая, понятная.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 15
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 01.03.11 19:52. Заголовок: Влад239 Это не есть..


Влад239 Это не есть правда .
Эта информация взята известно откуда http://piclist.ru/PICC_CCS_PCWH_MicroC_HT-PICC.html<\/u><\/a>
и давно устарела, так как писано все это было для версии 3.29.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 7
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:04. Заголовок: У меня установлен к..


У меня установлен компилятор CCS PCWHD Compiler Version 4.084. Он, функционально, значительно удобнее чем HI-TECH с МПЛАБовским окном. Но когда попробовал переписать на С асьмовскую прогу, то получил с 46 асм слов аж 63 Си-асм слова .
Вот некоторые примеры преобразования асм-Си-асм.
Переменным были назначены абсолютные адреса, тоесть прописал по конкретным адресам.
Верхние команды – асм проги, средние - мои Сишные, нижние – асм от компилятора
// --------------------------1 пример --------------------------------------
//CYCLE btfsc PortB,0 ;
//goto START ;
CYCLE:
if(RB0==1) goto START;
//0016: BTFSC 06.0 // все как и должно быть
//0017: GOTO 00A
//-----------------------2 пример ------------------------------------------//
// decfsz SecL,F ;
// goto CYCLE ;
if(SecL--) goto CYCLE;
//002E: MOVF 21,W //из 2-х сделано аж 5 команд
//002F: DECF 21,F
//0030: XORLW 00
//0031: BTFSS 03.2
//0032: GOTO 016
//-----------------------3 пример ------------------------------------------
// btfss PortB,0 ;
// goto PRD
if(RB0==0) goto PRD;
//003B: BTFSS 06.0 // все как и должно быть
//003C: GOTO 038

//--------------------4 пример ----------------------------
// decfsz SecH,F ;
// goto CYCLE ;
SecH--;
//0033: DECF 22,F // все как и должно быть
if(SecH==1) goto CYCLE;
//0034: DECFSZ 22,W // многовато будет
//0035: GOTO 037
//0036: GOTO 016
А Хайтековский эти примеры преобразовал правильно, без лишних слов.
Или я что то не так делал? Я не считаю себя знатоком и буду рад дельным советам.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 28
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:08. Заголовок: Влад239 пишет: У ме..


Влад239 пишет:

 цитата:
У меня установлен компилятор CCS PCWHD Compiler Version 4.084


Версия уже 4.114.
Не забываем о оптимизации.
Да и не плохо бы исходник посмотреть отдельно от асма ...


 цитата:
Переменным были назначены абсолютные адреса, тоесть прописал по конкретным адресам.


Это за чем ?

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 24
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:15. Заголовок: Влад239 пишет: if(R..


Влад239 пишет:

 цитата:
if(RB0==1) goto START;

Сразу вопрос, почему бит сравнивается с единицей? это на автомате или так хочет компилятор? в хайтеке достаточно написать бит..

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 25
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:16. Заголовок: Влад239 пишет: if(S..


Влад239 пишет:

 цитата:
if(SecL--) goto CYCLE;

А вот здесь уже понятно почему...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 26
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:18. Заголовок: Влад239 пишет: if(S..


Влад239 пишет:

 цитата:
if(SecL--) goto CYCLE;
//002E: MOVF 21,W //из 2-х сделано аж 5 команд
//002F: DECF 21,F
//0030: XORLW 00
//0031: BTFSS 03.2
//0032: GOTO 016

А здесь мне кажется надо условие переделать, ведь он на ноль должен проверить, что он собственно и делает...

Спасибо: 0 
ПрофильЦитата Ответить
moderator




Пост N: 4
Зарегистрирован: 10.02.11
Откуда: Россия
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:22. Заголовок: // decfsz SecL,F ; ..



 цитата:

// decfsz SecL,F ;
// goto CYCLE ;
if(SecL--) goto CYCLE;
//002E: MOVF 21,W //из 2-х сделано аж 5 команд
//002F: DECF 21,F
//0030: XORLW 00
//0031: BTFSS 03.2
//0032: GOTO 016


if(SecL--)
это не
decfsz SecL,F ;
goto CYCLE ;

Так как он проверяет на переход из 0x00 в 0xFF (декремент и проверка на 0xFF), а не на "0"
Попробуйте так:
if(--SecL)


 цитата:

if(SecH==1) goto CYCLE;
//0034: DECFSZ 22,W // многовато будет
//0035: GOTO 037
//0036: GOTO 016

А Вы без goto попробуйте.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 8
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:27. Заголовок: Оптимизация по умолч..


Оптимизация по умолчанию максимальна, но я прописал таки #opt 9 - то же самое получил. А как микроСи подобные преобразования делает? Попробовал вложить Сишный файл - что то не получается.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 31
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:38. Заголовок: Влад239 Текстом зде..


Влад239 Текстом здесь вставь исходник.
Отдельный кусок картины не даст.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 9
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:42. Заголовок: Я знаю, что сравнива..


Я знаю, что сравнивать с единицей нет смысла, но это для пробы. Делал по разному - результат в CCS, используя оператор if() и если сравнивать с 0 то всегда длинный Си-асьмовский результат , если сравнивать с 1 то правильный, а в HI TECH правильный всегда.

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 10
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:46. Заголовок: //;----------------..



//;--------------------------------- "ШАПКА" ПРОГРАММЫ ----------------------------------------
//;*********************************************************************************************
//; Файл текста программы: cus_1.asm ВАРИАНТ КОММЕНТАРИЯ № 1
//; Программа разработана для устройства тонального вызова с частотой 1450 Гц.
//;*********************************************************************************************
//; Автор: Корабельников Евгений Александрович г.Липецк, январь 2005г.
//; E-mail: karabea@lipetsk.ru URL:http://ikarab.narod.ru
//;*********************************************************************************************
//; Используется микроконтроллер PIC16F84A. Частота кварца 4000кГц.
//;*********************************************************************************************
//; Объем программы: 46 слов в памяти программ.
//;*********************************************************************************************
// LIST p=16F84A ; Назначение типа ПИКа: PIC16F84A.
// __CONFIG 03FF5H ; Установка битов конфигурации: стандартный XT-генератор,
// ; WDT включен, бит защиты не установлен, таймер включения
// ; питания отключен (0000 0101).
#include<16f628.h>
#use delay (clock=4M)
#fuses XT, WDT,NOPROTECT,NOPUT
#opt 9
//;=============================================================================================
//; Определение адресов регистров специального назначения.
//;=============================================================================================
//OptionR equ 01h ; Регистр Option - банк1
//Status equ 03h ; Регистр Status
//PortB equ 06h ; Порт B
//TrisB equ 06h ; Регистр Tris B - Банк1
//IntCon equ 0Bh ; Регистр IntCon
#byte OPTION = 0x81
#byte TRISB = 0x86
#byte INTCON = 0x0B
#byte STATUS = 0x03
#byte PORTB = 0x06
#bit RB0 = 0x06.0
#bit RB1 = 0x06.1
#bit RB2 = 0x06.2
#bit RB3 = 0x06.3
#bit RB4 = 0x06.4
#bit RB5 = 0x06.5
#bit RB6 = 0x06.6
#bit RB7 = 0x06.7
//;=============================================================================================
//; Определение названия и адресов регистров общего назначения.
//;=============================================================================================
//Sec equ 0Ch ; Счетчик времени полупериода.
//SecH equ 0Dh ; Старший байт таймера.
//SecL equ 0Eh ; Младший байт таймера.
#locate Sec=0x20
#locate SecL=0x21
#locate SecH=0x22
//;=============================================================================================
//; Присвоение буквенного обозначения операции направления результата выполнения команды в
//; регистр, с содержимым которого производится действие (для удобства восприятия текста
//; программы).
//;=============================================================================================
//F equ 1 ; Результат направить в регистр, с содержимым которого
// ; производится действие.
//;=============================================================================================
//; Присвоение биту выбора банка регистра STATUS (пятому) его стандартного названия
//; для удобства восприятия текста программы).
//;=============================================================================================
//RP0 equ 5 ; Присвоение 5-му биту STATUS (выбор банка) названия RP0.
//;=============================================================================================
//; Определение точки входа в программу.
//;=============================================================================================
// org 0 ; Начать выполнение программы
// goto START ; с первой команды подпрограммы START.
//;*********************************************************************************************

//;------------------------------- РАБОЧАЯ ЧАСТЬ ПРОГРАММЫ -----------------------------------
//;*********************************************************************************************
//; Подготовительные операции.
//;---------------------------------------------------------------------------------------------
//START clrf IntCon ; Запрещение всех прерываний.
void main() {
START:
INTCON=0;
// clrwdt ; Сброс сторожевого таймера WDT.
restart_wdt();
// bsf Status,RP0 ; Установка банка 1.

// movlw .65 ; RB0,RB6 работают на вход, (.65 = 0100 0001)
// movwf TrisB ; остальные - на выход.
TRISB=0b01000001;
// movlw .143 ; Выключение подтягивающих резисторов порта В.
// movwf OptionR ; Предделитель включен перед WDT с Кдел.=128
// ; (18мс.*128=2,3сек.), остальное - не важно.
// ; (.143 = 1000 1111)
OPTION=0b10001111;
// bcf Status,RP0 ; Установка банка 0.
//;--------------------------------------------------------------------------------------------
//; Запись констант времени работы таймера.
//;--------------------------------------------------------------------------------------------
// movlw .15 ; Запись в регистр SecH
// movwf SecH ; константы .15
SecH=15;
// movlw .255 ; Запись в регистр SecL
// movwf SecL ; константы .255
SecL=255;
//;--------------------------------------------------------------------------------------------
//; Проверка наличия включения на передачу (опрос клавиатуры).
//;--------------------------------------------------------------------------------------------
//CYCLE btfsc PortB,0 ; Если передача не включена(1) - переход в ПП START.
// goto START ; Если включена(0) - программа исполняется далее.
CYCLE:
if(RB0==1) goto START;
//;--------------------------------------------------------------------------------------------
//; Проверка: режим тонального вызова включен или выключен ?
//;--------------------------------------------------------------------------------------------
// btfss PortB,6 ; Если режим тонального вызова выключен(0) - уход в PRD.
// goto PRD ; Если включен(1) - программа исполняется далее.
if(RB6==0) goto PRD;
//;--------------------------------------------------------------------------------------------
//; Формирование времени отрицательного полупериода сигнала тонального вызова.
//;--------------------------------------------------------------------------------------------
// bcf PortB,2 ; Начало формирования отрицательного полупериода.
RB2=0;
// nop ; Пустые машинные циклы точной калибровки
// nop ; времени отрицательного полупериода (точная доводка).
// nop ; ----------------------"------------------------
delay_cycles(3);
// movlw .85 ; Запись в регистр Sec
// movwf Sec ; константы .85
Sec=85;
//PAUSE_1 clrwdt ; Сброс сторожевого таймера WDT.
//PAUSE_1:
//restart_wdt();
// decfsz Sec,F ;(--), if==1->goto "Грубый" отсчет интервала времени
// goto PAUSE_1 ; отрицательного полупериода.
//Sec--;
//if(Sec) goto PAUSE_1;
do{
restart_wdt();
Sec--;
}
while(Sec>0);
//;--------------------------------------------------------------------------------------------
//; Формирование времени положительного полупериода сигнала тонального вызова.
//;--------------------------------------------------------------------------------------------
// bsf PortB,2 ; Начало формирования положительного полупериода.
RB2=1;
// nop ; Пустые машинные циклы точной калибровки
// nop ; времени положительного полупериода (точная доводка).
// nop ; ----------------------"----------------------
delay_cycles(3);
// movlw .83 ; Запись в регистр Sec
// movwf Sec ; константы .83
Sec=83;
//PAUSE_2 clrwdt ; Сброс сторожевого таймера WDT.
PAUSE_2:
restart_wdt();
// decfsz Sec,F ; "Грубый" отсчет интервала времени
// goto PAUSE_2 ; положительного полупериода.
Sec--;
if(Sec==1) goto PAUSE_2;
//;--------------------------------------------------------------------------------------------
//; "Очистка" (декремент) таймера.
//;--------------------------------------------------------------------------------------------
// decfsz SecL,F ; Декремент содержимого регистра SecL.
// goto CYCLE ; Если результат декремента не=0 - переход на ПП CYCLE.
// ; Если результат декремента =0 - программа исполняется далее.
//SecL--;
if(SecL--) goto CYCLE;
// decfsz SecH,F ; Декремент содержимого регистра SecH.
// goto CYCLE ; Если результат декремента не=0 - переход на ПП CYCLE.
// ; Если результат декремента =0 - программа исполняется далее.
SecH--;
if(SecH==1) goto CYCLE;
// bcf PortB,2 ; Установить на выходе RB2 ноль.
RB2=0;
//;--------------------------------------------------------------------------------------------
//; Уход рабочей точки программы в "вечное" кольцо и выход из него после
//; переключения р/станции с передачи на прием.
//;--------------------------------------------------------------------------------------------
//PRD clrwdt ; Сброс сторожевого таймера WDT.
PRD:
restart_wdt();
// btfss PortB,0 ; Передача включена?
// goto PRD ; Если да, то переход на ПП PRD.
// ; Если нет, то программа исполняется далее.
if(RB0==0) goto PRD;
//; Еще одна проверка.
// btfss PortB,0 ; Передача включена?
// goto PRD ; Если да, то переход на ПП PRD.
if(RB0==0) goto PRD;
// goto START ; Конец полного цикла программы, переход на
// ; новый полный цикл программы.
goto START;
//;============================================================================================
// end ; Конец программы.
//---436 byte----

}
//////////////////////////////////////
//////////////////////////////////

CCS PCM C Compiler, Version 4.084, 36728 16-фев-11 23:32

Filename: E:\MK\project\ N2_cus_1_asm--C\N2_cus_1_asm--C.lst

ROM used: 63 words (3%) (Объем программы asm: 46 слов в памяти программ.)
Largest free fragment is 1985
RAM used: 10 (4%) at main() level
10 (4%) worst case
Stack: 0 locations

*
0000: MOVLW 00
0001: MOVWF 0A
0002: GOTO 004
0003: NOP
....................
.................... //;--------------------------------- "ШАПКА" ПРОГРАММЫ ----------------------------------------
.................... //;*********************************************************************************************
.................... //; Файл текста программы: cus_1.asm ВАРИАНТ КОММЕНТАРИЯ № 1
.................... //; Программа разработана для устройства тонального вызова с частотой 1450 Гц.
.................... //;*********************************************************************************************
.................... //; Автор: Корабельников Евгений Александрович г.Липецк, январь 2005г.
.................... //; E-mail: karabea@lipetsk.ru URL:http://ikarab.narod.ru
.................... //;*********************************************************************************************
.................... //; Используется микроконтроллер PIC16F84A. Частота кварца 4000кГц.
.................... //;*********************************************************************************************
.................... //; Объем программы: 46 слов в памяти программ.
.................... //;*********************************************************************************************
.................... // LIST p=16F84A ; Назначение типа ПИКа: PIC16F84A.
.................... // __CONFIG 03FF5H ; Установка битов конфигурации: стандартный XT-генератор,
.................... // ; WDT включен, бит защиты не установлен, таймер включения
.................... // ; питания отключен (0000 0101).
.................... #include<16f628.h>
.................... //////// Standard Header file for the PIC16F628 device ////////////////
.................... #device PIC16F628
.................... #list
....................
.................... #use delay (clock=4M)
.................... #fuses XT, WDT,NOPROTECT,NOPUT
.................... #opt 9
.................... //;=============================================================================================
.................... //; Определение адресов регистров специального назначения.
.................... //;=============================================================================================
.................... //OptionR equ 01h ; Регистр Option - банк1
.................... //Status equ 03h ; Регистр Status
.................... //PortB equ 06h ; Порт B
.................... //TrisB equ 06h ; Регистр Tris B - Банк1
.................... //IntCon equ 0Bh ; Регистр IntCon
.................... #byte OPTION = 0x81
.................... #byte TRISB = 0x86
.................... #byte INTCON = 0x0B
.................... #byte STATUS = 0x03
.................... #byte PORTB = 0x06
.................... #bit RB0 = 0x06.0
.................... #bit RB1 = 0x06.1
.................... #bit RB2 = 0x06.2
.................... #bit RB3 = 0x06.3
.................... #bit RB4 = 0x06.4
.................... #bit RB5 = 0x06.5
.................... #bit RB6 = 0x06.6
.................... #bit RB7 = 0x06.7
.................... //;=============================================================================================
.................... //; Определение названия и адресов регистров общего назначения.
.................... //;=============================================================================================
.................... //Sec equ 0Ch ; Счетчик времени полупериода.
.................... //SecH equ 0Dh ; Старший байт таймера.
.................... //SecL equ 0Eh ; Младший байт таймера.
.................... #locate Sec=0x20
.................... #locate SecL=0x21
.................... #locate SecH=0x22
.................... //;=============================================================================================
.................... //; Присвоение буквенного обозначения операции направления результата выполнения команды в
.................... //; регистр, с содержимым которого производится действие (для удобства восприятия текста
.................... //; программы).
.................... //;=============================================================================================
.................... //F equ 1 ; Результат направить в регистр, с содержимым которого
.................... // ; производится действие.
.................... //;=============================================================================================
.................... //; Присвоение биту выбора банка регистра STATUS (пятому) его стандартного названия
.................... //; для удобства восприятия текста программы).
.................... //;=============================================================================================
.................... //RP0 equ 5 ; Присвоение 5-му биту STATUS (выбор банка) названия RP0.
.................... //;=============================================================================================
.................... //; Определение точки входа в программу.
.................... //;=============================================================================================
.................... // org 0 ; Начать выполнение программы
.................... // goto START ; с первой команды подпрограммы START.
.................... //;*********************************************************************************************
....................
.................... //;------------------------------- РАБОЧАЯ ЧАСТЬ ПРОГРАММЫ -----------------------------------
.................... //;*********************************************************************************************
.................... //; Подготовительные операции.
.................... //;---------------------------------------------------------------------------------------------
.................... //START clrf IntCon ; Запрещение всех прерываний.
.................... void main() {
0004: CLRF 04
0005: BCF 03.7
0006: MOVLW 1F
0007: ANDWF 03,F
0008: MOVLW 07
0009: MOVWF 1F
.................... START:
.................... INTCON=0;
000A: CLRF 0B
.................... // clrwdt ; Сброс сторожевого таймера WDT.
.................... restart_wdt();
000B: CLRWDT
.................... // bsf Status,RP0 ; Установка банка 1.
....................
.................... // movlw .65 ; RB0,RB6 работают на вход, (.65 = 0100 0001)
.................... // movwf TrisB ; остальные - на выход.
.................... TRISB=0b01000001;
000C: MOVLW 41
000D: BSF 03.5
000E: MOVWF 06
.................... // movlw .143 ; Выключение подтягивающих резисторов порта В.
.................... // movwf OptionR ; Предделитель включен перед WDT с Кдел.=128
.................... // ; (18мс.*128=2,3сек.), остальное - не важно.
.................... // ; (.143 = 1000 1111)
.................... OPTION=0b10001111;
000F: MOVLW 8F
0010: MOVWF 01
.................... // bcf Status,RP0 ; Установка банка 0.
.................... //;--------------------------------------------------------------------------------------------
.................... //; Запись констант времени работы таймера.
.................... //;--------------------------------------------------------------------------------------------
.................... // movlw .15 ; Запись в регистр SecH
.................... // movwf SecH ; константы .15
.................... SecH=15;
0011: MOVLW 0F
0012: BCF 03.5
0013: MOVWF 22
.................... // movlw .255 ; Запись в регистр SecL
.................... // movwf SecL ; константы .255
.................... SecL=255;
0014: MOVLW FF
0015: MOVWF 21
.................... //;--------------------------------------------------------------------------------------------
.................... //; Проверка наличия включения на передачу (опрос клавиатуры).
.................... //;--------------------------------------------------------------------------------------------
.................... //CYCLE btfsc PortB,0 ; Если передача не включена(1) - переход в ПП START.
.................... // goto START ; Если включена(0) - программа исполняется далее.
.................... CYCLE:
.................... if(RB0==1) goto START;
0016: BTFSC 06.0
0017: GOTO 00A
.................... //;--------------------------------------------------------------------------------------------
.................... //; Проверка: режим тонального вызова включен или выключен ?
.................... //;--------------------------------------------------------------------------------------------
.................... // btfss PortB,6 ; Если режим тонального вызова выключен(0) - уход в PRD.
.................... // goto PRD ; Если включен(1) - программа исполняется далее.
.................... if(RB6==0) goto PRD;
0018: BTFSS 06.6
0019: GOTO 038
.................... //;--------------------------------------------------------------------------------------------
.................... //; Формирование времени отрицательного полупериода сигнала тонального вызова.
.................... //;--------------------------------------------------------------------------------------------
.................... // bcf PortB,2 ; Начало формирования отрицательного полупериода.
.................... RB2=0;
001A: BCF 06.2
.................... // nop ; Пустые машинные циклы точной калибровки
.................... // nop ; времени отрицательного полупериода (точная доводка).
.................... // nop ; ----------------------"------------------------
.................... delay_cycles(3);
001B: GOTO 01C
001C: NOP
.................... // movlw .85 ; Запись в регистр Sec
.................... // movwf Sec ; константы .85
.................... Sec=85;
001D: MOVLW 55
001E: MOVWF 20
.................... //PAUSE_1 clrwdt ; Сброс сторожевого таймера WDT.
.................... //PAUSE_1:
.................... //restart_wdt();
.................... // decfsz Sec,F ;(--), if==1->goto "Грубый" отсчет интервала времени
.................... // goto PAUSE_1 ; отрицательного полупериода.
.................... //Sec--;
.................... //if(Sec) goto PAUSE_1;
.................... do{
.................... restart_wdt();
001F: CLRWDT
.................... Sec--;
0020: DECF 20,F
.................... }
.................... while(Sec>0);
0021: MOVF 20,F
0022: BTFSS 03.2
0023: GOTO 01F
.................... //;--------------------------------------------------------------------------------------------
.................... //; Формирование времени положительного полупериода сигнала тонального вызова.
.................... //;--------------------------------------------------------------------------------------------
.................... // bsf PortB,2 ; Начало формирования положительного полупериода.
.................... RB2=1;
0024: BSF 06.2
.................... // nop ; Пустые машинные циклы точной калибровки
.................... // nop ; времени положительного полупериода (точная доводка).
.................... // nop ; ----------------------"----------------------
.................... delay_cycles(3);
0025: GOTO 026
0026: NOP
.................... // movlw .83 ; Запись в регистр Sec
.................... // movwf Sec ; константы .83
.................... Sec=83;
0027: MOVLW 53
0028: MOVWF 20
.................... //PAUSE_2 clrwdt ; Сброс сторожевого таймера WDT.
.................... PAUSE_2:
.................... restart_wdt();
0029: CLRWDT
.................... // decfsz Sec,F ; "Грубый" отсчет интервала времени
.................... // goto PAUSE_2 ; положительного полупериода.
.................... Sec--;
002A: DECF 20,F
.................... if(Sec==1) goto PAUSE_2;
002B: DECFSZ 20,W
002C: GOTO 02E
002D: GOTO 029
.................... //;--------------------------------------------------------------------------------------------
.................... //; "Очистка" (декремент) таймера.
.................... //;--------------------------------------------------------------------------------------------
.................... // decfsz SecL,F ; Декремент содержимого регистра SecL.
.................... // goto CYCLE ; Если результат декремента не=0 - переход на ПП CYCLE.
.................... // ; Если результат декремента =0 - программа исполняется далее.
.................... //SecL--;
.................... if(SecL--) goto CYCLE;
002E: MOVF 21,W
002F: DECF 21,F
0030: XORLW 00
0031: BTFSS 03.2
0032: GOTO 016
.................... // decfsz SecH,F ; Декремент содержимого регистра SecH.
.................... // goto CYCLE ; Если результат декремента не=0 - переход на ПП CYCLE.
.................... // ; Если результат декремента =0 - программа исполняется далее.
.................... SecH--;
0033: DECF 22,F
.................... if(SecH==1) goto CYCLE;
0034: DECFSZ 22,W
0035: GOTO 037
0036: GOTO 016
.................... // bcf PortB,2 ; Установить на выходе RB2 ноль.
.................... RB2=0;
0037: BCF 06.2
.................... //;--------------------------------------------------------------------------------------------
.................... //; Уход рабочей точки программы в "вечное" кольцо и выход из него после
.................... //; переключения р/станции с передачи на прием.
.................... //;--------------------------------------------------------------------------------------------
.................... //PRD clrwdt ; Сброс сторожевого таймера WDT.
.................... PRD:
.................... restart_wdt();
0038: CLRWDT
.................... // btfss PortB,0 ; Передача включена?
.................... // goto PRD ; Если да, то переход на ПП PRD.
.................... // ; Если нет, то программа исполняется далее.
.................... if(RB0==0) goto PRD;
0039: BTFSS 06.0
003A: GOTO 038
.................... //; Еще одна проверка.
.................... // btfss PortB,0 ; Передача включена?
.................... // goto PRD ; Если да, то переход на ПП PRD.
.................... if(RB0==0) goto PRD;
003B: BTFSS 06.0
003C: GOTO 038
.................... // goto START ; Конец полного цикла программы, переход на
.................... // ; новый полный цикл программы.
.................... goto START;
003D: GOTO 00A
.................... //;============================================================================================
.................... // end ; Конец программы.
.................... //---436 byte----
....................
.................... }
....................
....................
....................
....................
....................
....................
....................
....................
....................
....................
003E: SLEEP

Configuration Fuses:
Word 1: 3F6D XT WDT NOPUT NOPROTECT BROWNOUT MCLR NOLVP NOCPD






Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 32
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:48. Заголовок: Влад239 пишет: Я зн..


Влад239 пишет:

 цитата:
Я знаю, что сравнивать с единицей нет смысла, но это для пробы.


Здесь используется булева логика . Все что не равно 0, истинно .


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 33
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 00:56. Заголовок: Влад239 О ё... Вам п..


Влад239 О ё...
Вам переделать это на С ?
Ок , счас уже спать завтра после работы выложу...

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 11
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 01:01. Заголовок: Да это понято, что а..


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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 12
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 01:06. Заголовок: Не надобно мне ничег..


Не надобно мне ничего переделывать! То, что я выложил - токмо для своего разумения делал - и только. Да и Сишная прога нормально компилилась. Я ведь о чем - о неэффективном коде CCS.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 34
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 01:06. Заголовок: Влад239 пишет: Я же..


Влад239 пишет:

 цитата:
Я же просто пробовал как преобразование происходит.


Да это не в компиляторах дело .
Если цель добиться 1:1 исходника на асме - это пустое.


Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 35
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 01:09. Заголовок: Влад239 пишет: Я в..


Влад239 пишет:

 цитата:
Я ведь о чем - о неэффективном коде CCS.


В рамках проги на 30 строк асма, может и наверное да .




Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 13
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 01:13. Заголовок: Цель у меня была про..


Цель у меня была проверить эффективность компилятора. Проверил. CCS забраковал. Изучил HI TECH, проверил тем же способом. Убедился в его правильности.

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 1
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 01:38. Заголовок: Влад239 пишет: Не н..


Влад239 пишет:

 цитата:
Не надобно мне ничего переделывать!

Зря так, чужие исходники иногда очень полезно посмотреть, во первых составить свое мнение, во вторых можно почерпнуть очень ценную информацию для себя...
Влад239 пишет:

 цитата:
Цель у меня была проверить эффективность компилятора. Проверил. CCS забраковал.

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

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 14
Зарегистрирован: 05.03.10
Откуда: Украина, г.Кривой Рог
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 01:53. Заголовок: Я тоже не спец. И тр..


Я тоже не спец. И тренировался для познания. Задача была понять "ход мысли" компилятора. Привязал к готовой асм проге. Если бы цель была писать или переписывать для дела - то да, подход другой нужен. По этому вопрос у меня остается тем же - это мой компиллер CCS Version 4.084, "пургу гонит", или другие версии CCS правильно обрабатывают приведенные мной примеры???

Спасибо: 0 
ПрофильЦитата Ответить
постоянный участник


Пост N: 2
Зарегистрирован: 06.02.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 06:01. Заголовок: Влад239 , вопрос вам..


Влад239 , вопрос вам можно влад по коду строчка "use delay (clock=4M) " как используется delay откуда берется

Спасибо: 0 
ПрофильЦитата Ответить



Пост N: 36
Зарегистрирован: 01.03.11
Рейтинг: 0
ссылка на сообщение  Отправлено: 02.03.11 18:22. Заголовок: Влад239 пишет: Зад..


Влад239 пишет:

 цитата:
Задача была понять "ход мысли" компилятора. Привязал к готовой асм проге.


В корне не правильно. Вы пытаетесь писать в С на ассемблере .
Надо переносить не последовательность операторов , а алгоритм .
 
#include <16f84A.h>

//-----------------------
// Определение регистров и их бит
#byte OPTION_REG = 0x81
#byte PORTB = 0x06
#byte TRISB = 0x86
#bit PRD_ON = PORTB.0 // 0 передача включена
#bit TON_EN = PORTB.6 // 1 тональный вызов включен
#bit OUT = PORTB.2 //

//-------------------------
// константы
#define PU_OFF 0x80 //выкл. резисторы подтяжки
#define Delay_half_period 53

//-------------------------
// переменные
int16 Tone_time;
//--------------------------
//Функции
void delay_1(int8 value)
{
while(value--);

}
//

///////////////////////


void main (void)
{
// Инициализация
TRISB = 0b01000001 ;
OPTION_REG= PU_OFF | WDT_2304MS; // pullup отключены, прескалер WDT 1:128

while(1)
{
#asm
clrwdt
#endasm
Tone_time=0x1fff; //

while(PRD_ON); // ждем включения режима передачи

while(TON_EN) // ждем включения тонального вызова
{

OUT=~OUT; // инвертируем вывод
delay_1(Delay_half_period); // держим состояние вывода пол.периода
#asm
clrwdt
#endasm
if(!Tone_time--)break; // если прошло 2.8 секунды идем на начало
}

}
}



Спасибо: 0 
ПрофильЦитата Ответить
Ответов - 44 , стр: 1 2 All [только новые]
Ответ:
1 2 3 4 5 6 7 8 9
видео с youtube.com картинка из интернета картинка с компьютера ссылка файл с компьютера русская клавиатура транслитератор  цитата  кавычки оффтопик свернутый текст

показывать это сообщение только модераторам
не делать ссылки активными
Имя, пароль:      зарегистрироваться    
Тему читают:
- участник сейчас на форуме
- участник вне форума
Все даты в формате GMT  3 час. Хитов сегодня: 5
Права: смайлы да, картинки да, шрифты нет, голосования нет
аватары да, автозамена ссылок вкл, премодерация откл, правка нет



Создай свой форум на сервисе Borda.ru
Текстовая версия