Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Микроконтроллеры других производителей

Микроконтроллеры других производителей Все, что касается микроконтроллеров и НЕ подошло в раздел Microchip.

Ответ
 
Опции темы Опции просмотра
Старый 19.11.2007, 16:56   #1
Катя
Junior Member
 
Регистрация: 12.11.2007
Возраст: 34
Сообщений: 17
Вес репутации: 116/43
Катя will become famous soon enoughКатя will become famous soon enough
По умолчанию Помогите, пожалуйста, найти ошибку в коде

Помогите найти ошибку, уже полгода мучаюсь со схемой и программой. Со схемой вроде разобралась, в программе есть ошибка.
Смысл схемы следующий:
есть 3 режима работы (переключатель на 3 положения):
1) КАЛИБРОВКА (в флеш-память контроллера при нажатии кнопки ВВОД записываются напряжения с 12 разрядн. встроенного АЦП Lo_Uz, Hi_Uz - минимальное, Lo_Uo, Hi_Uo - максимальное, и числа (могут быть одинаковыми), которым соответствует данное напряжение. Вычисляется и записывается в флеш среднее знач. U - соответствует числу 0. Числа задаются при помощи кнопок.)
2) УСТАНОВКА (Здесь задаются числа на индикации, обязательно меньшие чем калибровочные (могут быть одинаковыми) и записываются в флеш-память. Контроллер пересчитывает, какому U соответсвуют эти числа по прямой, заданной калибровочными значениями)
3) ИЗМЕРЕНИЕ (измеряем U с переменного резистора. При Uzpr<U<Uopr (установочные значение), отображается соответствующее число на индикации, при U> Uopr или U<Uzpr горит "ПЕР " (перегрузка).
ВОТ ТУТ И ОШИБКА - В ИЗМЕРЕНИИ.
При некоторых калибровочных значениях ошибки нет, нормально работает, а при некоторых других - горит "ПЕР". Во флеш записывается, АЦП нормально измеряет, в режимы переходит (видно по индикации).
Подскажите хоть что-нибудь, не знаю, что дальше делать.
Текст процедуры измерения:

.Izmerenie_F:
// Proverka previshenija usilija pri Otkritii

mov [ch_u], 0

mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov A, [Hi_Uopr]
cmp A, [Hi_U]
jc .r1
jnz .prov_z
mov A, [Lo_Uopr]
cmp A, [Lo_U]
jc .r1

// Proverka previshenija usilija pri Zakritii
.prov_z:
mov A, [Hi_U]
cmp A, [Hi_Uzpr]
jc .r2
jnz .r3
mov A, [Lo_U]
cmp A, [Lo_Uzpr]
jc .r2
jmp .r3

//***************************************
// Otkritie P2(7)
.r1:
mov [perO], 1
mov [fo], 1
mov [fz], 0
mov [Data1indik], 17 // 0b11101100 // P
mov [Data2indik], 14 // 0b10011101 // E
mov [Data3indik], 19 // 0b11001101 // R
jmp .end_izm
//***************************************
// Zakritie P2(5)
.r2:
mov [perZ], 1
mov [fo], 0
mov [fz], 1
mov [Data1indik], 17 // 0b11101100 // P
mov [Data2indik], 14 // 0b10011101 // E
mov [Data3indik], 19 // 0b11001101 // R
jmp .end_izm
//*****************************************
// Otobrazhenie_usilija
.r3: // Opredelenie napravl. dvizhenija
mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov [perO], 0
mov [perZ], 0
mov A, [Hi_U]
cmp A, [Hi_Usr] // sravn po starshim razrjadam
jz .n1
jnc .Find_Fo
jmp .Find_Fz
.n1:
mov A, [Lo_U]
cmp A, [Lo_Usr] // sravn po mladshim razrjadam
jz .nul
jnc .Find_Fo
jmp .Find_Fz

.Find_Fo:
mov [fo], 1
mov [fz], 0
call .Vibor_perehoda
jmp .end_izm

.Vibor_perehoda: // % - Fo
mov A, [PortIn]
and A, 0b00000001
jnz .mBtn1
call .V_Fo
jmp .mBtn2
.mBtn1:
call .V_procentah
.mBtn2:
ret
.V_Fo: // Perevod U v F otkritija
mov [MUL_AL], [Lo_U]
mov [MUL_AH], [Hi_U]
mov A, [Lo_Usr]
sub [MUL_AL], A // U - Usr
mov A, [Hi_Usr]
sbb [MUL_AH], A
mov [MUL_BL], [Lo_Fo]
mov [MUL_BH], [Hi_Fo]
call _mul // (U - Usr)*Fo
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Uo]
sub A, [Lo_Usr]
mov [DIV_BL], A // (Uo-Usr)
mov A, [Hi_Uo]
sbb A, [Hi_Usr]
mov [DIV_BH], A
call _div // F=(U-Usr)*Fo/ (Uo-Usr)
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret
.V_procentah:
mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov A, [Lo_U]
sub A, [Lo_Usr]
mov [MUL_AL], A
mov A, [Hi_U]
sbb A, [Hi_Usr]
mov [MUL_AH], A
mov [MUL_BL], 0b01100100 //= 100
mov [MUL_BH], 0
call _mul
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Uopr]
sub A, [Lo_Usr]
mov [DIV_BL], A
mov A, [Hi_Uopr]
sbb A, [Hi_Usr]
mov [DIV_BH], A
call _div
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret

//********************************************
.Find_Fz:
mov [fo], 0
mov [fz], 1
call .Vibor_perehoda1
jmp .end_izm

.Vibor_perehoda1: // % - Fz
mov A, [PortIn]
and A, 0b00000001
jnz .mBtn3
call .V_Fz
jmp .mBtn4
.mBtn3:
call .V_procentah1
; mov [Flag_tochki], 1
.mBtn4:
ret
.V_Fz: // Perevod U v F zakritija
mov A, [Lo_Usr]
sub A, [Lo_U]
mov [MUL_AL], A //Usr-U
mov A, [Hi_Usr]
sbb A, [Hi_U]
mov [MUL_AH], A
mov [MUL_BL], [Lo_Fz]
mov [MUL_BH], [Hi_Fz]
call _mul // (Usr-U)*Fz
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Usr]
sub A, [Lo_Uz] // Usr-Uz
mov [DIV_BL], A
mov A, [Hi_Usr]
sbb A, [Hi_Uz]
mov [DIV_BH], A
call _div // (Usr-U)*Fz/ (Usr-Uz)
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret
.V_procentah1:
mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov A, [Lo_Usr]
sub A, [Lo_U]
mov [MUL_AL], A
mov A, [Hi_Usr]
sbb A, [Hi_U]
mov [MUL_AH], A
mov [MUL_BL], 0b01100100 //= 100
mov [MUL_BH], 0
call _mul // (Usr-U)*100
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Usr]
sub A, [Lo_Uzpr]
mov [DIV_BL], A
mov A, [Hi_Usr]
sbb A, [Hi_Uzpr]
mov [DIV_BH], A
call _div
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret
.nul:
mov [fo], 0
mov [fz], 0
mov [chiclo_L], 0
mov [chiclo_H], 0

//*****************************************
.end_izm:
ret
Катя вне форума   Ответить с цитированием
Старый 19.11.2007, 17:02   #2
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 43
Сообщений: 2,610
Вес репутации: 2570/96
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Какой микроконтроллер применяется?
fantom вне форума   Ответить с цитированием
Старый 19.11.2007, 17:44   #3
Марк
Senior Member
 
Аватар для Марк
 
