Григорий Т. Опубликовано 25 мая, 2014 Поделиться Опубликовано 25 мая, 2014 И сколько времени на это уходит? Какой период этого импульса? После этого они ведь свободны. 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 25 мая, 2014 Автор Поделиться Опубликовано 25 мая, 2014 ну вообще мне надо T1 и T2 задавать самому. Получается, что в моем тестовом примере я смогу показать только одну температуру. И как же я тогда сделаю так, что через 30 секунд у меня должна появиться другая температура, если у меня она одна - та, которую я задал в T1 и T2. Вывести надпись в терминал через 30 секунд типа 'end' или что-то в этом роде? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
20% скидка на весь каталог электронных компонентов в ТМ Электроникс!Акция "Лето ближе - цены ниже", успей сделать выгодные покупки!Плюс весь апрель действует скидка 10% по промокоду APREL24 + 15% кэшбэк и бесплатная доставка!Перейти на страницу акции Реклама: ООО ТМ ЭЛЕКТРОНИКС, ИНН: 7806548420, info@tmelectronics.ru, +7(812)4094849
Григорий Т. Опубликовано 25 мая, 2014 Поделиться Опубликовано 25 мая, 2014 Почему самому? Нужно в протеусе, вместо датчика, подключить генератор прямоугольного сигнала с регулируемой скважностью. Меняешь скважность - меняются показания на терминале. 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Hongfa для различных применений в Компэл. Большой выбор в наличии!Компания HONGFA - это не только крупнейший в мире производитель электромеханических реле, но также производитель конденсаторов, вакуумных прерывателей, трансформаторов и низковольтного коммутационного оборудования. На складе КОМПЭЛ регулярно поддерживаются около 100 самых популярных позиций электромеханических реле. Реле Hongfa могут заместить многие изделия производства недоступных брендов. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Pragmatik91 Опубликовано 25 мая, 2014 Автор Поделиться Опубликовано 25 мая, 2014 То есть мы посчитали импульсы, остановили таймеры, вывели температуру в терминал, запустили таймер на 30 секунд, в это время поменяли скважность и как только прошло 30 секунд, у нас будет выводиться в терминал новая температура? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Тренды и лучшие решения для разработки зарядных станций в РоссииК 2029 году в России прогнозируется увеличение числа зарядных станций до 40 000. При этом отечественный рынок электротранспорта имеет климатические, потребительские и географические особенности. Для успешной разработки и построения инфраструктуры станций заряда в России идеальным вариантом является использование решений и электронных компонентов китайских производителей – лидеров индустрии электротранспорта и возобновляемой энергетики, которые уже представлены в КОМПЭЛ. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Григорий Т. Опубликовано 25 мая, 2014 Поделиться Опубликовано 25 мая, 2014 Ну, по крайнем мере так, проект будет представлен во всей красе 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Секреты депассивации литиевых батареек FANSO EVE EnergyСамыми лучшими параметрами по энергоемкости, сроку хранения, температурному диапазону и номинальному напряжению обладают батарейки литий-тионилхлоридной электрохимической системы. Но при длительном хранении происходит процесс пассивации. Разберем в чем плюсы и минусы, как можно ее избежать или уменьшить последствия и как проводить депассивацию батареек на примере продукции и рекомендаций компании FANSO EVE Energy. Подробнее>> Реклама: АО КОМПЭЛ, ИНН: 7713005406, ОГРН: 1027700032161
Pragmatik91 Опубликовано 25 мая, 2014 Автор Поделиться Опубликовано 25 мая, 2014 Подсчет импульсов нахождение по формуле темпратуры преобразование в BCD преобразование в ASCII вывод в терминал Таймер запускать после того, как посчитали импульсы? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 25 мая, 2014 Поделиться Опубликовано 25 мая, 2014 Не имеет значения. Можно после вывода в терминал. 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 25 мая, 2014 Автор Поделиться Опубликовано 25 мая, 2014 Вот такую написал delay equ -(30000000) start: MOV TH0, #high(delay) MOV TL0, #low(delay) MOV TMOD, #1h MOV R0, #230 SETB TCON.4 again: JNB TCON.5, $ CLR TCON.5 DJNZ R0, again skip: mov r0,a mov R0, #231 out: SETB TCON.4 JNB TCON.5, $ CLR TCON.5 DJNZ R0, out END теперь все получается. Но хотелось бы привести к виду норм. Добавил знаки °t=-555°С, терминал выдает крокозябры на символы, а числа и знак пишет нормально. В чем подвох? А не, все показывает нормально Кроме знака градуса Вот Протеус.. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 25 мая, 2014 Автор Поделиться Опубликовано 25 мая, 2014 Не получается менять скважность импульса при симуляции. Только после остановки. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 25 мая, 2014 Поделиться Опубликовано 25 мая, 2014 Вот тут я вам помочь не могу, никогда с протеусом не работал. Может, нужно нормальный генератор поставить. Вон ведь, у осциллографа всё регулируется на ходу. 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
mvkarp Опубликовано 25 мая, 2014 Поделиться Опубликовано 25 мая, 2014 mvkarp, если он только начал программировать , а похоже что так оно и есть, то всё понятно. ...Вроде я как бы и согласен. Но когда тебе втюхивают, а сам никак не хочет буквари почитать -это как-то недостойно выглядит.Pragmatik91, это к Вам относится. Местами читаю - так у меня кот, что на коленках лежит, лучше соображает. Соберитесь, поразмыслите - потом уж вопросы сыпьте. Гриша тоже не вечен. Не будет всю Вашу жизнь Вам подсказывать. Извините, если это все грубо для кого звучит. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 25 мая, 2014 Автор Поделиться Опубликовано 25 мая, 2014 Я бы конечно все это почитал и узнал бы все из букварей, но у меня недельные сроки Уж извините 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Microchip Опубликовано 26 мая, 2014 Поделиться Опубликовано 26 мая, 2014 ...Только вот температура бежит и бежит. Как бы теперь так сделать, чтобы одно число показала и все?... Вот такую написал delay equ -(30000000) start: MOV TH0, #high(delay) MOV TL0, #low(delay) MOV TMOD, #1h MOV R0, #230 SETB TCON.4 again: JNB TCON.5, $ CLR TCON.5 DJNZ R0, again skip: mov r0,a mov R0, #231 out: SETB TCON.4 JNB TCON.5, $ CLR TCON.5 DJNZ R0, out END теперь все получается. Но хотелось бы привести к виду норм. Добавил знаки °t=-555°С, терминал выдает крокозябры на символы, а числа и знак пишет нормально. В чем подвох? А не, все показывает нормально Кроме знака градуса Вот Протеус.. Для "одного числа" попробуйте символы "бэкспейса" выводить. В чистой консоле рабало. Только нужно помнить сколько символов выводилось. Вроде бы есть еще символ "начало строки". По логике должно затереть старое значение. Ну тут от кода протеуса еще зависеть будет. В нем не работал. Ак к знакам °t= случаем число 0x30 не добавляется подпрограмме вывода? Покажите код который это делает. 0 Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда) Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 26 мая, 2014 Автор Поделиться Опубликовано 26 мая, 2014 Попадаю в вечный цикл div_error. Если есть перенос, то на ошибку, а если нет, то дальше. Как так сделать, чтобы шел дальше? FORMULA: ; вычисления по формуле 235 - 400*Т1 / Т2 ; где Т1 - значение таймера0 TH0:TL0 ; Т2 - значение таймера1 TH1:TL1 ; ; Умножение на 400 ; Х= 400*Х= (16*Х + 8*Х + Х)*16 ; Сумма в регистрах r7:r6:r5:r4 ; Счетные регистры r3:r2:r1 ; ;заносим в сумму Х . ; берем из таймера0 mov r7,#00 mov r6,#00 mov r5,#T1H mov r4,#T1L ;заносим в счетные регистры Х. mov r3,#00 mov a,r5 mov r2,a mov a,r4 mov r1,a ; умножаем на 8 тремя сдвигами влево mov r0,#03 ; три сдвига m1: clr c ; сбрасываем С (он попадет в младший бит) mov a,r1 ; младший байт в аккумулятор rlc a ; сдвиг влево через перенос mov r1,a ; обратно в регистр mov a,r2 ; средний регистр в аккумулятор rlc a ; сдвиг влево через перенос mov r2,a ; обратно в регистр mov a,r3 ; старший регистр в аккумулятор rlc a ; сдвиг влево через перенос mov r3,a ; обратно в регистр djnz r0,m1 ; вычесть из r1 единицу и перейти, если r0 не равен 0 ; складываем с суммой mov a,r1 ; регистр в аккумулятор add a,r4 ; складываем с регистром суммы mov r4,a ; обратно в регистр суммы mov a,r2 ; регистр в аккумулятор addc a,r5 ; складываем с регистром суммы с учетом переноса mov r5,a ; обратно в регистр суммы mov a,r3 ; регистр в аккумулятор addc a,r6 ; складываем с регистром суммы с учетом переноса mov r6,a ; обратно в регистр суммы clr a ; старший байт счетных регистров = 0 addc a,r7 ; складываем с регистром суммы с учетом переноса mov r7,a ; обратно в регистр суммы ; умножаем счетные регистры еще раз на 2. В итоге получится X*16 clr c mov a,r1 rlc a mov r1,a mov a,r2 rlc a mov r2,a mov a,r3 rlc a mov r3,a ; складываем с суммой mov a,r1 add a,r4 mov r4,a mov a,r2 addc a,r5 mov r5,a mov a,r3 addc a,r6 mov r6,a clr a addc a,r7 mov r7,a ; умножаем сумму на 16 четырьмя сдвигами влево mov r0,#04 ; четыре сдвига m2: clr c mov a,r4 rlc a mov r4,a mov a,r5 rlc a mov r5,a mov a,r6 rlc a mov r6,a mov a,r7 rlc a mov r7,a djnz r0,m2 ; ; Деление сумма/Т2 ; (r7:r6:r5:r4)/(r3:r2) = r5:r4 ; ; делитель берем из таймера1 mov r3,#T2H ; старший байт mov r2,#T2L ; младший байт ; проверяем на переполнение частного (если старшие два байта делимого >= делителю) clr c ; сбрасываем С, чтобы не повлиял на команду subb mov a,r6 ; регистр в аккумулятор subb a,r2 ; вычитаем mov a,r7 ; регистр в аккумулятор subb a,r3 ; вычитаем (важен С) jnc div_error ; если есть перенос(число больше), то уходим на ошибку mov b,#16 ; 16 циклов ; сдвиг влево r7:r6:r5:r4 div16_0: clr c mov a,r4 rlc a mov r4,a mov a,r5 rlc a mov r5,a mov a,r6 rlc a mov r6,a mov a,r7 rlc a mov r7,a jc div16_3 ; если есть перенос, то вычесть делитель и прибавить 1 в частное r5:r4 ; вычитаем делитель r3:r2 mov a,r6 subb a,r2 mov r6,a mov a,r7 subb a,r3 mov r7,a jnc div16_1 ; переноса нет, +1 к частному ; восстанавливаем остаток mov a,r6 add a,r2 mov r6,a mov a,r7 addc a,r3 mov r7,a sjmp div16_2 ; вычитаем остаток div16_3: clr c mov a,r6 subb a,r2 mov r6,a mov a,r7 subb a,r3 mov r7,a ; +1 к частному div16_1: inc r4 ; следующий цикл div16_2: djnz b,div16_0 div_error: sjmp div_error ; 235 - r5:r4 ; ; в r7:r6 заносим 235 mov r7,#00 mov r6,#235 ; вычитаем clr c mov a,r6 subb a,r4 mov r4,a mov a,r7 subb a,r5 mov r5,a mov r3,#0 ;проверка полученного числа на отрицательность mov a,r5 jnb acc.7, loop inc r3 inc r3 mov a, r4 cpl a add a,#00000001b mov r4, a mov a, r5 cpl a addc a,#0 mov r5, a loop: mov 45H,r5 ;cтарший байт результата mov 44H,r4 ;младший байт результата mov 47H,r3 ;знак результата ret ...Только вот температура бежит и бежит. Как бы теперь так сделать, чтобы одно число показала и все?... Вот такую написал delay equ -(30000000) start: MOV TH0, #high(delay) MOV TL0, #low(delay) MOV TMOD, #1h MOV R0, #230 SETB TCON.4 again: JNB TCON.5, $ CLR TCON.5 DJNZ R0, again skip: mov r0,a mov R0, #231 out: SETB TCON.4 JNB TCON.5, $ CLR TCON.5 DJNZ R0, out END теперь все получается. Но хотелось бы привести к виду норм. Добавил знаки °t=-555°С, терминал выдает крокозябры на символы, а числа и знак пишет нормально. В чем подвох? А не, все показывает нормально Кроме знака градуса Вот Протеус.. Для "одного числа" попробуйте символы "бэкспейса" выводить. В чистой консоле рабало. Только нужно помнить сколько символов выводилось. Вроде бы есть еще символ "начало строки". По логике должно затереть старое значение. Ну тут от кода протеуса еще зависеть будет. В нем не работал. Ак к знакам °t= случаем число 0x30 не добавляется подпрограмме вывода? Покажите код который это делает. BCD2ASCII: CALCBUFZN DATA 047h ;знак CALCBUFTEMP DATA 051h ;знак t CALCRAVNO DATA 052h ;знак = CALCC DATA 053h ;знак С ;загружаем t mov A, CALCBUFTEMP add A,#74h ;число знака mov 051h,A ;загружаем знак = mov A, CALCRAVNO add A,#3Dh ;число знака mov 052h,A ;загружаем С mov A, CALCC add A,#43h ;число знака mov 053h,A ;загружаем знак mov A, CALCBUFZN add A,#2Bh ;число знака mov 047h,A 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Microchip Опубликовано 26 мая, 2014 Поделиться Опубликовано 26 мая, 2014 Не могу сообразить че это за манипуляция. Зачем к одной непонятной константе прибавлять другую? Коды нужных символов: 0x74, 0xB0 и 0x3D. После выводить знак и число. Символ бэкспейса, если нужен, 0x8. 0 Нет никакой заслуги тому, кто даёт золото, думая, что даёт камень (Будда) Ссылка на комментарий Поделиться на другие сайты Поделиться
Геннадий Опубликовано 26 мая, 2014 Поделиться Опубликовано 26 мая, 2014 Попадаю в вечный цикл div_error. Если есть перенос, то на ошибку, а если нет, то дальше. Как так сделать, чтобы шел дальше? ; следующий цикл div16_2: djnz b,div16_0 .................................... div_error: sjmp div_error Если вопрос касается этой части кода, то, возможно, требуется вместо точек вставить оператор безусловного перехода "чтобы шел дальше". 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 27 мая, 2014 Автор Поделиться Опубликовано 27 мая, 2014 Какие то косяки либо в Протеусе, либо в моей программе. Не могу определить, где ошибка. Ввожу в начале 210, вычитаю ее из 235 и получается то, что на рисунке. Хотя просмотрел полностью код программы, в ячейках ничего лишнего не обнаружил, считается все правильно. В чем может быть проблема? raznost: ; в r7:r6 заносим 235 mov r7,#00 mov r6,#235 mov r5,#00 mov r4,#210 ; вычитаем clr c mov a,r6 subb a,r4 mov r4,a mov a,r7 subb a,r5 mov r5,a mov r3,#0 ;проверка полученного числа на отрицательность mov a,r5 jnb acc.7, loop inc r3 inc r3 mov a, r4 cpl a add a,#00000001b mov r4, a mov a, r5 cpl a addc a,#0 mov r5, a loop: mov 45H,r5 ;cтарший байт результата mov 44H,r4 ;младший байт результата mov 47H,r3 ;знак результата BIN2BCD: CALCBUFL DATA 044h ;младший байт двоично-десятичного CALCBUFM DATA 045h ;средний байт двоично-десятичного CALCBUFH DATA 046h ;старший байт двоично-десятичного BIN2DEC: push PSW push ACC push B push DPH push DPL mov DPH,CALCBUFM mov DPL,CALCBUFL mov CALCBUFH,#000h mov CALCBUFM,#000h mov CALCBUFL,#000h mov B,#010h BIN2DEC_1: mov A,DPL rlc A mov DPL,A mov A,DPH rlc A mov DPH,A mov A,CALCBUFL rlc A da A mov CALCBUFL,A mov A,CALCBUFM rlc A da A mov CALCBUFM,A mov A,CALCBUFH rlc A da A mov CALCBUFH,A djnz B,BIN2DEC_1 pop DPL pop DPH pop B pop ACC pop PSW BCD2ASCII: CALCBUFZN DATA 047h ;знак CALCBUFTEMP DATA 051h ;знак t CALCRAVNO DATA 052h ;знак = CALCC DATA 053h ;знак С CALCGRAD DATA 054h mov 054h,#0Bh ;загружаем t mov 051h,#74h ;загружаем знак = mov 052h,#3Dh ;загружаем С mov 053h,#43h ;загружаем знак mov A, CALCBUFZN add A,#2Bh ;число знака mov 047h,A ;загружаем младший байт mov A, CALCBUFL ANL A,#00001111B add A,#30h ;работаем с младшей тетрадой mov 048h,A mov A, CALCBUFL ANL A,#11110000B ;работаем со старшей тетрадой swap A add A,#30h mov 049h,A ;загружаем средний байт mov A, CALCBUFM ANL A,#00001111B ;работаем с младшей тетрадой add A,#30h mov 04Ah,A mov A, CALCBUFM ANL A,#11110000B ;работаем со старшей тетрадой swap A add A,#30h mov 04Bh,A INTERM: ;подпрограмма отправки строки в терминал JMP start start: MOV SCON, #50h MOV TH1, #0FDh ORL TMOD, #20h SETB TR1 MOV DPTR, #txt again: CLR TI CLR A MOVC A, @A+DPTR CJNE A, #1Bh, write_char JMP time write_char: mov R0,A mov A,@R0 MOV SBUF, A JNB TI, $ INC DPTR SJMP again txt: DB 051h,052h,047h,04Ah,049h,048h,053h, 1Bh time: jmp time END 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 27 мая, 2014 Автор Поделиться Опубликовано 27 мая, 2014 или как по другому можно разбить число на тетрады, каждую тетраду перевести по таблице и сохранить их в ОЗУ? Думаю, ошибка именно в переводе по таблице. Хотя в ОЗУ все сохраняется нормально. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 27 мая, 2014 Поделиться Опубликовано 27 мая, 2014 Что-то я не разберу алгоритм от BIN2BCD: И никаких комментариев нет. Начиная с BCD2ASCII: у вас всё работало правильно. 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 27 мая, 2014 Автор Поделиться Опубликовано 27 мая, 2014 Что-то я не разберу алгоритм от BIN2BCD: И никаких комментариев нет. Начиная с BCD2ASCII: у вас всё работало правильно. http://forum.cxem.net/index.php?showtopic=17150 эта правильно работает стопудово. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 27 мая, 2014 Поделиться Опубликовано 27 мая, 2014 Сам взвешивал? 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 27 мая, 2014 Автор Поделиться Опубликовано 27 мая, 2014 Перепроверил 3 раза.. Короче получается такая потеха: если мы вычитаем и результат получается меньше 10 (235-240 или 235-230), то выводятся правильные числа в терминал. Если результат вычитания получается больше 10, например 235-220, то в терминале выводится такая строка: t=+615C, то есть вместо 0 появляется 6. При этом в ОЗУ все числа правильно записываются, проверил на калькуляторе. 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 27 мая, 2014 Автор Поделиться Опубликовано 27 мая, 2014 возможно ли, что ошибка кроется в настройке UARTa? 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Григорий Т. Опубликовано 27 мая, 2014 Поделиться Опубликовано 27 мая, 2014 Вряд ли. Остальное же правильно выводится. 0 Никогда не спорьте с дураком - люди могут не заметить между вами разницы Ссылка на комментарий Поделиться на другие сайты Поделиться
Pragmatik91 Опубликовано 27 мая, 2014 Автор Поделиться Опубликовано 27 мая, 2014 Вряд ли. Остальное же правильно выводится. Значит тогда что-то с Протеусом не так. Ладно, завтра спрошу у преподавателя, что с этим делать 0 Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.
Примечание: Ваш пост будет проверен модератором, прежде чем станет видимым.