Ср янв 04, 2017 09:18:17
Ср янв 11, 2017 21:28:49
dt b'00101000',b'01111110',b'10100100',b'01100100',b'01110010',b'01100001',b'00100001',b'01111100',b'00100000',b'01100000',b'00110000',b'00100011',b'10101001',b'00100110',b'10100001',b'10110001'
046 3428 RETLW 0x28 84: dt b'00101000',b'01111110',b'10100100',b'01100100',b'01110010',b'01100001',b'00100001',b'01111100',b'00100000',b'01100000',b'00110000',b'00100011',b'10101001',b'00100110',b'10100001',b'10110001'
047 347E RETLW 0x7e
048 34A4 RETLW 0xa4
049 3464 RETLW 0x64
04A 3472 RETLW 0x72
04B 3461 RETLW 0x61
04C 3421 RETLW 0x21
04D 347C RETLW 0x7c
04E 3420 RETLW 0x20
04F 3460 RETLW 0x60
050 3430 RETLW 0x30
051 3423 RETLW 0x23
052 34A9 RETLW 0xa9
053 3426 RETLW 0x26
054 34A1 RETLW 0xa1
055 3402 RETLW 0x2
046 3428 RETLW 0x28 84: dt b'00101000',b'01111110',b'10100100',b'01100100',b'01110010',b'01100001',b'00100001',b'01111100',b'00100000',b'01100000',b'00110000',b'00100011',b'10101001',b'00100110',b'10100001'
047 347E RETLW 0x7e
048 34A4 RETLW 0xa4
049 3464 RETLW 0x64
04A 3472 RETLW 0x72
04B 3461 RETLW 0x61
04C 3421 RETLW 0x21
04D 347C RETLW 0x7c
04E 3420 RETLW 0x20
04F 3460 RETLW 0x60
050 3430 RETLW 0x30
051 3423 RETLW 0x23
052 34A9 RETLW 0xa9
053 3426 RETLW 0x26
054 34A1 RETLW 0xa1
055 34B1 RETLW 0xb1 85: dt b'10110001'
Ср янв 11, 2017 22:20:46
Warning[209] bla-bla-bla 665 : Missing quote
Ср янв 11, 2017 22:55:39
Zhuk72 писал(а):... для чего вам нужна длинная строка? Чем привлекла?
Чт янв 12, 2017 04:26:24
Чт янв 12, 2017 06:01:31
КРАМ писал(а):Раз Вам так нравится MPLAB X...
КРАМ писал(а):Это делается набором в начале строки текста fcom;<tab>...
Чт янв 12, 2017 06:12:48
There is a source file line limit (expanded) of 200 characters.
Чт янв 12, 2017 08:21:39
botchin писал(а):..200 characters.
Чт янв 12, 2017 08:42:39
Ср янв 25, 2017 18:07:49
Ср янв 25, 2017 18:35:50
Пн фев 06, 2017 20:42:24
Menu_1_routine
clrf symbol_pointer
String_1
movfw symbol_pointer
call Table_Menu_1
andlw 0FFh
btfsc STATUS,Z
goto Out_1
call Send_LCD_Symbol
incf symbol_pointer
goto String_1
Out_1
return
Пн фев 06, 2017 21:30:03
Пн фев 06, 2017 22:13:47
А зачем передавать адрес, если можно передавать просто имя (хотя, по большому счёту, имя - это и есть адрес) , которое он будет заменять в тексте ?Пока_без_кота писал(а):Возможно ли каким-то образом передать в качестве параметра макроса адрес таблицы ?
my_macro MACRO table_name ; Вроде так макросы создаются, не помню уже...
clrf table_name
..........
..........
ENDM
my_macro symbol_pointer ; Вызов макроса
Пн фев 06, 2017 22:30:13
CODEPAGE_5x8
dw (Let_00)
dw (Let_01)
dw (Let_02)
dw (Let_03)
Let_00 db 3E,41,00,00,00,3E,04,08,04,3E,00,00,00,41,3E,00 ; MONO
Let_01 db 3E,7F,5B,55,55,55,6D,7F,7D,7D,41,7D,7D,7F,3E,00 ; STEREO
Let_02 db 1C,14,1C,22,7F,00,00,00,00,22,14,08,14,22,00,00 ; MUTE
Let_03 db 1C,1C,7F,41,41,41,41,41,41,41,41,41,41,41,41,7F ; BATT
CODEPAGE_5x8:
.pword paddr(Let_00)
.pword paddr(Let_01)
.pword paddr(Let_02)
.pword paddr(Let_03)
Let_00: .byte 0x3E, 0x51, 0x49, 0x45, 0x3E, 0x00
Let_01: .byte 0x00, 0x42, 0x7F, 0x40, 0x00, 0x00
Let_02: .byte 0x42, 0x61, 0x51, 0x49, 0x46, 0x00
Let_03: .byte 0x21, 0x41, 0x45, 0x4B, 0x31, 0x00
Вт фев 07, 2017 07:08:19
Пока_без_кота писал(а):Доброго времени суток. Возможно ли каким-то образом передать в качестве параметра макроса адрес таблицы ?
...
И таких выводов значений из таблиц есть много, и все они отличаются лишь содержимым таблицы. Или я хочу невозможного ?
Вт фев 07, 2017 09:33:16
include MicroMenu_Lib.h
include HD44780_Lib.h
MicroMenu_Lib_udata udata_shr
symbol_pointer res 1
global symbol_pointer
extern Send_LCD_Symbol,Send_LCD_Command,Delay_4ms,Debounce_Delay
;===========================
MicroMenu code 0x100-4A
;===========================
Kursor
movlw b'10001111' ; Установим курсор на последний символ 1 строки
call Send_LCD_Command
movlw '<' ; И нарисуем там указатель текущего пункта меню
call Send_LCD_Symbol
movlw SECOND_LINE ; Переводим указатель на вторую строку
call Send_LCD_Command
return ; И приступаем к отрисовке следующего пункта меню
;===========================
Num_of_Submenu_Table ; Возвращаем количество пунктов нужного подменю, следить, чтобы все элементы данной таблицы находились на одной странице
movfw index_menu
clrf PCLATH
; bsf PCLATH,0 ; Если таблица размещена до адреса 0x0FF, закоментировать
addwf PCL
retlw_num_of_submenu_punkts
;===========================
Switch_Menu
call Debounce_Delay
movlw CLR_DISP
call Send_LCD_Command
call Delay_4ms ; Обязательная задержка после очистки дисплея !!!
call Switch_Menu_routine ; Рисуем текущий пункт меню
call Kursor ; Нарисуем признак текущего пункта меню
incf index_menu ; Берем следующий пункт
movfw index_menu
sublw NUM_OF_MAIN_MENU_PUNKTS ; Сравниваем с количеством пунктов меню
btfsc STATUS,Z
goto Correct_index_menu
call Switch_Menu_routine
decf index_menu ; Не забудем вернуть назад текущий пункт меню
return
Correct_index_menu ; Достигли последнего пункта меню, следующим отображаем 1 пункт
clrf index_menu
call Switch_Menu_routine
movlw NUM_OF_MAIN_MENU_PUNKTS-1
movwf index_menu
return
Switch_Menu_routine ; Подпрограмма вывода названия пункта меню на дисплей
clrf symbol_pointer
String
call Switch_Menu_Table
andlw 0FFh
btfsc STATUS,Z
return
call Send_LCD_Symbol
incf symbol_pointer
goto String
;----------
Switch_Submenu ; Поместим курсор на нужный подпункт нужного пункта
call Debounce_Delay
movlw CLR_DISP
call Send_LCD_Command
call Delay_4ms ; Обязательная задержка после очистки дисплея !!!
call Switch_Submenu_routine ; Рисуем текущий подпункт меню
call Kursor ; Нарисуем признак текущего подпункта меню
incf index_submenu
call Num_of_Submenu_Table
subwf index_submenu,w ; Сравниваем с количеством подпунктов меню
btfsc STATUS,Z
goto Correct_index_submenu
call Switch_Submenu_routine
decf index_submenu ; Не забудем вернуть назад текущий подпункт меню
return
Correct_index_submenu ; Достигли последнего подпункта меню, следующим отображаем 1 попункт
clrf index_submenu
call Switch_Submenu_routine
call Num_of_Submenu_Table
movwf index_submenu
decf index_submenu
return
Switch_Submenu_routine ; Подпрограмма вывода названия пункта подменю на дисплей
clrf symbol_pointer
String_
call Switch_Submenu_Table
andlw 0FFh
btfsc STATUS,Z
return
call Send_LCD_Symbol
incf symbol_pointer
goto String_
;===========================
Switch_Menu_Table
movfw index_menu
clrf PCLATH
bsf PCLATH,0
addwf PCL ; Эта команда должна находится в ячейке с адресом 0x0FF
goto_Punkt_Menu ; Макрос, создает теблицу переходов на пункты меню
;----------
Switch_Submenu_Table
movfw index_menu
clrf PCLATH
bsf PCLATH,0
addwf PCL
goto_Menu_X_Table ; Макрос, создает переходы на все подпункты меню
goto_Punkt_Submenu ; Супермакрос, создает цепочку макросов, в количестве пунктов меню
;===========================
Action_Switch ; Выполним действие, на котором находится курсор
call Debounce_Delay
movlw CLR_DISP
call Send_LCD_Command
call Delay_4ms ; Обязательная задержка после очистки дисплея !!!
movfw index_menu ; Берем выбраный пункт меню
clrf PCLATH
bsf PCLATH,0
addwf PCL ; Переходим на нужную ветку
goto_Menu_X_Table_action ; Макрос, создает переходы на все подпункты меню
goto_Punkt_Submenu_action ; Супермакрос, создает цепочку макросов, в количестве веток выполняемых действий
;===========================
Menu_1
add_PCL_symbol_pointer_0x100
dt "1.Guard On",0
Menu_2
add_PCL_symbol_pointer_0x100
dt "2.Guard Off",0
Menu_3
add_PCL_symbol_pointer_0x100
dt "3.Current Alarm",0
Menu_4
add_PCL_symbol_pointer_0x100
dt "4.Current Malfunction",0
Menu_5
add_PCL_symbol_pointer_0x100
dt "5.Option",0
;===========================
Menu_1_Submenu_1
add_PCL_symbol_pointer_0x100
dt "1.Garage",0
Menu_1_Submenu_2
add_PCL_symbol_pointer_0x100
dt "2.Doors",0
Menu_1_Submenu_3
add_PCL_symbol_pointer_0x100
dt "3.House",0
;----------
Table_Submenu code 0x200-4
Menu_2_Submenu_1
add_PCL_symbol_pointer_0x200
dt "1.Garage",0
Menu_2_Submenu_2
add_PCL_symbol_pointer_0x200
dt "2.Doors",0
Menu_2_Submenu_3
add_PCL_symbol_pointer_0x200
dt "3.House",0
;----------
Menu_3_Submenu_1
add_PCL_symbol_pointer_0x200
dt "1.Review",0
Menu_3_Submenu_2
add_PCL_symbol_pointer_0x200
dt "2.Shut Off",0
Menu_3_Submenu_3
add_PCL_symbol_pointer_0x200
dt "3.FAQ",0
;----------
Menu_4_Submenu_1
add_PCL_symbol_pointer_0x200
dt "1.Review",0
Menu_4_Submenu_2
add_PCL_symbol_pointer_0x200
dt "2.Shut Off",0
Menu_4_Submenu_3
add_PCL_symbol_pointer_0x200
dt "3.FAQ",0
;----------
Menu_5_Submenu_1
add_PCL_symbol_pointer_0x200
dt "1.Configuration",0
Menu_5_Submenu_2
add_PCL_symbol_pointer_0x200
dt "2.Settings",0
Menu_5_Submenu_3
add_PCL_symbol_pointer_0x200
dt "3.About",0
;===========================
Menu_1_Submenu_1_action ; Выполняем действие 1 подпункта 1 пункта
nop
return
Menu_1_Submenu_2_action ; Выполняем действие 2 подпункта 1 пункта
nop
return
Menu_1_Submenu_3_action ; Выполняем действие 3 подпункта 1 пункта
nop
return
;----------
Menu_2_Submenu_1_action ; Выполняем действие 1 подпункта 2 пункта
nop
return
Menu_2_Submenu_2_action ; Выполняем действие 2 подпункта 2 пункта
nop
return
Menu_2_Submenu_3_action ; Выполняем действие 3 подпункта 2 пункта
nop
return
;----------
Menu_3_Submenu_1_action ; Выполняем действие 1 подпункта 3 пункта
nop
return
Menu_3_Submenu_2_action ; Выполняем действие 2 подпункта 3 пункта
nop
return
Menu_3_Submenu_3_action ; Выполняем действие 3 подпункта 3 пункта
nop
return
;----------
Menu_4_Submenu_1_action ; Выполняем действие 1 подпункта 4 пункта
nop
return
Menu_4_Submenu_2_action ; Выполняем действие 2 подпункта 4 пункта
nop
return
Menu_4_Submenu_3_action ; Выполняем действие 3 подпункта 4 пункта
nop
return
;----------
Menu_5_Submenu_1_action ; Выполняем действие 1 подпункта 5 пункта
nop
return
Menu_5_Submenu_2_action ; Выполняем действие 2 подпункта 5 пункта
nop
return
Menu_5_Submenu_3_action ; Выполняем действие 3 подпункта 5 пункта
nop
return
;===========================
end
Пн мар 13, 2017 19:20:38
Bin_2_BCD_Lite
movlw .10 ; Задаем счетчик десятков
movwf counter
clrf decades_num ; Обнуляем количество десятков
clrf units_num ; Обнуляем количество единиц
movfw conv_value ; Заносим проверяемое значение в рабочий регистр
Loop_decades
movwf conv_value_temp ; Сохраняем полученное значение в промежуточную ячейку
movlw .10
subwf conv_value_temp,w ; Вычитаем 10, сохраняем в рабочий регистр
btfss STATUS,C ; Если возник флаг займа,
goto Decades_End ; Прекращаем вычитать десятки
incf decades_num ; Иначе увеличиваем количество десятков в проверяемом числе
decfsz counter ; Перебор возможного количества десятков
goto Loop_decades
clrf decades_num ; Обнуляем количество посчитанных десятков, количество единиц и так останется равным 0
retlw 0 ; Ошибка, возврат с нулевыми значениями десятков и единиц
Decades_End
movlw .10 ; Задаем счетчик единиц
movwf counter
Loop_units
movlw .1
subwf conv_value_temp ; Вычитаем 1
btfss STATUS,C ; Если возник флаг займа,
goto Units_End ; Прекращаем вычитать единицы
incf units_num ; Иначе увеличиваем количество единиц в проверяемом числе
decfsz counter ; Перебор возможного количества единиц
goto Loop_units
clrf decades_num ; Обнуляем количество посчитанных десятков
clrf units_num ; Обнуляем количество посчитанных единиц
retlw 0 ; Ошибка, возврат с нулевыми значениями десятков и единиц
Units_End
retlw 1 ; Возврат с посчитанными значениями десятков и единиц
Пн мар 13, 2017 20:03:39
Пн мар 13, 2017 21:00:31
BinBCD clrf MSD
movwf LSD
gtenth movlw .10
subwf LSD,W
BTFSS STATUS,C
goto over
movwf LSD
incf MSD, F
goto gtenth
over retlw 0