Регистрация: 18.08.2007
Адрес: МО
Возраст: 59
Сообщений: 2,410
Вес репутации: 3250/99
Марк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond reputeМарк has a reputation beyond repute
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Как будто 51-ый...
Марк вне форума   Ответить с цитированием
Старый 19.11.2007, 20:12   #4
Greg
Super Moderator
 
Регистрация: 25.02.2007
Адрес: Moscow, ODBS
Сообщений: 6,813
Вес репутации: 5440/167
Greg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond reputeGreg has a reputation beyond repute
По умолчанию маловато информации

Цитата:
Сообщение от Катя Посмотреть сообщение
Помогите найти ошибку, уже полгода мучаюсь со схемой и программой. Со схемой вроде разобралась, в программе есть ошибка.
Подскажите хоть что-нибудь, не знаю, что дальше делать.
Текст процедуры измерения:
киньте сюда проект целиком (целиком проект, а не один из исходников)
и не забудьте написать, что за проц и среда (разработки). Да комментариев побольше добавьте про "закрытие" и "открытие"

на сахаре недавно хороший банер - "приём ведёт бригада телепатов".
Greg вне форума   Ответить с цитированием
Старый 20.11.2007, 13:25   #5
Катя
Junior Member
 
Регистрация: 12.11.2007
Возраст: 34
Сообщений: 17
Вес репутации: 116/43
Катя will become famous soon enoughКатя will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Контроллер я использую СY8C27443-24PXI фирмы Cypress.
Весь код очень большой (несколько модулей). Модуль опроса АЦП уже отработан, должен быть вернымю. Обращения к флеш тоже работает, в нем я вызываю стандартные для контроллера процедуры ReadBlock и WriteBlock.

1) Модуль, в котором определение переменных, инициализация и бесконечный цикл.

include "m8c.inc" ; part specific constants and macros
include "memory.inc" ; Constants & macros for SMM/LMM and Compiler
include "PSoCAPI.inc" ; PSoC API definitions for all User Modules
include "const.inc" // в этом модуле определены константы для записи в флеш
include "adcinc12_1.inc" // подключен стандартный модуль для конт-ра по работе с АЦП

export _main

AREA bss (RAM, REL)
// Dannue ot 12-bitnogo ACP
LoDataACP:: BLK 1
HiDataACP:: BLK 1
// Dlja procedury "_Zapusk_ot_sliptimer"
i1:: blk 1 //Счетчики для получения необходимой частоты
i2:: blk 1 //Schetchik
i3:: blk 1 //Schetchik
i4:: blk 1
// Dlja procedury "_Visvechivanie_indikatora"
Data1indik:: BLK 1 // levaja cifra
Data2indik:: BLK 1 // srednaja cifra
Data3indik:: BLK 1 // pravaja cifra
k:: blk 1 // Schetchik
sto:: blk 1 // используется при переводе chiclo_L, chiclo_H в цифры для индикатора
ks:: blk 1 // цифра для индикатора (индикатор 3-разрядный) - количество сотен
kd:: blk 1 // количество десяток
ke:: blk 1 // количество единиц
ch_k:: blk 1 // используется в _Perevod_v_indik

// число, которое должно отображаться на индикаторе
chiclo_L:: blk 1 //dlja indikacii
chiclo_H:: blk 1 //dlja indikacii

// счетчики используются при калибровке, установке
ch_zap:: blk 1
ch_u:: blk 1
ch_o:: blk 1
ch_z:: blk 1

k_:: blk 1

Flag3:: blk 1 // была ли запись 1-го значения в флеш при установке
Flag_z1:: blk 1 // была ли запись 1-го значения в флеш при калибровке

// Dlja procedury "_Summirovanie_kodov_ACP"
Data1sum:: BLK 1
Data2sum:: BLK 1
Data3sum:: BLK 1

// используются в измерении
perO:: blk 1 // перегрузка по открытию
perZ:: blk 1 // перегрузка по закрытию
fo:: blk 1
fz:: blk 1

// Dlja procedury
//"_Opros_porta_upravljaushix_perekljuchatelej"
PortIn:: blk 1
; PortIn[0] - ustanovka usilia
; PortIn[1] - 0 - %, 1 - mA
; PortIn[2] - vvod
; PortIn[3] - kalibrovka
; PortIn[4] - inc
; PortIn[5] - ne ispoljzuetsa
; PortIn[6] - dec
; PortIn[7] - ne ispoljzuetsa
// Dlja procedury "_Osrednenie_ACP"
HiDataACP_sredn:: blk 1 // сигнал с АЦП
LoDataACP_sredn:: blk 1
Lo_U:: BLK 1 // промежуточные переменные
Hi_U:: BLK 1
// umnozheniye
MUL_AH:: blk 1
MUL_AL:: blk 1
MUL_BH:: blk 1
MUL_BL:: blk 1
MUL_CF:: blk 1
MUL_CE:: blk 1
MUL_CH:: blk 1
MUL_CL:: blk 1
z:: blk 1
// deleniye
DIV_AF:: blk 1
DIV_AE:: blk 1
DIV_AH:: blk 1
DIV_AL:: blk 1
DIV_BH:: blk 1
DIV_BL:: blk 1
DIV_CH:: blk 1
DIV_CL:: blk 1
k1:: blk 1
k2:: blk 1
k3:: blk 1
X1:: blk 1
AREA text (ROM, REL)
_main:
; Insert your main assembly code here.
// Nachalniye znacheniya // dlya "covents"

// Initializacia systemnaya
or reg[INT_MSK0], 0b01000000
M8C_EnableGInt

// init ADC
mov A, ADCINC12_1_HIGHPOWER
call ADCINC12_1_Start
// ADC is set to continous sampling
mov A, 0x00;
call ADCINC12_1_GetSamples
// Obnulenie schetchikov
// dlja procedury "_Zapusk_ot_sliptimer"

mov [i1], 0
mov [i2], 0
mov [i3], 0
mov [i4], 0

// Obnulenia dlja procedury
// "_Visvechivanie_indikatora"
mov [k], 0
mov [Data1indik], 0
mov [Data2indik], 0
mov [Data3indik], 0
mov [perO], 0
mov [perZ], 0

mov [fo], 0
mov [fz], 0
// Obnulenia dlja procedury
// "_Summirovanie_kodov_ACP"
mov [Data1sum], 0
mov [Data2sum], 0
mov [Data3sum], 0
mov [chiclo_L], 88
mov [chiclo_H], 2

mov [ch_zap], 0
mov [Flag_z1], 0
mov [Flag3], 0
mov [ch_u], 0
mov [ch_o], 0
mov [k_], 0

call _ReadBlock // чтение из флеш-памяти

// Beskonechnuj pustoj cikl, vixod
// po apparatnomy preruvaniu ot SlipTimer
.Ozhidanie_preruvania:
call _Zapusk_ot_sliptimer
jmp .Ozhidanie_preruvania

2) Модуль, в котором вызываются все подпрограммы
export _Zapusk_ot_sliptimer
// ---------------------------------------------
// Modulj zapuskaetsa po apparatnomy preruvaniu

_Zapusk_ot_sliptimer: // vxodnue - i1,i2
push A
//
inc [i4]
cmp [i4], 240 // подбор частоты
jnz .konec_Zapusk_ot_sliptimer
mov [i4], 0

inc [i3]
cmp [i3], 4
jnz .konec_Zapusk_ot_sliptimer
mov [i3], 0
inc [i1]
cmp [i1], 2
jnz .konec_Zapusk_ot_sliptimer
mov [i1], 0
//
call _Vusvechivanie_indikatora
//
call _Opros_ACP
call _Summirovanie_kodov_ACP
//
inc [i2]
cmp [i2], 64
jnz .konec_Zapusk_ot_sliptimer
mov [i2],0
call _Osrednenie_ACP
mov [Data1sum], 0
mov [Data2sum], 0
mov [Data3sum], 0
call _Perevod_v_indik // Перевод числа в индикацию
call _Opros_porta_upravljaushix_perekluchatelej
call _Vibor_rezhima // Основная программа
.konec_Zapusk_ot_sliptimer:
pop A
ret


