Так, дальше вопрос немного глобальнее!
Если вызываеться прерывание, и процессор уходит в его обработку, то в это время другое прерывание выполниться лишь после завершения предыдущего?
Я не знаю точных ваших коэффициентов деления и какое у вас опорное.Но то, что умножение 300 раз выполняется зря, это точно.Sceam73 писал(а):Разве мой вариант ошибочный ? В реализации моего варианта, показания по сравнению с самым дешевым китайским брехометром, рАСходятся в одну-2 десятки вольта!
Чего может быть глобальнее? Если для исключения дробных чисел(вычисления которых, как мы знаем, отнимают отнимают добрые 1,5 кб флеш) вы используете формат 255 где на самом деле сохранен результат 25,5 то нужно примерно делать так:Sceam73 писал(а):Я немного не понял вопроса с временной переменной, и запятой.... Можно по подробнее?
Так, дальше вопрос немного глобальнее!
Код: Выделить всё
unsigned char temp;
lcd_gotoxy(0,0);
lcd_clear();
temp=display/10;
itoa (temp,buffer);
lcd_puts(buffer);
lcd_putchar(",");
temp=display%10;
lcd_putchar(temp);
Код: Выделить всё
unsigned char temp[]={"00,0V"};
lcd_gotoxy(0,0);
temp[0]=(display%10000/1000+0x30);
temp[1]=(display%1000/100+0x30);
temp[2]=(","); /// Это не обязательно, так как мы объявили этот элемент в начале как зпт
//но на всякий случай можно заполнить.
temp[3]=(display%1000/10+0x30);
temp[4]=("V");
lcd_puts(temp);
Не совсем.Sceam73 писал(а):Если вызываеться прерывание, и процессор уходит в его обработку, то в это время другое прерывание выполниться лишь после завершения предыдущего?
Код: Выделить всё
unsigned char temp;
lcd_gotoxy(0,0);
lcd_clear();
temp=display/10;
itoa (temp,buffer);
lcd_puts(buffer);
lcd_putchar(",");
temp=display%10;
lcd_putchar(temp);
Код: Выделить всё
lcd_putchar(temp+0x30); Код: Выделить всё
module SN_DVV_14_220V (IN,INT,WR,RD,CS,RESET,DAT,A);
input wire [3:0] A;
input wire [13:0]IN;
input wire WR, RD, CS, RESET,INT;
inout [7:0] DAT;
reg [7:0] D;
assign DAT[7:0]=(!CS&!RD)?D[7:0]:8'bz;
always @(negedge RD)
case (A)
4'b0000: D = 8'b00010000;
4'b0001: D = 8'b00100011;
4'b0010: D = 8'b00001110;
4'b0011: D = 8'b00001000;
4'b1000: D = IN[7:0];
4'b1001: D <= {2'b0, IN[13:8]};
default: D = 8'b00000000;
endcase
endmoduleвот здесь у вас идет запись в регистрхотел бы спросить как осуществить запись в регистр в Verilog.
Код: Выделить всё
4'b1001: D <= {2'b0, IN[13:8]};Любым HEX редактором.Есть прошивка для PIC18F252 в формате HEX, она делает некие дела и выводит на экран "текст". Возможно ли ее дизассемблировать и изменить этот "текст"?
Не факт. Может чередоваться вызовами функций вывода на дисплей.AlexSun писал(а):"Готово" так и будет написано подряд в HEX редакторе?
контрольная сумма - последний байт в каждой строке HEX-файла. Считается как сумма всех байт в строке по модулю 256, отнятая от 256.AlexSun писал(а):где находится контрольная сумма и как ее узнать для отредактированного кода?
HEX редактор не нужен, HEX файл можно редактировать простым блокнотом, там просто последовательности 16-х чисел.AlexSun писал(а):"Готово" так и будет написано подряд в HEX редакторе? (в 16 системе естественно)
Ну раз там printf("Готово"), скорее всего все таки последовательность .db "Готово", причем или рядом с процедурой ее вызывающей или где-то в конце кода.Gudd-Head писал(а):Не факт. Может чередоваться вызовами функций вывода на дисплей.
То есть 256 - (сумма байтов % 256), я правильно понял?Engineer_Keen писал(а):контрольная сумма - последний байт в каждой строке HEX-файла. Считается как сумма всех байт в строке по модулю 256, отнятая от 256.
Компилятор CCS PIC C, строка выводится вся сразу.Engineer_Keen писал(а):Будет ли там так написано, зависит от компилятора и структуры программы, если будет, то повезло.
Если % это сумма по модулю 256, то да. Или CRC=256 - (сумма байтов AND 255), тоже самое.AlexSun писал(а):То есть 256 - (сумма байтов % 256), я правильно понял?
Можете себя проверить, сравнив последние числа в строках HEX файле с тем что получится если посчитать вручную.AlexSun писал(а):CC научился считать...
Как минимум адреса и только после дизассемблера, тут уже без этого никак.AlexSun писал(а):А строку другой длины невозможно туда вписать? Адреса придется править?
Код: Выделить всё
SUBDESIGN SN_DVV_14_220V
(
RES, INT : INPUT;
WR : INPUT;
RD : INPUT;
CS : INPUT;
DAT[7..0]: BIDIR;
A[3..0] : INPUT;
IN[13..0]: INPUT;
)
VARIABLE
D[7..0] : NODE;
BEGIN
D[7..0] = (16&(A[3..0]==0))#
(35&(A[3..0]==1))#
(14&(A[3..0]==2))#
(8&(A[3..0]==3))#
(0&(A[3..0]==4))#
(0&(A[3..0]==5))#
(0&(A[3..0]==6))#
(0&(A[3..0]==7))#
(IN[7..0]&(A[3..0]==8));
D[5..0] = (IN[13..8]&(A[3..0]==9));
DAT0 = TRI(D0,!CS&!RD);
DAT1 = TRI(D1,!CS&!RD);
DAT2 = TRI(D2,!CS&!RD);
DAT3 = TRI(D3,!CS&!RD);
DAT4 = TRI(D4,!CS&!RD);
DAT5 = TRI(D5,!CS&!RD);
DAT6 = TRI(D6,!CS&!RD);
DAT7 = TRI(D7,!CS&!RD);
END;