Вс авг 09, 2015 15:21:57
Пн авг 10, 2015 05:03:36
ARV писал(а):честно говоря, вы тут слишком много понаписали и все запутали.
Пн авг 10, 2015 07:00:31
Госпадяяяя... какая же это нагрузка - сравнение, вычитание, сложение, ... ? Тем более с константамиamd9800 писал(а):с такой огромной переменной это нагрузка на MK
Пн авг 10, 2015 08:57:41
Пн авг 10, 2015 11:32:58
По мне, гораздо проще объявить 1 переменную ΣCODE как 32 разрядную и результат получать по выражению 100*RES=ΣCODE/K, гдеamd9800 писал(а):цифра которая видна на экране состоит из 2 переменных.
значение до запятой это 1-я переменная типа int - будет цифра на пределе инта = 65535
значение после запятой это 2-ая переменная типа char - будет цифра от 0 до 99
также в бэкграунде будет 3-ая переменная в которую будут суммироваться значения АЦП...
Пн авг 10, 2015 21:20:30
akl писал(а):...
Ah - первая (unsigned int)
cAh - вторая (unsigned char)
tempAh - третья (unsigned int)
tempAhz - четвертая (unsigned char)
tempAh=tempAh+Amp;
if (tempAh>35999)
{
tempAh=tempAh-36000;
tempAhz++;
if (tempAhz>9)
{
tempAhz=0;
cAh++;
if (cAh>99)
{
cAh=0;
Ah++;
}
}
}
Сб авг 15, 2015 05:08:08
Да, на Си оно выглядит довольно красиво. Однако, как мне кажется, реализация этого дела займет гораздо больше 16 машинных команд того же АВР. Тогда, как банальное повторение 8 раз пары команд rol r0 ror r1 легко и непринужденно вывернет наизнанку содержимое R0 и поместит его в R1. Про 8051 не скажу, не знаю я его, но, даже если у него есть сдвиги на заданное число разрядов, а не на один, все равно все это довольно сложно, в отличие отConst14 писал(а):Немного отвлеку вас от текущего обсуждения...
В теме http://radiokot.ru/forum/viewtopic.php?f=61&t=119254 был поднят вопрос об инверсии порядка следования битов в слове на обратное (реверсия слова). Мне посоветовали продублировать ответ в этой теме, что я и делаю.
Первое, что приходит на ум, это реализовать такую функции с помощью цикла с побитовым просмотром исходного слова, однако в
книге Генри Уоррена "Алгоритмические трюки для программистов" можно найти вариант этой операции без использования цикла.
Сб сен 05, 2015 20:22:04
;**************************************************
;* ;;/PLUS DATA;;* *
;**************************************************
Clock_Plus:
push temp
ld temp,X ;| Получаем значение
add temp,rab ;| Прибавляем константу для счёта в BCD
subi temp,-1 ;| Прибавляем единицу
brhc Plus_Chng ;| Проверяем переход с F->0 (перенос)
SAVE_PLUS:
sub temp,rab ;| Вычитаем константу и получаем упакованный BCD
cpse temp,rab1 ;| Сравниаем с максимально допустимым
rjmp END_PLUS ;|для этого значения часов
sbrc Flags1,fl_Chng_Way ;+ проверяем флаг направления
ldi temp,1 ;|Если флаг установлен загружаем (1-день,число,месяц)
sbrs Flags1,fl_Chng_Way ;+ проверяем флаг направления
clr temp ;|Если флаг сброшен загружаем (0-час,минута,год)
END_PLUS:
st X,temp ;| и возвращаем на место
rcall OUT_Clock_LCD ;/ Выводим на LCD новое значение
pop temp
ret
Plus_Chng:
subi temp,-6 ;|Если в младшей тетраде 0 прибавляем 6)
rjmp SAVE_PLUS
;**************************************************
;* ;;/MINUS DATA;;* *
;**************************************************
Clock_Minus:
push temp
ld temp,X ;| Получаем значение
cpse temp,zero ;| Проеряем на 0-час,минута,год
rjmp PC+2
MOVE_MINUS:
mov temp,rab1 ;| Равны , копируем в temp максимально допустимый предел
add temp,rab ;| Прибавляем константу для счёта в BCD
subi temp,1 ;| Вычитаем единицу
sub temp,rab ;| Вычитаем константу и получаем упакованный BCD
brhs Minus_Chng ;| Проверяем переход с 0->F (заём)
cpse temp,zero ;| Проверяем на 0-день,число,месяц
rjmp END_MINUS
sbrc Flags1,fl_Chng_Way ;+ проверяем флаг направления
;| Если при устан. флаге temp=0, меняем значение на максимально возможное и снова на математику
rjmp MOVE_MINUS
END_MINUS:
st X,temp
rcall OUT_Clock_LCD ;/ Выводим на LCD новое значение
pop temp
ret
Minus_Chng:
subi temp,6 ;| Куда же без числа 6
rjmp END_MINUS
Setting_Clock: .db 0x66,0x24,0x60,8,0x32,0x13,0xA0,00
Сб сен 05, 2015 23:41:46
mov A, H ; load H into ACC
add A, #1 ; increment the value
da A ; decimal adjust to BCD
cjne A, #0x24, cont ; is maximum reached?
clr A ; YES - reset A to 0
cont: mov H, A ; save updated value
lda H ; load H into ACC
add #1 ; increment the value
daa A ; decimal adjust to BCD
cbeqa #0x24, rest ; is maximum reached?
bra cont ; NO - continue
rest: clra ; YES - reset A to 0
cont: sta H ; save updated value
clrc ; reset C flag
dadd.b #1, &H ; increment H in BCD
cmp.b #0x24, &H ; is maximum reached?
jne cont ; NO - continue
clr.b &H ; YES - reset H to 0
cont:
ldr R1, =H ; R1 = address of H
ldrb R0, [R1] ; R0 = hours
add R0, #1 ; increment the value in R0 mod 24
tst R0, #0x0A ; need decimal adjust?
addne R0, #6 ; YES - do it
cmp R0, #0x24 ; is maximum reached?
moveq R0, #0 ; YES - reset R0 to 0
strb R0, [R1] ; save result in RAM
Вс сен 06, 2015 06:36:16
Вс сен 06, 2015 07:08:48
Пн сен 07, 2015 09:28:00
Вс окт 11, 2015 21:09:01
Const14 писал(а):Немного отвлеку вас от текущего обсуждения...
В теме http://radiokot.ru/forum/viewtopic.php?f=61&t=119254 был поднят вопрос об инверсии порядка следования битов в слове на обратное (реверсия слова). Мне посоветовали продублировать ответ в этой теме, что я и делаю.
Первое, что приходит на ум, это реализовать такую функции с помощью цикла с побитовым просмотром исходного слова, однако в
книге Генри Уоррена "Алгоритмические трюки для программистов" можно найти вариант этой операции без использования цикла.
Для реверсии байта функция будет выглядеть следующим образом:
- Код:
uint8_t ReverseByte(uint8_t b)
{
uint8_t ret;
ret = ((b & 0x55)<<1) | ((b & 0xAA)>>1);
ret = ((ret & 0x33)<<2) | ((ret & 0xCC)>>2);
ret = ((ret & 0x0F)<<4) | ((ret & 0xF0)>>4);
return ret;
ret = (b<<8)
ret = ret | ((b & 10b)<<6)
ret = ret | ((b & 100b)<<4)
...
Пт дек 25, 2015 17:09:47
Пн дек 28, 2015 22:32:45
add R18,temp
adc R18,R21
brhc yy
subi R18,0x10
sec
xx:
adc R19,temp1
adc R19,r21
brhc YYY
subi R19,0x10
sec
xxx:
adc R20,XL
rjmp xxxx
yy:
subi r18,6
rjmp XX
YYY:
subi r19,6
rjmp XXX
Чт сен 15, 2016 23:38:20
Ср окт 12, 2016 09:12:39
Сб фев 16, 2019 15:32:24
Вт фев 26, 2019 07:02:59
Вт фев 26, 2019 11:43:48