3) Модуль covernts - все вычисления. 3 режима : калибровка, установка и измерение

include "m8c.inc"
include "const.inc"
export _Opros_porta_upravljaushix_perekluchatelej
export _Vibor_rezhima
//*************************************
_Opros_porta_upravljaushix_perekluchatelej:
mov A, reg[PRT1DR]
mov [PortIn], A // считывание данных с порта
ret
//*************************************
_Vibor_rezhima:// в зависимости от кнопки переходим в соответствующий режим
mov A, [PortIn]
and A, 0b00001000
jnz .Kalibrovka
mov A, [PortIn]
and A, 0b00000010
jnz .Ustanovka_F
jmp .Izmerenie_F
jmp .end
//*************************************
.Ust_chicla: // увеличение или уменьшение на 1 отображаемого числа
mov A, [PortIn]
and A, 0b00010000
jnz .uv
mov A, [PortIn]
and A, 0b01000000
jnz .um
jmp .end_u
.uv:
add [chiclo_L], 1
adc [chiclo_H], 0
jmp .end_u
.um:
sub [chiclo_L], 1
sbb [chiclo_H], 0
.end_u: ret

//====================================
.Kalibrovka:
cmp [Flag1], 1 // была ли запись в флеш память
jnz .k //нет
;.pred_zap:
mov [chiclo_L], [Lo_Fz] // да, присваиваются значения из флеш
mov [chiclo_H], [Hi_Fz]
mov [Flag1], 0
//
.k: call .Ust_chicla
///
mov A, [ch_zap] //
cmp A, 15
jz .end_kal // если ch_zap = 15, то на конец калибровки

mov A, [Flag_z1] // проверка, было ли записано 1-е значение
cmp A, 1
jc .zap1 // нет
jz .zap2 // да
jmp .end_kal // иначе на конец

.zap1: // запись 1-го знач.
mov A, [PortIn]
and A, 0b00000100 // кнопка ввода нажата?
jz .end_kal // нет
inc [ch_zap] //да
mov A, [ch_zap]
dec A // сначала переходим на z1, потом z2
jz .z1
dec A
jz .z2
jmp .end_kal
.zap2: // запись 2-го знач.
mov A, [PortIn]
and A, 0b00000100// кнопка ввода нажата?
jz .end_kal
inc [ch_zap]
mov A, [ch_zap]
dec A // поскольку используется тот же счетчик, что и при записи 1-го знач.
dec A
dec A
jz .o1 // сначала переходим на о1, потом о2
dec A
jz .o2
jmp .end_kal
// Zapic znachenija na zakritie
.z1: // Присвоение константам для флеш значений
mov [Lo_Fz], [chiclo_L]
mov [Hi_Fz], [chiclo_H]
mov [Lo_Uz], [LoDataACP_sredn]
mov [Hi_Uz], [HiDataACP_sredn]
jmp .end_kal
.z2: // индикация
mov [Data1indik], 15 //0b10001101 // F
mov [Data2indik], 16 //0b00010000 // _
mov [Data3indik], 3 //0b11110001 // Z
mov [Flag_z1], 1 // zapicano 1 znachenie
jmp .end_kal
// Zapic znachenija na otkritie
.o1: // Присвоение константам для флеш значений
// нахождение Usr и запись во флеш
mov [Lo_Fo], [chiclo_L]
mov [Hi_Fo], [chiclo_H]
mov [Flag1], 1
mov [Lo_Uo], [LoDataACP_sredn]
mov [Hi_Uo], [HiDataACP_sredn]
// Nahozhdenie Usr
mov [Lo_Usr], [Lo_Uo]
mov [Hi_Usr], [Hi_Uo]
mov A, [Lo_Uz]
sub [Lo_Usr], A
mov A, [Hi_Uz]
sbb [Hi_Usr], A // (Uo-Uz)

mov A, 1 // ne objazatelno
cmp A, 0 // clear CF
// (Uo-Uz)/ 2
rrc [Hi_Usr]
rrc [Lo_Usr]
mov A, [Lo_Uz]
add [Lo_Usr], A
mov A, [Hi_Uz]
adc [Hi_Usr], A
call _WriteBlock
jmp .end_kal
.o2: // индикация
mov [Data1indik], 15 //0b10001101 //F
mov [Data2indik], 16 //_
mov [Data3indik], 0 //0b11111100 //O
mov [Flag_z1], 0 // обнуляем флаг записи 1-го знач.
mov [ch_zap], 15
jmp .end_kal
.end_kal:
ret
//==============================
.Ustanovka_F:
cmp [Flag2],1 // была ли запись в флеш?
jnz .f // нет
; pred. zap. //да, считываем из флеш
mov [chiclo_L], [Lo_Fzpr]
mov [chiclo_H], [Hi_Fzpr]
mov [Flag2], 0
.f:
call .Ust_chicla // изменение числа
/// ввела уже пойзже, на высякий случай, чтобы правильно осущ.-ся переход
mov A, [ch_u]
cmp A, 15
jz .end_ust
///
mov A, [Flag3] // Proverka bila li zapis 1 znachenija
cmp A, 1
jc .uz // Ustanovka Uz
jz .uo // Ustanovka Uo
jmp .end_ust
//***********************************
.uz: //установка усилия на закрытие
mov A, [PortIn]
and A, 0b00000100 // кнопка ввода нажата?
jz .end_ust // нет
inc [ch_u] //да
mov A, [ch_u] // счетчик для перехода на 1-ую и на 2-ую запись
dec A
jz .uz1 //переходим на Uz1
dec A
jz .uz2 //переходим на Uz2
jmp .end_ust
.uo://установка усилия на открытие
mov A, [PortIn]
and A, 0b00000100 // ввод нажат?
jz .end_ust //нет
inc [ch_u] // да
mov A, [ch_u]
dec A
dec A
dec A
jz .uo1
dec A
jz .uo2
jmp .end_ust
.uz1: // заносится в константы число
mov [Lo_Fzpr], [chiclo_L]
mov [Hi_Fzpr], [chiclo_H]
//Perevod dlja zapominanija v U
mov [MUL_AL], [Lo_Usr] // пересчитывается число в напряжение
mov [MUL_AH], [Hi_Usr] // по уравнению прямой
mov A, [Lo_Uz]
sub [MUL_AL], A // (Usr-Uz)
mov A, [Hi_Uz]
sbb [MUL_AH], A
mov [MUL_BL], [Lo_Fzpr]
mov [MUL_BH], [Hi_Fzpr]
call _mul // (Usr-Uz)* Fzpr
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov [DIV_BL], [Lo_Fz]
mov [DIV_BH], [Hi_Fz]
call _div // (Usr-Uz)* Fzpr/ Fz

mov [Lo_U], [Lo_Usr]
mov [Hi_U], [Hi_Usr]
mov A, [DIV_CL]
sub [Lo_U], A // Usr - (Usr-Uz)* Fzpr/ Fz
mov A, [DIV_CH]
sbb [Hi_U], A

mov [Lo_Uzpr], [Lo_U] // присваивается расчетное знач. константам для флеш
mov [Hi_Uzpr], [Hi_U]
jmp .end_ust

