include
org 0x00 ; Вектор сброса
Goto Start
;***************************************************************
org 004 ;Начало процедуры обработки прерывания
movwf temp ; Сохранение рабочего регистра W в регистре temp
clrwdt ;Очистка сторожевого таймера для предотврашения
call Int1 ; сброса процессора каждый 18мс
movlw b’10100000′ ; Разрешаем прерывания от таймера
movwf INTCON ;
movf temp,w ;Востанавливаем значение рабочего регистра
clrwdt ;Очистка сторожевого таймера
return ;Выход из процедуры обработки прерывания
;****************************************************************
org 0x10
segment ; Таблица преобразования DEC -> семисегментный код.
CLRF PCLATH
ADDWF PCL, F
dt 07E, b’00001100′, 0B6, 09E, 0CC, 0DA, 0FA, 00E, 0FE, 0DE
Data1 ;*************десятки
CLRF PCLATH
ADDWF PCL, F
;0 1 2 3 4 5 6 7 8 9
dt 0,0,0,0,0,0,0,0,0,0
dt 1,1,1,1,1,1,1,1,1,1
dt 2,2,2,2,2,2,2,2,2,2
dt 3,3,3,3,3,3,3,3,3,3
dt 4,4,4,4,4,4,4,4,4,4
dt 5,5,5,5,5,5,5,5,5,5
CLRF PCLATH
ADDWF PCL, F
;0 1 2 3 4 5 6 7 8 9
dt 0,1,2,3,4,5,6,7,8,9 ;0
dt 0,1,2,3,4,5,6,7,8,9 ;10
dt 0,1,2,3,4,5,6,7,8,9 ;20
dt 0,1,2,3,4,5,6,7,8,9 ;30
dt 0,1,2,3,4,5,6,7,8,9 ;40
dt 0,1,2,3,4,5,6,7,8,9 ;50
; Программные регистры:
skan1 equ 20 ;рег хранения RB1,2
clok1 equ 21 ; хранение часов
sek equ 22 ;регистр хранения секунд
min equ 23 ;регистр хранения минут
cl_k equ 24
Dig_x equ 25 ; Значение X0:00 для индикации.
Dig_y equ 26 ; Значение 0X:00 для индикации.
Dig_z equ 27 ; Значение 00:X0 для индикации.
Dig_exp equ 28 ; Значение 00:0X для индикации.
cnt1 equ 29 ;переменная исп для задержки времени
cnt2 equ 2A ;переменная исп для задержки времени
cnt_r equ 2B ;переменная исп для задержки времени
temp equ 2C
clok2 equ 2D
temp1 equ 2E
n1 equ 2f
n2 equ 30
Start ; Начальная инициализация.
clrw
bsf STATUS,RP0 ; Обращение к банку 1.
clrf PORTA ; Обнулить порт А.
clrf PORTB ; Обнулить порт В.
movlw b’00010000′
movwf TRISA ; RA0 — RA3 выходы, RA4 вход.
movlw b’00000001′
movwf TRISB ; RB1 — RB7 выходы.RB0 вход
movlw b’00000101′ ;коэффициен предделителя 64
movwf OPTION_REG
bcf STATUS,RP0 ; Обращение к банку 0.
movlw b’10100000′
movwf INTCON
clrf min
clrf sek
clrf cl_k
movlw 0
movwf TMR0
movlw 01 ; Для контроля дисплея
movwf Dig_x
movlw 02 ; загрузить во все регистры индикации 8.
movwf Dig_y
movlw 03
movwf Dig_z
movlw 04
movwf Dig_exp
movlw .131
movwf clok1
movwf TMR0
movlw .1
movwf temp1
Start1 ; Основной цикл программы.
movlw 19 ; Установить счетчик циклов индикации.
movwf cnt_r
loop1 clrwdt
call refresh ;индикаторы.
decfsz cnt_r, f
goto loop1
;***присвоение значения регистрам индикации в зависимости от режима ;индикации******
clrwdt
btfss temp1,0
call Temp_min
btfsc temp1,0
call Temp_clk
;******присвоение значения регистрам индикации
movf n1,0
call Data1
movwf Dig_x
movf n1,0
call Data2
movwf Dig_y
movf n2,0
call Data1
movwf Dig_z
clrwdt
movf n2,0
call Data2
movwf Dig_exp
;********клавишы установки режима индикации и времени*******
call Delay
btfss PORTA,4 ;сканируем клавишу установки режима RA4 вывод 3
incf temp1,1 ;прибавляем к темпу 1
btfss PORTB,0 ;клавиша установки времени RB0 вывод 6
call Min_clk
goto Start1
;************************************************************
Temp_min
movf min,0
movwf n1
movf sek,0
movwf n2
return
;************************************************************
Temp_clk
movf cl_k,0
movwf n1
movf min,0
movwf n2
return
;****************выбор прибавить минуты(0) или часы(1)***********
Min_clk
clrwdt
btfss temp1,0
incf min,1
btfsc temp1,0
incf cl_k
;*******проверка 60 мин 24 часа*****************
movf min,0
sublw .60
btfsc STATUS,Z
clrf min
movf cl_k,0
sublw .24
btfsc STATUS,Z
clrf cl_k
clrwdt
return
Sek ;*****************деление на125
movlw .131 ;записываем 131 т.к 256-125=131
movwf clok1
incfsz sek
movf sek,0
sublw .60
btfsc STATUS,Z
call Min
return
Min
clrf sek
incfsz min
movf min,0
sublw .60
btfsc STATUS,Z
call Clok
retfie
Clok
clrf min
incfsz cl_k
movf cl_k,0
sublw .24
btfsc STATUS,Z
clrf cl_k
retfie
Int1 ;процедура обработки прерывания
movlw .131 ;записываем 131 т.к 256-125=131
addwf TMR0,1 ;256(максимальное значение таймера)
incfsz clok1 ;125(нужный коэффициен деления)
return
call Sek
return
;***********************Вывод на индикатор*************
refresh ; Процедура сканирования индикации.
movf Dig_x, W ; Значение деситых.часов для индикации.
call segment ; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA, 0 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA, 0 ; Отключить индикатор.
movf Dig_y, W ; Значение ед.часов для индикации.
call segment ; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA,1 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA,1 ; Отключить индикатор.
movf Dig_z, W ; Значение десят.минут для индикации.
call segment; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA,2 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA,2 ; Отключить индикатор.
movf Dig_exp, W ; Значение ед.минут.
call segment; Преобразование DEC -> семисегментный код.
movwf PORTB ; Вывод цифры на индикатор.
bcf PORTA,3 ; Активизировать индикатор.
call Delay ; Задержка времени для сканирования.
bsf PORTA,3 ; Отключить индикатор.
return
; ************************************************************
Delay ; Подпрограмма задержки времени
clrwdt
movlw .5 ; для сканирования индикации.
movwf cnt1
nop
beta movlw .150
movwf cnt2
Alfa nop
nop
decfsz cnt2, f
goto Alfa
nop
nop
decfsz cnt1, f
goto beta
nop
return
; *******************************************************
end
Clean: Deleting intermediary and output files.
Clean: Done.
Executing: «E:Program FilesMicrochipMPASM SuiteMPAsmWin.exe» /q /p18F452 «Untitled.asm» /l»Untitled.lst» /e»Untitled.err»
Warning[215] F:1UNTITLED.ASM 1 : Processor superseded by command line. Verify processor symbol.
Warning[205] F:1UNTITLED.ASM 2 : Found directive in column 1. (include)
Message[301] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 35 : MESSAGE: (Processor-header file mismatch. Verify selected processor.)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 114 : Argument out of range (must be greater than or equal to 255)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Error[126] E:PROGRAM FILESMICROCHIPMPASM SUITEP16F84A.INC 115 : Argument out of range (__MAXRAM must be used first)
Warning[203] F:1UNTITLED.ASM 4 : Found opcode in column 1. (Goto)
Warning[205] F:1UNTITLED.ASM 6 : Found directive in column 1. (org)
Warning[205] F:1UNTITLED.ASM 17 : Found directive in column 1. (org)
Error[118] F:1UNTITLED.ASM 19 : Overwriting previous address contents (0010)
Error[118] F:1UNTITLED.ASM 19 : Overwriting previous address contents (0011)
Error[118] F:1UNTITLED.ASM 20 : Overwriting previous address contents (0012)
Error[118] F:1UNTITLED.ASM 20 : Overwriting previous address contents (0013)
Error[118] F:1UNTITLED.ASM 21 : Overwriting previous address contents (0014)
Error[118] F:1UNTITLED.ASM 21 : Overwriting previous address contents (0015)
Warning[203] F:1UNTITLED.ASM 136 : Found opcode in column 1. (return)
Warning[203] F:1UNTITLED.ASM 143 : Found opcode in column 1. (return)
Warning[203] F:1UNTITLED.ASM 161 : Found opcode in column 1. (return)
Warning[203] F:1UNTITLED.ASM 232 : Found opcode in column 1. (nop)
Warning[207] F:1UNTITLED.ASM 235 : Found label after column 1. (Alfa)
Warning[203] F:1UNTITLED.ASM 237 : Found opcode in column 1. (decfsz)
Warning[203] F:1UNTITLED.ASM 243 : Found opcode in column 1. (nop)
Warning[203] F:1UNTITLED.ASM 244 : Found opcode in column 1. (return)
Warning[205] F:1UNTITLED.ASM 246 : Found directive in column 1. (end)
Halting build on first failure as requested.
BUILD FAILED: Fri May 13 16:36:52 2005
Сообщение от Voland_
что-то вписали не туда. пути к файлам нужно указывать в окошке «include path», там будет набор из нескольких.
Ну, и директивы я впервые вижу, что пишутся через запятую — обычно через пробел. Misc controls — тоже не понял зачем это нужно…
И еще — откройте файл со странным include’ом: — сдается мне в нем указан именно относительный путь, а не просто имя файла. Вот компилер его и не может найти.
Спасибо. В общем после хитрых плясок с бубном получилось скомпилировать проект, но произошла другая проблемка — hex файл который у меня получился немного отличается от оригинала:
Например начало файла в оригинале:
:020000040800F2
:10000000A00A0020010100087519000877190008EE
:10001000791900087B1900087D190008000000000C
И у меня:
:020000040800F2
:10000000F80B0020E9010008591B00085B1B0008E1
:100010005D1B00085F1B0008611B0008000000005A
Соответственно плата которую шью, прошивается но прога не работает.
Я грешу на то что во время компиляции ф .h файле STM32_USB-FS-Device_LibLibrariesSTM32_USB-FS-Device_Driverincusb_type.h была ошибка (отсутствовала «;»)я исправил, но видимо причина более серьезная. Вот сейчас думаю, что делать. (Библиотеку перескачивал, та же беда).
Буду рад любой помощи. Спасибо.
Добавлено через 1 час 38 минут
Удалось пропатчить библиотечку, теперь она имеет вид:
C | ||
|
Но тем не менее, получаемый хекс файл на выходе отличается от оригинала,значит проблема была не в ней. Уже весь мозг сломал что тут может быть. Может кто-то сталкивался с чем-то подобным? буду рад любой помощи. Спасибо.
Форум РадиоКот :: Просмотр темы — MPLAB в вопросах и ответах
Автор: | uldemir [ Вт мар 14, 2017 16:00:15 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
не угадал. Код: Error[151] C:TEMPTEST.XTEST.ASM 1222 : Operand contains unresolvable labels or is too complex Поигрался… конструкция типа Код: IF HIGH(1024) != 0 проходит, но стоит в аргумент поставить $ или имя метки — нет. Чего-то не понимаю. Разобрался. |
Автор: | leha_m1986 [ Ср июн 07, 2017 13:49:18 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
здравствуйте! не запускается MPLAB. «Cannot open file @C:PROGRA~1MICROC~1MPLABXv3.20MPLAB_~2etcMPLAB_~1.clusters» for reading. Не удается найти указанный файл.» MPLAB v.3.20, ОС WinXP SP3. |
Автор: | Zhuk72 [ Ср июн 07, 2017 14:59:22 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Может все-таки MPLAB Х? |
Автор: | Пока_без_кота [ Вс июн 11, 2017 11:12:52 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Доброго времени суток. MPLAB 8.92. Как в симуляторе задать частоту сигнала для работы Таймера 1 в режиме тактирования от внешнего источника ? |
Автор: | КРАМ [ Вс июн 11, 2017 11:27:34 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Подать на вход тактирования сигнал из Стимулов. Только этот сигнал будет все равно привязан к тактирующей ядро частоте. Патамушта эта частота и является единственным базовым сигналом симулятора. |
Автор: | botchin [ Вс июн 11, 2017 14:01:10 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Вложение:
Подать на симуляторе .scl файл что-то такое Код: onfiguration for «pic16f628a» is testbench for «pic16f628a» is clk_1: process is end testbench; Етот код подасть на вход T1OSCI 0 за время 200 ns и 1 за время 400ns вне зависимости от такта МК |
Автор: | Пока_без_кота [ Пн июн 12, 2017 11:33:19 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Спасибо, утянул как пример. |
Автор: | Feklistov_as [ Вт сен 19, 2017 19:32:27 ] |
Заголовок сообщения: | Не работает в железе. |
Доброго времени суток! Проблема примерно следующая: |
Автор: | uldemir [ Вт сен 19, 2017 19:54:57 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Попробуйте вместо bsf/bcf PORTA… писать bsf/bcf LATA. Ну и аналогично все записи в порты делать через LAT регистры, а не PORT. |
Автор: | Feklistov_as [ Вт сен 19, 2017 20:37:55 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Цитата: Попробуйте вместо bsf/bcf PORTA… писать bsf/bcf LATA. Ну и аналогично все записи в порты делать через LAT регистры, а не PORT. ПОМОГЛО!!!! Применил эту правку только к PORTA. Огромное СПАСИБО!!! |
Автор: | uldemir [ Вт сен 19, 2017 21:22:28 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Потому что при модификации PORTx считывается состояние пинов порта, производится модификация и запись. Поэтому, если на каком выходе есть чрезмерная нагрузка (или ёмкостная нагрузка в виде затвора полевика), вы сделали BSF PORTA, 0 — вроде впорядке — прочитали, изменили на 1 и записали. Но, если следом делаем BSF PORTA, 1 — мы снова читаем порт, и если на нулевом разряде по какой-то причине лог.1 не успел установиться (кто-то давит или ёмкость не успела зарядиться), то прочитается 0 и он же будет обратно записан. Об этом нужно было помнить у старых микроконтроллеров, у которых еще не было регистров LAT. А у новых — надо пользоваться им для вывода. |
Автор: | profradio [ Пт окт 06, 2017 06:27:13 ] | |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах | |
Добрый день! Прошу помочь разобраться в (не основных) ошибках MPLAB X компилятор XC8(v 1.43)(Программа вывода цифр, символов и заглавных букв русского алфавита на дисплей нокиа 5110/3110 с мк PIC16F676- пишу сам, берите если кому надо. 50% слов, 25% памяти.) Добавлено after 19 minutes 16 seconds: Добавлено after 7 minutes 28 seconds:
|
Автор: | uldemir [ Пт окт 06, 2017 07:07:36 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Правильно ругается. Я бы на месте компилятора вообще объявил бы забастовку и потребовал повышения зарплаты за вредность. Первое, что бросилось в глаза, то что вы объявили переменную simv, не означает, что объявлен тип агрумента с таким же именем в заголовке функции. Да и вообще, объявление функции именно для того и делается, чтобы программа знала, что туда надо передавать. |
Автор: | profradio [ Пт окт 06, 2017 08:09:23 ] | |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах | |
Прошу немного доступнее.. я только учусь программированию на си. Т.е. надо декларировать функцию еще раз в начале и дать значение её аргументу вот так:
|
Автор: | uldemir [ Пт окт 06, 2017 09:00:28 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Код: int lcd_write_8_bit(int); Вот здесь вы объявили что функции должна передаваться переменная типа знакового инт. А потом передаёте элемент массива состоящего из беззнаковых char. Определитесь. Тем более, что это потенциально опасное граблями место. |
Автор: | profradio [ Пт окт 06, 2017 09:12:02 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Отличное замечание! (память -1%, слова -5%)! Все теперь в unsigned char — компилирует, не нравится только вот это: |
Автор: | uldemir [ Пт окт 06, 2017 09:37:28 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Честно говоря, не знаю, почему эта конструкция вызывает предупреждение. Возможно, где-то происходит неявное преобразование типа. Но в документации не нашел информации об этом. Сам в своих программах борюсь с такими вещами, потому как если не понятно, то чревато граблями. Попробуйте написать adr <<= 1; вместо p.s. Google говорит, что это есть в стандарте языка C и называется integral promoution. Цитата: Because the standard says so. The operands to binary operators undergo integral promotion, in which anything smaller than an int is promoted to int; the results of the operation have type int as well. And if the original value were, say, 0x12, the results would be 0x120, and assigning this to an unsigned char will cause a change in value. (The assigned value will be 0x20.) Whence the warning. |
Автор: | profradio [ Пт окт 06, 2017 09:51:57 ] | |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах | |
uldemir, в точку!
|
Автор: | uldemir [ Пт окт 06, 2017 10:12:42 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Если у вас не PRO версия — подпишитесь на 60 дней, и обалдеете насколько еще код усохнет. А потом посмотрите в дизассемблере, что он накодил в свободной версии и радости уже не будет никогда. У меня был один проект, который пытался впихнуть в pic16F723a, так вот он перестал влазить. Подписался на PRO — сразу половина памяти стала свободной! Жаль, что эти 60 дней уже давно прошли, а второй раз они их не дают. Вот с этим сдвигом всё-равно непонятки. В документации на XC написано, что компилятор сам умеет определять операции ротации. И написано, что Цитата: c = (c << 1) | (c >> 7); Но почему-то выдаёт такое же предупреждение. Хм. глава про integral promotion находится как раз на предыдущей странице. правда, там упоминается, что типа «типа если результат будет одинаков с преобразованием и без, то преобразование не производится». Ну как-то так, если своими словами. поэтому почему-то в певом случае ( a = (a <<1)) преобразование производится и есть предупреждение, а во втором (a <<= 1) не производится. |
Автор: | Siarzhuk [ Сб окт 07, 2017 12:58:02 ] |
Заголовок сообщения: | Re: MPLAB в вопросах и ответах |
Жаль, что эти 60 дней уже давно прошли, а второй раз они их не дают. Цитата: c = (c << 1) | (c >> 7); Но почему-то выдаёт такое же предупреждение. Может дело как раз во Free версии? Т.е. он, конечно, может оптимизировать ротациями, но не за бесплатно — а для нас-халявщиков компилируя выражение буквально операнд за операндом — вот и напарывается на преобразование. А какой тип у c в данном куске кода? |
Страница 18 из 25 | Часовой пояс: UTC + 3 часа |
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group http://www.phpbb.com/ |