.uz2: //ВЫвод на индикацию, что была запись
mov [Data1indik],15 //0b10001101 //F
mov [Data2indik], 3 // 0b11110001 //3
mov [Data3indik], 17 //0b11101100 //P
mov [Flag3], 1 //было записано 1 знач.
jmp .end_ust
.uo1: //открытие
mov [Lo_Fopr], [chiclo_L]
mov [Hi_Fopr], [chiclo_H]
//Perevod dlja zapominanija v U
mov [MUL_AL], [Lo_Uo] // (Uo-Usr)
mov [MUL_AH], [Hi_Uo]
mov A, [Lo_Usr]
sub [MUL_AL] , A
mov A, [Hi_Usr]
sbb [MUL_AH], A
mov [MUL_BL], [Lo_Fopr]
mov [MUL_BH], [Hi_Fopr]
call _mul // (Uo-Usr)*Fopr
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov [DIV_BL], [Lo_Fo]
mov [DIV_BH], [Hi_Fo]
call _div // (Uo-Usr)*Fopr/ Fo
mov A, [Lo_Usr]
add [DIV_CL], A
mov A, [Hi_Usr]
adc [DIV_CH], A
mov [Lo_Uopr], [DIV_CL] // (Uo-Usr)*Fop/ Fo + Usr
mov [Hi_Uopr], [DIV_CH]
mov [Flag2], 1
mov [Flag1], 1 // запись во флеш была
call _WriteBlock //при записи во флеш переписываются сразу все константы
jmp .end_ust
.uo2: // Индикация
mov [Data1indik],15 //0b10001101 //F
mov [Data2indik], 0 //0b11111100 //O
mov [Data3indik], 17 //0b11101100 //P
mov [Flag3], 0
mov [ch_u], 15
jmp .end_ust

//**********************************
.end_ust:
ret

//============================
.Izmerenie_F:
// Proverka previshenija usilija pri Otkritii
mov [ch_u], 0

mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov A, [Hi_Uopr]
cmp A, [Hi_U]//если текущее напряж. старшие биты больше Uopr,то r1
jc .r1
jnz .prov_z //если не равны, то .prov_z
mov A, [Lo_Uopr] // иначе проверяем младшие биты
cmp A, [Lo_U]
jc .r1 //Lo_Uopr меньше Lo_U , тогда перегрузка на открытие

// Proverka previshenija usilija pri Zakritii
.prov_z:
mov A, [Hi_U]
cmp A, [Hi_Uzpr]//если текущее напряж. старшие биты меньше Uzpr,то r2
jc .r2
jnz .r3 // если старшие биты не равны, то .r3
mov A, [Lo_U]
cmp A, [Lo_Uzpr] // проверка младших битов, если меньше, то .r2 иначе .r3
jc .r2
jmp .r3

// Otkritie P2(7)
.r1: // Bylbrfwbz
mov [perO], 1 // перегрузка на откр.
mov [fo], 1 // усилие на открытие (горит светодиод)
mov [fz], 0
mov [Data1indik], 17 // 0b11101100 // P
mov [Data2indik], 14 // 0b10011101 // E
mov [Data3indik], 19 // 0b11001101 // R
jmp .end_izm
//***************************************
// Zakritie P2(5) //индикация
.r2:
mov [perZ], 1//перегрузка на закрытие
mov [fo], 0
mov [fz], 1 // усилие на закр.
mov [Data1indik], 17 // 0b11101100 // P
mov [Data2indik], 14 // 0b10011101 // E
mov [Data3indik], 19 // 0b11001101 // R
jmp .end_izm
//*****************************************
// Otobrazhenie_usilija
.r3: // Opredelenie napravl. dvizhenija (относительно среднего)
mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov [perO], 0
mov [perZ], 0
mov A, [Hi_U]
cmp A, [Hi_Usr] // sravn po starshim razrjadam
jz .n1 // проверка младших битов
jnc .Find_Fo// текущее напряжение больше среднего
jmp .Find_Fz // текущее напряж. меньше среднего
.n1:
mov A, [Lo_U]
cmp A, [Lo_Usr] // sravn po mladshim razrjadam
jz .nul // = среднему
jnc .Find_Fo //больше среднего
jmp .Find_Fz // меньше среднего

.Find_Fo: // усилие на открытие
mov [fo], 1
mov [fz], 0
call .Vibor_perehoda
jmp .end_izm

.Vibor_perehoda: // % - Fo
mov A, [PortIn]
and A, 0b00000001 // кнопка % нажата
jnz .mBtn1
call .V_Fo
jmp .mBtn2
.mBtn1:
call .V_procentah
.mBtn2:
ret
//Измеряется текущее напряж. и пересчитывается в число для отображения
.V_Fo: // Perevod U v F otkritija
mov [MUL_AL], [Lo_U]
mov [MUL_AH], [Hi_U]
mov A, [Lo_Usr]
sub [MUL_AL], A // U - Usr
mov A, [Hi_Usr]
sbb [MUL_AH], A
mov [MUL_BL], [Lo_Fo]
mov [MUL_BH], [Hi_Fo]
call _mul // (U - Usr)*Fo
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Uo]
sub A, [Lo_Usr]
mov [DIV_BL], A // (Uo-Usr)
mov A, [Hi_Uo]
sbb A, [Hi_Usr]
mov [DIV_BH], A
call _div // F=(U-Usr)*Fo/ (Uo-Usr)
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret

.V_procentah:// если нажаты %, переводится в %
mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov A, [Lo_U]
sub A, [Lo_Usr]
mov [MUL_AL], A
mov A, [Hi_U]
sbb A, [Hi_Usr]
mov [MUL_AH], A
mov [MUL_BL], 0b01100100 //= 100
mov [MUL_BH], 0
call _mul
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Uopr]
sub A, [Lo_Usr]
mov [DIV_BL], A
mov A, [Hi_Uopr]
sbb A, [Hi_Usr]
mov [DIV_BH], A
call _div
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret

//********************************************
.Find_Fz:// на закрытие
mov [fo], 0
mov [fz], 1
call .Vibor_perehoda1
jmp .end_izm

.Vibor_perehoda1: // % - Fz
mov A, [PortIn]
and A, 0b00000001
jnz .mBtn3
call .V_Fz
jmp .mBtn4
.mBtn3:
call .V_procentah1
.mBtn4:
ret
.V_Fz: // Perevod U v F zakritija
mov A, [Lo_Usr]
sub A, [Lo_U]
mov [MUL_AL], A //Usr-U
mov A, [Hi_Usr]
sbb A, [Hi_U]
mov [MUL_AH], A
mov [MUL_BL], [Lo_Fz]
mov [MUL_BH], [Hi_Fz]
call _mul // (Usr-U)*Fz
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Usr]
sub A, [Lo_Uz] // Usr-Uz
mov [DIV_BL], A
mov A, [Hi_Usr]
sbb A, [Hi_Uz]
mov [DIV_BH], A
call _div // (Usr-U)*Fz/ (Usr-Uz)
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret
.V_procentah1:
mov [Lo_U], [LoDataACP_sredn]
mov [Hi_U], [HiDataACP_sredn]
mov A, [Lo_Usr]
sub A, [Lo_U]
mov [MUL_AL], A
mov A, [Hi_Usr]
sbb A, [Hi_U]
mov [MUL_AH], A
mov [MUL_BL], 0b01100100 //= 100
mov [MUL_BH], 0
call _mul // (Usr-U)*100
mov [DIV_AL], [MUL_CL]
mov [DIV_AH], [MUL_CH]
mov [DIV_AE], [MUL_CE]
mov [DIV_AF], [MUL_CF]
mov A, [Lo_Usr]
sub A, [Lo_Uzpr]
mov [DIV_BL], A
mov A, [Hi_Usr]
sbb A, [Hi_Uzpr]
mov [DIV_BH], A
call _div
mov [chiclo_L], [DIV_CL]
mov [chiclo_H], [DIV_CH]
ret
.nul:
mov [fo], 0
mov [fz], 0
mov [chiclo_L], 0
mov [chiclo_H], 0

//*****************************************
.end_izm:
ret

.end:
ret

3)
export _cifra_segmentu // переводит цифру для индикации в число, которое надо отправить на индикатор
export _Perevod_v_indik// переводит chiclo_L, chiclo_H в 3 цифры для индикации
; ====== additional units ========
; ================================
// Dlya modulya "_Cyfra_segmentu"
num0i:: equ 0b11111100
num1i:: equ 0b01100000
num2i:: equ 0b11011001
num3i:: equ 0b11110001
num4i:: equ 0b01100101
num5i:: equ 0b10110101
num6i:: equ 0b10111101
num7i:: equ 0b11100000
num8i:: equ 0b11111101
num9i:: equ 0b11110101
; PORT0DR[0] - gorizontalnaya srednyaya liniya
; PORT0DR[1] - tochka posle cifri
; PORT0DR[2] - vertikalnaya sleva vverhu
; PORT0DR[3] - vertikalnaya sleva vnizu
; PORT0DR[4] - gorizontalnaya vnizu
; PORT0DR[5] - vertikalnaya sprava vnizu
; PORT0DR[6] - vertikalnaya sprava vverhu
; PORT0DR[7] - gorizontalnaya vverhu
;
numAi:: equ 0b11101101 //10
numBi:: equ 0b00111101 //11
numCi:: equ 0b10011100 //12
numDi:: equ 0b01111001 //13
numEi:: equ 0b10011101 //14
numFi:: equ 0b10001101 //15
//====================
numHi:: equ 0b01101101
numPi:: equ 0b11101100 //17
numRi:: equ 0b00001001 //18
num_i:: equ 0b00010000 //16
numPi_:: equ 0b11001101 //19
;
;====================

; case what number will shows
; input A - bin number
; output A - indikator code
_cifra_segmentu:
cmp A, 0
jz .m0
dec A
jz .m1
dec A
jz .m2
dec A
jz .m3
dec A
jz .m4
dec A
jz .m5
dec A
jz .m6
dec A
jz .m7
dec A
jz .m8
dec A
jz .m9
dec A
jz .mA
dec A
jz .mB
dec A
jz .mC
dec A
jz .mD
dec A
jz .mEh
dec A
jz .mF
dec A
jz .m_
dec A
jz .mP
dec A
jz .mR
dec A
jz .mP_
mov A, 0b00000001
jmp .me
.m0:
mov A, num0i
jmp .me
.m1:
mov A, num1i
jmp .me
.m2:
mov A, num2i
jmp .me
.m3:
mov A, num3i
jmp .me
.m4:
mov A, num4i
jmp .me
.m5:
mov A, num5i
jmp .me
.m6:
mov A, num6i
jmp .me
.m7:
mov A, num7i
jmp .me
.m8:
mov A, num8i
jmp .me
.m9:
mov A, num9i
jmp .me
.mA:
mov A, numAi
jmp .me
.mB:
mov A, numBi
jmp .me
.mC:
mov A, numCi
jmp .me
.mD:
mov A, numDi
jmp .me
.mEh:
mov A, numEi
jmp .me
.mF:
mov A, numFi
jmp .me
.m_:
mov A, num_i
jmp .me
.mH:
mov A, numHi
jmp .me
.mP:
mov A, numPi
jmp .me
.mR:
mov A, numRi
jmp .me
.mP_:
mov A, numPi_
jmp .me
.me:
ret

; Perevodit byte v tri desyatichniye cifry
_Perevod_v_indik:
mov [ks], 0
mov [kd], 0
mov [ke], 0
mov [sto], 100
mov A, [chiclo_L]
mov [X1], [chiclo_H]
mov [ch_k], [chiclo_H]
.sotni:
cmp [X1], 0
jz .sotni_ // если chiclo_H =0, переходим на .sotni_
// максимальное число на индикации 999 = 11 11100111, 100 =1100100
// определяем количество сотен в старшем бите
asr [sto] // максимальное число сдвигов 2
asr [X1]
rrc A
jmp .sotni
.sotni_:
cmp A,[sto]
jc .eSotni
inc [ks]
sub A, [sto]
jmp .sotni_
.eSotni: // определяем количество сотен в младшем разряде
mov [Data1indik], [ks]
mov A, [chiclo_L]
cmp [ch_k], 3 //корректировка при старшем байте не равном 0
jnc .pl68 //768 = 11 00000000
cmp [ch_k], 2
jnc .pl12 //512 = 10 00000000
cmp [ch_k], 1
jnc .pl56 //256 = 1 00000000
jmp .eSotni_
.pl68:
mov [kd], 6
mov [ke], 8
jmp .eSotni_
.pl12:
mov [kd], 1
mov [ke], 2
jmp .eSotni_
.pl56:
mov [kd], 5
mov [ke], 6

.eSotni_: // раскладываем на цифры младший байт
cmp A, 100
jc .des
sub A, 100
jmp .eSotni_
.des: // определяем кол.-во десяток
cmp A, 10
jc .edes
inc [kd]
sub A, 10
jmp .des

.edes:// кол-во единиц
cmp [kd], 10
jc .ed_
sub [kd], 10
jmp .edes
.ed_:
inc A
.ed:
dec A
jz .end_ed
inc [ke]
jmp .ed

.end_ed:
cmp [ke], 10 // корректировка если возникло переполнение в единицах (больше 10)
jc .end_per
sub [ke], 10
inc [kd]
jmp .end_ed

.end_per:
cmp [kd],10 // корректировка, если в десятках больше 10
jc .end1
sub [kd], 10
.end1:
mov [Data2indik], [kd]
mov [Data3indik], [ke]
ret

4) Высвечивание индикации, светодиодов
; part specific constants and macros
include "m8c.inc"
export _Vusvechivanie_indikatora

//только цифры индикаторов
ind0i:: equ 0b00000000 // ni odnogo
ind1i:: equ 0b00000001 // perviy indikator
ind2i:: equ 0b00000100 // vtoroy indikator
ind3i:: equ 0b00010000 // tretiy indikator
//индикатор + светодиод на откр.
ind0ifo:: equ 0b00001000 // ni odnogo
ind1ifo:: equ 0b00001001 // perviy indikator
ind2ifo:: equ 0b00001100 // vtoroy indikator
ind3ifo:: equ 0b00011000 // tretiy indikator
//индикатор + светодиод на закр.
ind0ifz:: equ 0b01000000 // ni odnogo
ind1ifz:: equ 0b01000001 // perviy indikator
ind2ifz:: equ 0b01000100 // vtoroy indikator
ind3ifz:: equ 0b01010000 // tretiy indikator
//индикатор + светодиод на закр.+на оптореле (перегрузка)
ind0iz:: equ 0b01100000 // ni odnogo
ind1iz:: equ 0b01100001 // perviy indikator
ind2iz:: equ 0b01100100 // vtoroy indikator
ind3iz:: equ 0b01110000 // tretiy indikator
//индикатор + светодиод на откр. + оптореле (прегрузка)
ind0io:: equ 0b10001000 // ni odnogo
ind1io:: equ 0b10001001 // perviy indikator
ind2io:: equ 0b10001100 // vtoroy indikator
ind3io:: equ 0b10011000 // tretiy indikator
_Vusvechivanie_indikatora:
inc [k]
mov A, [k]
and A, 0b00000011 // 1,2,3 индикатор
dec A
jz .s1 // 1
dec A
jz .s2 // 2
dec A
jz .s3 //3
jmp .s4

.s1:
mov A, [Data1indik]
call _cifra_segmentu
mov reg[PRT0DR], A // вывод в порт 0 контр-ра

mov A, [perO]
and A, 1 // перегрузка по открытию есть?
jz .k // нет
mov reg[PRT2DR], ind1io //да
jmp .konec_vusvechivania
.k:
mov A, [perZ]
and A, 1 // перегрузка по закрытию есть?
jz .k1 // нет
mov reg[PRT2DR], ind1iz // да
jmp .konec_vusvechivania
.k1:
mov A, [fo]
and A, 1 // усилие на открытие?
jz .kfz // нет
mov reg[PRT2DR], ind1ifo //да
jmp .konec_vusvechivania
.kfz:
mov A, [fz]
and A, 1// усилие на закрытие?
jz .kf // нет
mov reg[PRT2DR], ind1ifz// да
jmp .konec_vusvechivania
.kf:
mov reg[PRT2DR], ind1i
jmp .konec_vusvechivania


.s2: // для 2-го индикатора аналогично
mov A, [Data2indik]
call _cifra_segmentu

mov reg[PRT0DR], A
mov A, [perO]
and A, 1
jz .k_
mov reg[PRT2DR], ind2io
jmp .konec_vusvechivania
.k_:
mov A, [perZ]
and A, 1
jz .k1_
mov reg[PRT2DR], ind2iz
jmp .konec_vusvechivania
.k1_:
//
mov A, [fo]
and A, 1
jz .kfz_
mov reg[PRT2DR], ind2ifo
jmp .konec_vusvechivania
.kfz_:
mov A, [fz]
and A, 1
jz .kf_
mov reg[PRT2DR], ind2ifz
jmp .konec_vusvechivania
.kf_:
//
mov reg[PRT2DR], ind2i
jmp .konec_vusvechivania

.s3: // для 3-го индикатора
mov A, [Data3indik]
call _cifra_segmentu
mov reg[PRT0DR], A
mov [k], 0
//
mov A, [perO]
and A, 1
jz .k2
mov reg[PRT2DR], ind3io
jmp .konec_vusvechivania
.k2:
mov A, [perZ]
and A, 1
jz .k3
mov reg[PRT2DR], ind3iz
jmp .konec_vusvechivania
.k3:
mov A, [fo]
and A, 1
jz .kfz3
mov reg[PRT2DR], ind3ifo
jmp .konec_vusvechivania
.kfz3:
mov A, [fz]
and A, 1
jz .kf3
mov reg[PRT2DR], ind3ifz
jmp .konec_vusvechivania
.kf3:

mov reg[PRT2DR], ind3i
jmp .konec_vusvechivania
.s4:
mov reg[PRT0DR], 0x00
mov reg[PRT2DR], ind0i

.konec_vusvechivania:
ret

5) Процедуры умножения и деления
export _mul
export _div
_mul: // MUL_A * MUL_B = MUL_C
mov [MUL_CL], 0
mov [MUL_CH], 0
mov [MUL_CE], 0
mov [MUL_CF], 0
mov [z], 16
.loop:
asl [MUL_BL]
rlc [MUL_BH]
jc .sdvig_sum
.sdvig:
asl [MUL_CL]
rlc [MUL_CH] // Rotate Left with Carry
rlc [MUL_CE] // Rotate Left with Carry
rlc [MUL_CF] // Rotate Left with Carry
jmp .end_s
.sdvig_sum:
asl [MUL_CL]
rlc [MUL_CH] // Rotate Left with Carry
rlc [MUL_CE] // Rotate Left with Carry
rlc [MUL_CF] // Rotate Left with Carry
mov A, [MUL_AL]
add [MUL_CL], A
mov A, [MUL_AH]
adc [MUL_CH], A
adc [MUL_CE], 0
adc [MUL_CF], 0
jmp .end_s
.end_s:
dec [z]
cmp [z], 0
jnz .loop
.end:
mov A, [MUL_CL]
mov X, [MUL_CH]
ret

_div: // Деление 4 на 2 байтное
mov [DIV_CL], 0
mov [DIV_CH], 0
mov [k1], 0
mov [k2], 0

and [DIV_AF], 0b11111111
jnz .m1
and [DIV_AE], 0b11111111
jnz .m1
mov A, [DIV_AH]
cmp A, [DIV_BH]
jc .end
mov A, [DIV_AL]
cmp A, [DIV_BL]
jc .end

.m1:
mov A, [DIV_AF]
and A, 0xC0
jnz .m2
inc [k1]
asl [DIV_AL]
rlc [DIV_AH]
rlc [DIV_AE]
rlc [DIV_AF]
jmp .m1
.m2:
mov A, [DIV_BH]
and A, 0xC0
jnz .m3
inc [k2]
asl [DIV_BL]
rlc [DIV_BH]
jmp .m2
.m3:
// Deleniye chisel, nachinayuschihsya s 1
mov A, 17
add A, [k2]
sub A, [k1]
jc .end
jz .end
mov [z], A
.loop://---------------------------------
mov A, [DIV_BH]
cmp A, [DIV_AF]
jc .sdvig_razn
jnz .sdvig
mov A, [DIV_BL]
cmp A, [DIV_AE]
jc .sdvig_razn
jz .sdvig_razn

.sdvig:
asl [DIV_CL]
rlc [DIV_CH]
//==========
asl [DIV_AL]
rlc [DIV_AH]
rlc [DIV_AE]
rlc [DIV_AF]
jmp .end_s
.sdvig_razn:
asl [DIV_CL]
rlc [DIV_CH]
or [DIV_CL], 0x01
//==========
mov A, [DIV_BL]
sub [DIV_AE], A
mov A, [DIV_BH]
sbb [DIV_AF], A
//==========
asl [DIV_AL]
rlc [DIV_AH]
rlc [DIV_AE]
rlc [DIV_AF]
.end_s:
dec [z]
cmp [z], 0
jnz .loop//--------------------------------
.end:
ret

7) Модуль с константами:
// dlya "covents"
Hi_Fz: equ 128;0x0B
Lo_Fz: equ 129;0xD6
//==============
Hi_Uz: equ 130;0x0C
Lo_Uz: equ 131;0x95
//==============
Hi_Fo: equ 132;0x0F
Lo_Fo: equ 133;0x88
//==============
Hi_Uo: equ 134;0x03
Lo_Uo: equ 135;0xB2
//==================
Hi_Usr: equ 136;0x02
Lo_Usr: equ 137;0xF3
//==================
Hi_Uopr: equ 138;0x00
Lo_Uopr: equ 139;0xEF
//==================
Hi_Fopr: equ 140
Lo_Fopr: equ 141
//==================
Hi_Uzpr: equ 142
Lo_Uzpr: equ 143
//==================
Hi_Fzpr: equ 144
Lo_Fzpr: equ 145
Flag1: equ 146
Flag2: equ 147
// Dlja modulja "flash"
BLOCKID: equ 0xFA // Nomer bloka ROM
POINTER: equ 0xFB // Nomer bayta RAM
CLOCK: equ 0xFC
DELAY: equ 0xFE
Катя вне форума   Ответить с цитированием
Старый 20.11.2007, 14:06   #6
Катя
Junior Member
 
Регистрация: 12.11.2007
Возраст: 34
Сообщений: 17
Вес репутации: 116/43
Катя will become famous soon enoughКатя will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Среда разработки PSok Designer.
Еще, если нужны подпрограммы по работе с АЦП:
export _Summirovanie_kodov_ACP
export _Opros_ACP
export _Osrednenie_ACP
_Summirovanie_kodov_ACP:

mov A, [Data3sum]
add A, [LoDataACP]
mov [Data3sum], A

mov A, [Data2sum]
adc A, [HiDataACP]
mov [Data2sum], A

mov A, [Data1sum]
adc A, 0
mov [Data1sum], A

ret

_Opros_ACP: // vxodnue - HiDataACP,LoDataACP

.WaitADC:
call ADCINC12_1_fIsDataAvailable
jz .WaitADC
and F, 0xFE ; zapret preruvanij
call ADCINC12_1_ClearFlag
call ADCINC12_1_iGetData

mov [LoDataACP], A
mov [HiDataACP], X
add [HiDataACP], 0b00001000
and [HiDataACP], 0x0F

or F, 0x01; razreshenie preruvanij

ret

_Osrednenie_ACP:

mov A, [Data1sum]
asl A
asl A
and A, 0b11111100
mov [HiDataACP_sredn], A
mov A, [Data2sum]
asr A
asr A
asr A
asr A
asr A
asr A
and A, 0b00000011
add A, [HiDataACP_sredn]
mov [HiDataACP_sredn], A
//===============
mov A, [Data2sum]
asl A
asl A
and A, 0b11111100
mov [LoDataACP_sredn], A
mov A, [Data3sum]
asr A
asr A
asr A
asr A
asr A
asr A
and A, 0b00000011
add A, [LoDataACP_sredn]
mov [LoDataACP_sredn], A
//===============
ret
Катя вне форума   Ответить с цитированием
Старый 21.11.2007, 20:41   #7
Dmitry
Senior Member
 
Аватар для Dmitry
 
Регистрация: 25.02.2007
Адрес: Николаев
Сообщений: 344
Вес репутации: 358/51
Dmitry is just really niceDmitry is just really niceDmitry is just really niceDmitry is just really nice
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

А лучше, просто дайте денег.
Света.
__________________
иЗВиНиТе зА НероВнЫй поЧЕрк
Dmitry вне форума   Ответить с цитированием
Старый 22.11.2007, 09:55   #8
Катя
Junior Member
 
Регистрация: 12.11.2007
Возраст: 34
Сообщений: 17
Вес репутации: 116/43
Катя will become famous soon enoughКатя will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Извините, я даже не подумала, что это может так выглядеть, и уж точно не собиралась всю программу выставлять (просила ошибку помочь в начале найти).
Ладно, забудьте, сама разберусь, еще раз извините.
Катя вне форума   Ответить с цитированием
Старый 22.11.2007, 10:19   #9
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 43
Сообщений: 2,610
Вес репутации: 2570/96
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от Dmitry Посмотреть сообщение
А лучше, просто дайте денег.
Света.
Негде больше блеснуть сарказмом?
fantom вне форума   Ответить с цитированием
Старый 22.11.2007, 10:22   #10
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,285
Вес репутации: 2476/111
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

я сам люблю эти cypress, но зачем ассемблер когда есть С и объём памяти меньше 4К у них вообще не встречается даже у кристаллов за 1$, да и половину задачи можно железно сформировать с помощью конфигурации внутренней архитектуры-благо там это всё элементрано сделано ..
maagalex вне форума   Ответить с цитированием
Старый 22.11.2007, 14:36   #11
Dmitry
Senior Member
 
Аватар для Dmitry
 
Регистрация: 25.02.2007
Адрес: Николаев
Сообщений: 344
Вес репутации: 358/51
Dmitry is just really niceDmitry is just really niceDmitry is just really niceDmitry is just really nice
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от fantom Посмотреть сообщение
Негде больше блеснуть сарказмом?
есть где. просто здесь прикольнее. студент двоечник, прикинувшийся девочкой - чем не пофод для сарказма?
не будете же Вы всерьез утверждать, что автор поста адекватный и серьезный человек? кто бы ее деражал на работе если она эту программу пишет полгода? какой нормальный человек будет полгода делать такую программу? и почему вопрос задан по конкурирующей платформе?
__________________
иЗВиНиТе зА НероВнЫй поЧЕрк
Dmitry вне форума   Ответить с цитированием
Старый 22.11.2007, 15:05   #12
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 43
Сообщений: 2,610
Вес репутации: 2570/96
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от Dmitry Посмотреть сообщение
есть где. просто здесь прикольнее. студент двоечник, прикинувшийся девочкой - чем не пофод для сарказма?
Не поФод.

Цитата:
Сообщение от Dmitry Посмотреть сообщение
не будете же Вы всерьез утверждать, что автор поста адекватный и серьезный человек?
Будете.

Цитата:
Сообщение от Dmitry Посмотреть сообщение
кто бы ее деражал на работе если она эту программу пишет полгода?
А это уже, не Ваша забота.
fantom вне форума   Ответить с цитированием
Старый 22.11.2007, 15:56   #13
पण्डित
Senior Member
 
Регистрация: 23.04.2007
Возраст: 45
Сообщений: 301
Вес репутации: 105/48
पण्डित will become famous soon enoughपण्डित will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от fantom Посмотреть сообщение
Не поФод.
+1
पण्डित вне форума   Ответить с цитированием
Старый 22.11.2007, 21:15   #14
Dmitry
Senior Member
 
Аватар для Dmitry
 
Регистрация: 25.02.2007
Адрес: Николаев
Сообщений: 344
Вес репутации: 358/51
Dmitry is just really niceDmitry is just really niceDmitry is just really niceDmitry is just really nice
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

так чего же тогда ошибку никто не ищет?
__________________
иЗВиНиТе зА НероВнЫй поЧЕрк
Dmitry вне форума   Ответить с цитированием
Старый 22.11.2007, 21:40   #15
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 43
Сообщений: 2,610
Вес репутации: 2570/96
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от Dmitry Посмотреть сообщение
так чего же тогда ошибку никто не ищет?
Прости. Те кто ищет, просто не отчитались перед тобой.
fantom вне форума   Ответить с цитированием
Старый 23.11.2007, 09:49   #16
Катя
Junior Member
 
Регистрация: 12.11.2007
Возраст: 34
Сообщений: 17
Вес репутации: 116/43
Катя will become famous soon enoughКатя will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Привет всем, на работе меня держат, потому что я не программист, а схемотехник, с программированием только начала разбираться, для контроллера - это моя 1-ая программа, это просто задумка - данное устройство а, не обязательное требование.
Контроллер у меня именно этот, потому что на работе был такой и он перепрограммируемый - 1ый вариант был, что даже инжикация не засветилась.
Институт, слава богу, я уже закончила, на 2-м учусь, как раз на ПО.
Полгода - это, конечно, много, но если учесть, что все начиналось с придумывания схемы, подбора компонентов, разводки, отладки схемы и ознакомление с программированием - для меня, человека, который 1-ый раз в глаза контроллер увидел, нормально.
Но все равно, я сама разберусь, всем сасибо, одну ошибку я кажется нашла.
Катя вне форума   Ответить с цитированием
Старый 23.11.2007, 10:15   #17
Dmitry
Senior Member
 
Аватар для Dmitry
 
Регистрация: 25.02.2007
Адрес: Николаев
Сообщений: 344
Вес репутации: 358/51
Dmitry is just really niceDmitry is just really niceDmitry is just really niceDmitry is just really nice
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от Катя Посмотреть сообщение
Привет всем, ...
Извините, Катя, за некоторую резкость, но выглядело это действительно как пост студента-двоечника, которому пришло время курсовик сдавать.
А помочь по делу не могу - в Вашей платформе не разбираюсь.
__________________
иЗВиНиТе зА НероВнЫй поЧЕрк
Dmitry вне форума   Ответить с цитированием
Старый 23.11.2007, 12:18   #18
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,285
Вес репутации: 2476/111
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от Катя Посмотреть сообщение
для контроллера - это моя 1-ая программа, это просто задумка - данное устройство а, не обязательное требование.
Контроллер у меня именно этот, потому что на работе был такой и он перепрограммируемый
1-ая программа и задумка начинается с 10 строк которые ты сам написал(а)-а не с 200, которые ты не знаешь откуда взялись.Контроллеры почти все перепрограммируемые, а в этом (как и в других PSoC) своеобразная гибкая перефирия, о чём ты похоже и не в курсе, да и модули в этом контроллере-обращение к флеш, и тд и тп -их не нужно писать или знать, их не видно и не слышно, а просто можно обращаться с помощью команд (API)-и соответственно нечего там отлаживать..
maagalex вне форума   Ответить с цитированием
Старый 23.11.2007, 13:28   #19
Катя
Junior Member
 
Регистрация: 12.11.2007
Возраст: 34
Сообщений: 17
Вес репутации: 116/43
Катя will become famous soon enoughКатя will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Да с чего вы взяли, что я не знаю, откуда эти 200 строк взялись, я же отлаживала отдельно каждую программу, когда маленькая получалась, делала дальше, что-то не получалось, потом вроде находила ошибки, постепенно дошла до этого.
Плохо, что нет пошаговой отладки.
Мне один человек посоветовал, отладить в асемблере tasm.exe, но я не знаю как там можно задать внешние сигналы, что кнопка нажата.
И описание читала на контроллер, правда оно на английском, кое-что не поняла, кстати, на русском описания у вас нет? А то мне надо с некоторыми встроенными блоками разобраться, я переводчиком перевела, но некоторые вопросы не понятны.
Наверное, мне вообще надо бросить эту затею.
Катя вне форума   Ответить с цитированием
Старый 23.11.2007, 14:22   #20
maagalex
Senior Member
 
Аватар для maagalex
 
Регистрация: 25.02.2007
Адрес: &Alex==Israel.BatYam
Возраст: 42
Сообщений: 4,285
Вес репутации: 2476/111
maagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond reputemaagalex has a reputation beyond repute
Отправить сообщение для maagalex с помощью ICQ Отправить сообщение для maagalex с помощью MSN Отправить сообщение для maagalex с помощью Skype™
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Пошаговая отладка есть-но для этого нужно эмулятор покупать за 400долл..,а модули-очень просто всё с ними, и намного удобнее С, скачай примеры с сайта или купи простейший набор с примерами-недели хватит на освоение
maagalex вне форума   Ответить с цитированием
Старый 23.11.2007, 17:16   #21
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 43
Сообщений: 2,610
Вес репутации: 2570/96
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от Катя Посмотреть сообщение
Наверное, мне вообще надо бросить эту затею.
На мой взгляд, задача слишком сложная для начинающего. Не надо ставить сразу такие высокие планки. В начале обычно делают что-то простое. Помигать светодиодом, обработать кнопки... Изучить переферию и средства отладки. Потом можно сделать что-то не сложное с применением АЦП. И только потом, переходить на реальные задачи.
Рекомендации по работе с АЦП, уже написал в личку.
Но подумать над выбором профессии, действительно надо. Почитайте рассказик о нелегкой судьбе эмбеддеров :-)
http://www.caxapa.ru/lib/1byte.html
fantom вне форума   Ответить с цитированием
Старый 26.11.2007, 15:24   #22
Катя
Junior Member
 
Регистрация: 12.11.2007
Возраст: 34
Сообщений: 17
Вес репутации: 116/43
Катя will become famous soon enoughКатя will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Хороший рассказ (очень интересный!), меня пугает только одна фраза:
"если в верхнеуровневых языках дамы еще попадаются, к сям и ассемблерам практически исчезают, то в нашей обл. я не слышал о них вообще. И это правильно!...".
Хотя это и правильно, наверное.
Катя вне форума   Ответить с цитированием
Старый 26.11.2007, 16:55   #23
fantom
Senior Member
 
Регистрация: 27.02.2007
Адрес: Рязань
Возраст: 43
Сообщений: 2,610
Вес репутации: 2570/96
fantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond reputefantom has a reputation beyond repute
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от Катя Посмотреть сообщение
Хороший рассказ (очень интересный!), меня пугает только одна фраза:
"если в верхнеуровневых языках дамы еще попадаются, к сям и ассемблерам практически исчезают, то в нашей обл. я не слышал о них вообще. И это правильно!...".
Хотя это и правильно, наверное.
Не надо так серьёзно это воспринимать. В любых правилах есть исключения :-).
Скорее надо себя спросить. Нравится ли это дело? Лежит ли душа? Если нравится, то всё будет получаться.
fantom вне форума   Ответить с цитированием
Старый 26.11.2007, 17:14   #24
पण्डित
Senior Member
 
Регистрация: 23.04.2007
Возраст: 45
Сообщений: 301
Вес репутации: 105/48
पण्डित will become famous soon enoughपण्डित will become famous soon enough
По умолчанию Re: Помогите, пожалуйста, найти ошибку в коде

Цитата:
Сообщение от fantom Посмотреть сообщение
Нравится ли это дело? Лежит ли душа?
Знаю одного кадра - ему и нравится, и хочется - а стиль мышлЕния и близко не валялся к нужному. Для него разбить задачу на составляющие, перенести опыт из одной области знаний в другую - проблема. С другой стороны - он это осознает и старается пофиксить это дело.
В любом случае, упорство и труд решают всё.
पण्डित вне форума   Ответить с цитированием
Старый 26.11.2007, 18:16   #25
Entuziast
Senior Member
 
Регистрация: 06.03.2007
Адрес: Israel
Возраст: 57
Сообщений: 219
Вес репутации: 100/48
Entuziast will become famous soon enoughEntuziast will become famous soon enough
По умолчанию кто-то умный однажды сказал

когда разводиться слишком много тупых у...шлёпков, появляются гуру и мессии. правильно сказано. отсюда вывод - если тебя называют гуру в программировании - скорее всего работаешь именно среди ушлёпков.
вы сами достаточно хорошо описали вашу проблему:
>ВОТ ТУТ И ОШИБКА - В ИЗМЕРЕНИИ.
>При некоторых калибровочных значениях ошибки нет, нормально >работает, а при некоторых других - горит "ПЕР". Во флеш >записывается, АЦП нормально измеряет, в режимы переходит (видно >по индикации).
>Подскажите хоть что-нибудь, не знаю, что дальше делать.

опять же нет у вас пошаговой отладки - это тоже в эмбеддинге часто.
можно использовать баззер- программа пошла по этой ветке-короткий свисток. по другой длиный. можно мигать ледами, выбрасывать ситринги на терминал, дёргать неиспользуемыми пинами да мало ли что ещё.этих дедовских способов зачастую достаточно чтобы справиться с проблеммами покруче вашей. запишите значения вызывающие перегрузку, проанализируйте их. возможно найдёте причину
and don't hesitate to use your brain
__________________
Делу - флэшка, потехе - хард!
Entuziast вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
помогите найти ошибку tommy Вопросы начинающих 8 04.08.2008 14:04
помогите найти замену тиристораTYN612MB serf Общетехнические вопросы 8 29.03.2008 18:01
ПОМОГИТЕ ПОЖАЛУЙСТА! С ВЫЧИСЛЕНИЕМ АЦП/TMR1 GANY Продукция MICROCHIP 6 05.11.2007 21:27
помогите пожалуйста куском кода для gsm comper Продукция MICROCHIP 3 01.11.2007 06:33
Помогите найти компилятор CC5X Full RU3MD Продукция MICROCHIP 20 03.09.2007 07:17


Часовой пояс GMT +3, время: 03:17.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot