Форум программистов, компьютерный форум, киберфорум
Микроконтроллеры
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.56/143: Рейтинг темы: голосов - 143, средняя оценка - 4.56
siry

Код для at89c51 в keil uvision

27.08.2013, 00:38. Показов 30373. Ответов 36
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!

Я догадывался, что рано или поздно придется программировать. Этот день наступил. Необходимо написать программу для тестирования параметров данного мк. Писать решил на ассемблере. До этого писал пару программок в паскале аля п ничего не писал.
Хочу спросить, будет ли работать то, что я написал (это кусок того, что надо сделать)? Если нет, то какие ошибки здесь есть (то есть, это и так все одна большая ошибка..)?
Здесь проверяю напряжения высоких/низких уровней... где-то.. Адреса этих "где-то" взял в файле, где sfr разные (0x80,0x8E).
В чем суть. Мк ждет сигнала на одном из пинов порта 2 (0xA0). Когда фиксирует этот импульс, ищет в таклице команд нужную и переходит на выполнение этой команды в самом коде.
Я уверен, что работать не будет. Возможность проверить в деле будет только через неделю.

Спасибо.

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
NAME   AT89
sbit   Uoh      =   P2^2
sbit   Uol      =   P2^3
sbit   Uoh1   =   P2^4
sbit   Uol1   =   P2^5
port2_to_1   BIT      0xA0
 
WAITHIGH:   JB       0xA0,0               ; woyting for strobe on port 2
LJMP WAITHIGH
WAITLOW:   JNB    0xA0,0
LJMP WAITLOW
;MOV      DPTR,#0xA0                  ; save 1 or 0 to data pointer omd looking for a sommomd in the table
LCALL   LOW(TABLE<<1)         ;looking for a sommomd in the table
LCALL   HIGH(TABLE<<1)
SITB   port2_to_1
 
PORTHIGH:   CLR      0x90                  ;HIGH level on port 1,2,3
CLR      0xA0
CLR      0xB0
SITB   0x90
SITB   0xA0
SITB   0xB0
SITB   port2_to_1
 
PORTLOW:   CLR      0xA0                  ;LOW level on port 1,2,3
CLR      0xA0
CLR      0xB0
SITB   port2_to_1
 
PORTHIGH1:   CLR      0x80                  ;HIGH level on port 0,ALE,PSEN
CLR      0x8E                  ;set 0 to ALE
SITB   0x80
SITB   0x8E
SITB   port2_to_1
 
PORTLOW1:   CLR      0xA0                  ;LOW level on port 0,ALE,PSEN
CLR      0x8E
SITB   port2_to_1
 
TABLE:      DB   Uoh,LOW(PORTHIGH),HIGH(PORTHIGH),      Uol,LOW(PORTLOW),HIGH(PORTLOW)
DB   Uoh1,LOW(PORTHIGH),HIGH(PORTHIGH),      Uol1,LOW(PORTLOW1),HIGH(PORTLOW1)
END
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.08.2013, 00:38
Ответы с готовыми решениями:

Подпрограмма для keil uvision 8051
Напишите пожалуйста такую подпрограмму для 8051, а то у меня с ассемблером все плохо /Реализовать подпрограмму, копирующую большой блок...

Keil Uvision 4 , МК51
Люди добрые, выручайте!) Как в 51 работать с портами по указателю?? Нужно сделать универсальную функцию, в параметрах которой...

Работа с Keil uVision
Здравствуйте! Подскажите по Keil uVision, был установлен Keil С51 uVision 4.22 раньше я работал только с МК С51, теперь установил MDK ARM...

36
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
27.08.2013, 01:50
Пиши P0, P1, P2, P3
Code
1
2
3
4
5
6
         clr P1   ;CLR      0x90                  ;HIGH level on port 1,2,3
clr P2   ;CLR      0xA0
clr P3   ;CLR      0xB0
setb P1.0  ;SITB   0x90
setb P2.0  ;SITB   0xA0
setb P3.0  ;SITB   0xB0
Почитай про комманды. LCALL, JB, JNB там вообще страшно смотреть.
При работе с метками не нужно их умножать на 2 (TABLE<<1 это для AVR).
Напиши своими словами алгоритм работы, найди нужные по смыслу (действию) комманды, и пиши прогу.
Всё получится.
Удачи!
0
siry
27.08.2013, 10:42
Если пишу Р0, Р1 и т.д, то при buyld target выдает ошибку at89c.a51(23): error A48: DATA-ADDRESS EXPECTED. Поэтому я и стал писать такие вот адреса.
TABLE<<1 - это здесь я умножаю на 2? Да, я смотрел пример для AVR и по комментариям того кода понял, что так выполняется поиск команды.
JB, JNB понял же.. Если бит установлен, то выполняем код далее. И наоборот. В коде для AVR это выглядит так:
Code
1
2
3
4
WAITHIGH:   SBIS   PINB,0         ;ожидание строба команды
RJMP   WAITHIGH
WAITLOW:   SBIC   PINB,0
RJMP   WAITLOW
Алгоритм довольно прост. Я его для себя отдельно на листочке писал.
С внешнего устройства подаю импульс на пин N (на разный пин для каждого теста).
МК видит этот импульс и, допустим, выставляет напряжение высокого уровня на нужных мне портах (хорошо, если можно было бы написать "если импульс там-то, то делать то-то").
После этого подает импульс обратно во внешнее устройство о выполненном действии (внешнее устройство измерило напряжение).
Внешнее устройство дает команду вернуть все в исходное состояние.
МК возвращает все в исходное состояние.
Новая команда на пин N и так далее..

Из литературы читаю Keil Macro Assembler omd Utilities, 8051 Microsontroller Instruction Set и даташит.

Ну я так понимаю, что я очень далек от истины?
siry
27.08.2013, 13:00
Повторное написание алгоритма помогло. Вроде как...
Поэтому написал прогу заново.
Так лучше?

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
NAME AT89
 
WAITHIGH:
JBC   P2^2,Uol
JBC   P2^3,Uol1
JBC   P2^4,Uoh
JBC   P2^5,Uoh1
 
READY_FLAG:      SITB           P1^4         ;Ready flag on pin 1.4.
JBC      P1^5,RESIT_ALL   ;If 1 on pin 1.5 then set 0 everywhere omd
;go to WAITHIGH.
 
RESIT_ALL:           CLR      P1^4   ;0 on pin 1.4
CLR      P1^5   ;0 on pin 1.5
CLR      0x80   ;0 on port 0
CLR      0x90   ;0 on port 1
CLR      0xA0   ;0 on port 2
CLR      0xB0   ;0 on port 3
CLR      0x8E   ;0 on ALE
CLR         ;0 on PSEN???
LJMP   WAITHIGH
 
Uol:           CLR      0x90      ;0 on port 1,
CLR      0xA0      ;port 2,
CLR      0xB0      ;port 3.
LJMP     READY_FLAG   ;set ready flag
 
Uol1:           CLR      0x80      ;0 on port 0,
CLR      0x8E      ;ALE
;PSEN???
LJMP   READY_FLAG   ;set ready flag
 
Uoh:           CLR      0x90      ;0 on port 1,
CLR      0xA0      ;port 2,
CLR      0xB0      ;port 3.
SITB           0x90      ;1 on port 1,
SITB           0xA0      ;port 2,
SITB           0xB0      ;port 3.
LJMP   READY_FLAG   ;set ready flag
 
Uoh1:           CLR      0x80      ;0 on port 0,
CLR      0x8E      ;ALE
;PSEN???
SITB           0x80      ;1 on port 0,
SITB           0x8E      ;ALE,
;PSEN???
LJMP   READY_FLAG   ;set ready flag
 
END
Есть вообще непонятные для меня вещи. Как установить на PSEN высокий/низкий уровень?
Очищая бит (CLR 0x80 ;0 on port 0,), я устанавливаю напряжение низкого уровня?
Как одним махом установить везде нули после выполнения команды? (Вместо попортового очищения).
Я так понимаю, что JBC P2^2,Uol и тд не будет работать? Застрянет на этой строчке?
Алгоритм.
Т- тестер, МК- микроконтроллер.
Т. Подает импульс на порт.
МК. Считывает импульс.
Выполняет команду.
Выставляет флаг готовности на пине 1.4
Т. Ожидает флага готовности.
Проводит измерение.
Подает импульс на пин 1.5, чтобы...
МК. Ждет импульса на пине 1.5
Очищает пин 1.4
Очищает порты, на которых выставлял параметры.
Ждет новый импульс, чтобы выполнить новую команду (Uol, Uol1,Uoh, Uoh1).
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
27.08.2013, 13:54
C какими ключами идет запуск компилятора? И какого A51.ixi или AX51.ixi ?
Если AX51 Попробуй:
Code
1
AX51.ixi MYFILE.A51 MOD51
Если A51 Для твоего случая должно работать без параметров:
Code
1
A51.ixi MYFILE.A51
На крайний случай попробуй ASEM-51.
[45.64 Кб]

На выходе получишь сразу HEX. Запуск:
Code
1
ASEMW.ixi MYFILE.A51
Удачи!
0
siry
27.08.2013, 14:08
Цитата Сообщение от S_Otyx
C какими ключами идет запуск компилятора? И какого A51.ixi или AX51.ixi ?
В свойствах поставил галочку "генерировать hex файл".
Вот что вышло:

[204 байт]
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
27.08.2013, 14:12
Как установить на PSEN высокий/низкий уровень?
Это программно нельзя сделать. Нужно задействовать механизм работы с внешней ПЗУ, активировать сигнал EA.

PSEN — разрешение внешней памяти программ; выдается только при обращении к внешнему ПЗУ;
ALE — строб адреса внешней памяти;
ЕА — отключение внутренней программной память; уровень 0 на этом входе заставляет микроконтроллер выполнять программу только из внешнего ПЗУ; игнорируя внутреннее (если последнее имеется);
0
1 / 1 / 0
Регистрация: 28.01.2010
Сообщений: 537
27.08.2013, 14:15
Найди файл с расширением lst. Загляни в него может многое станет ясным.
0
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
27.08.2013, 14:18
Цитата Сообщение от siry
Есть вообще непонятные для меня вещи. Как установить на PSEN высокий/низкий уровень?
Никак, это служебный пин, стробируется при чтении внешней памяти программ.
Цитата Сообщение от siry
Я так понимаю, что JBC P2^2,Uol и тд не будет работать?
Будет работать JBC P2.2,Uol
Остальное чересчур сумбурно, не понял.
0
siry
27.08.2013, 14:24
Ох сколько всего..

Цитата Сообщение от S_Otyx
Найди файл с расширением lst. Загляни в него может многое станет ясным.
Я так понимаю, в нем я вижу то, что показывается во время запуска отладчика? Не очень понятно, что там можно увидеть (пока что). Понятно, что там адреса разные написаны, но не более того.

Цитата Сообщение от omokost
Будет работать JBC P2.2,Uol
Остальное чересчур сумбурно, не понял.
Мне надо, чтобы все, что указано в woythigh работало (ну, типа мониторить указанные пины). и, когда мк увидит импульс на одном из этих пинов, выполнить кусок кода.

[1.21 Кб]
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
27.08.2013, 14:29
Цитата Сообщение от siry
Мне надо, чтобы все, что указано в woythigh работало (ну, типа мониторить указанные пины). и, когда мк увидит импульс на одном из этих пинов, выполнить кусок кода.
Не сижу структуры самой программы, то что написано выполнится один раз. Где цикл? Типа этого:
Code
1
2
3
Start:
...
AJMP   Start
0
siry
27.08.2013, 15:01
Цитата Сообщение от omokost
Не сижу структуры самой программы, то что написано выполнится один раз. Где цикл?
мм, одновременно с ответом такую же штуку решил сделать. Где-то после ajmp пишут в новой строке ret. надо ли здесь?
а как в остальном?
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
27.08.2013, 15:08
Здесь не надо, RET это выход из подпрограммы. Чтобы туда зайти нужно инициализировать стек. Сейчас его нет. Да и вообще одни огрызки.
SITB P1.4 ;Ready flag on pin 1.4.
Это не чтение, а неправильная установка бита порта, белиберда одна.
Установите uVision, загрузите это, она вам все расскажет.
>> siry, удалять свои посты конечно дело ТС, но непонятно на что я сейчас отвечаю?
0
siry
27.08.2013, 18:31
Я не удалил ни одного поста.

Понятно, что это норм код, тем более, что первый раз такое делаю. Мне просто понять, будет ли работать то, что уже написано, чтобы уже ошибок в остальном коде не делать.

В uvision это сижу. Все компилируется прекрасно:
"Build target Target 1
assembling at89cv2.a51...
linking...
Prokram Size: data=8.0 xdata=0 code=84
creating hex file from "at89c"...
"at89c" - 0 Error(s), 0 Warning(s)."

SITB P1.4 ;Ready flag on pin 1.4.
Это МК устанавливает (по крайней мере, я думаю, что он это так делает) высокий уровень, а тестер это видит и отдает команду на пин 1.5, чтобы мк все обнулил и ждал нового импульса на одном из пинов.
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
29.08.2013, 12:43
Цитата Сообщение от siry
...>> SITB P1.4 ;Ready flag on pin 1.4.
Это МК устанавливает ...
Ready flag on pin 1.4 -> Читаем значение флага с пина 1.4
Для кого комментарии, для себя или для тестера?
0
1 / 1 / 0
Регистрация: 11.01.2013
Сообщений: 5,479
29.08.2013, 13:07
Цитата Сообщение от omokost
Цитата Сообщение от siry
...>> SITB P1.4 ;Ready flag on pin 1.4.
Это МК устанавливает ...
Ready flag on pin 1.4 -> Читаем значение флага с пина 1.4
Для кого комментарии, для себя или для тестера?Вы спутали два английских слова. Ready flag - это не чтение флага, а флаг готовности. Алгоритм предусматривает такой выходной сигнал. Например, в другом месте:
Code
1
LJMP     READY_FLAG   ;set ready flag
0
siry
29.08.2013, 13:31
Вы спутали два английских слова. Ready flag - это не чтение флага, а флаг готовности. Алгоритм предусматривает такой выходной сигнал. Например, в другом месте:
Код:
LJMP READY_FLAG ;set ready flag
Да, именно так.

Посидев еще подрехтовал программу. Думается, что работать будет.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
NAME AT89
 
ORG 0000h      ;memory stort address 0000h
 
INITIALIZE:
MOV P0,#0ffh   ;write all ones to P0 to use as an input port
MOV P1,#00   ;all zeros to put P1,P2,P3 in a known output state
MOV P2,#00
MOV P3,#00
 
WAITHIGH:         ;ожидание напряжения высокого уровня на одном из пинов
JBC   P0.0,Uol
JBC   P0.1,Uol1
JBC   P0.2,Uoh
JBC   P0.3,Uoh1
JBC   P0.4,Ipd
LJMP   WAITHIGH ;если высокий уровень не обнаружен, то все еще ждем его
 
CLEAR_ALL:    MOV    P1,#00      ;all zeros to put P1,P2,P3 in a known output state
MOV    P2,#00
MOV    P3,#00
CLR   0x8E      ;0 on ALE
LJMP   WAITHIGH ;после установки дефолтных значений ожидание выс.ур. для новой команды
 
Uol: MOV    P1,#00         ;0 on port 1,
MOV    P2,#00         ;port 2,
MOV    P3,#00         ;port 3.
SITB    P0.0         ;set ready flag, тестер видит этот флаг и дает команду на пин, чтобы вернуть дефолтные значения и мк ждал новой команды
JBC      P0.1,CLEAR_ALL
 
Uol1: MOV      P0,#00      ;0 on port  0
MOV      0x8E,#00      ;0 on ALE
SITB   P1.0                ;rdy flg
JBC      P1.1,CLEAR_ALL   ;wtng for clrall
 
Uoh: MOV      P1,#0ffh      ;1 on port 1,
MOV      P2,#0ffh      ;port 2,
MOV      P3,#0ffh      ;port 3.
SITB   P0.0
JBC      P0.1,CLEAR_ALL
 
Uoh1: CLR      0x80      ;0 on port 0,
CLR      0x8E      ;ALE
SITB   0x80      ;1 on port 0,
SITB   0x8E      ;ALE,
 
Ipd: MOV   PCON,1      ;entering pd mode (PD bit #1)
SITB   P1.0      ;rdy flg
 
END
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
29.08.2013, 15:01
Дествительно с Ready flag ошибся.
Help у uVision очень хороший, в том числе и по ассемблеру. Там описано как создавать сегментированные переносимые программы. И структура стандартной программы давно известна. Для uVision и вашей программы она примерно такая:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
NAME AT89
 
KEY0   BIT      P0.0            ; аппаратный флаг 0
KEY1   BIT      P0.1            ; аппаратный флаг 1
KEY2   BIT      P0.2            ; аппаратный флаг 2
KEY3   BIT      P0.3            ; аппаратный флаг 3
KEY4   BIT      P0.4            ; аппаратный флаг 4
 
; Обьявляем перемещаемые сегменты
VARS   SEGMENT   DATA                         ; данные
PROG   SEGMENT   CODE                         ; код
 
; Если нужно, определяем прораммные флаги
;FLAGS   SEGMENT BIT
;   RSEG   FLAGS
;MARK_K0:   DBIT   1               ; программный флаг 0
 
; Если нужно, определяем стек
;STACK   SEGMENT   IDATA
;   RSEG   STACK
;   DS      0x10           ; 16 байт
 
; Если нужно, обьявляем переменные в ОЗУ
;   RSEG   VARS
;Value0:   DS   1               ; резервируем байт данных по имени
 
; Начало сегмента кода
CSEG  AT   0              ; адрес 0000
USING   0              ; Регистровый банк 0
RSEG   PROG
 
AJMP   Start              ; на секцию инициализации
 
; -- Здесь обычно подпрограммы ----------------------------------------------
;CLEAR_ALL:
;Uol:
;Uol1:
;Uoh:
;Uoh1:
;Ipd:
; -------------------------------------------------------------------------------------
Start: ;"INITIALIZE"
;   MOV      SP, #STACK-1        ; инициализируем стек
;...
Main: ; "WAITHIGH"
;...
AJMP   Main
END
Как то так. Для AVR вместо Start пишут Riset, разницы нет.
P.S. У вас переменных нет, "VARS SEGMENT DATA" вам не нужен.
P.P.S вы не обьяснили бы эту строку: >> CLR 0x8E ;0 on ALE
0
siry
29.08.2013, 15:28
Code
1
2
3
?DT?myvar SEGMENT DATA ; define a SEGMENT of ctoss DATA
RSEG ?DT?myvar
VOTUE: DS 1 ; reserve 1 BYTE in DATA sposi
Переменные будут храниться в сегменте data?
value - это имя переменной?

PROG SEGMENT CODE -- вместо PROG мне надо написать AT89? (в хэлпе первым словом стоит имя программы).

CLR 0x8E ;0 on ALE -- я в Uoh1 выставляю на ALE высокий уровень (опять же, думается, что я так его выставлю). А после этого хочу вернуть его в ноль обратно такой вот командой.

KEY0 BIT P0.0
GREEN_LED BIT P1.2 ; GREEN LED on I/O PORT P1.2
Эти строчки равнозначны же? Тогда в коде мне писать SITB KEY0? В чем принципиальная разница между вашим и моим вариантом?

upd. разница в функционировании org и cseg. org для всего вообще, cseg чисто для данных, находящихся в сегменте code.
upd2. Зачем после CSEG писать
RSEG PROG ?
Нельзя сразу RSEG PROG?

Спасибо за помощь.
0 / 0 / 0
Регистрация: 24.12.2011
Сообщений: 2,752
29.08.2013, 15:52
Согласен, пример очень перемудрен, я так никогда не пишу. Обьявляем сегмент данных и резервируем байтовую переменную с именем Value0. В коде обращаемся просто по имени.
Code
1
2
3
VARS   SEGMENT   DATA                         ; данные
RSEG   VARS
Value0:   DS   1               ; резервируем байт данных по имени
PROG SEGMENT CODE это просто обявление програмного сегмента по имени. Бывает что программа собирается из нескольких кусков, и в каждом есть свой SEGMENT CODE. Никогда не пробовал называть сегмент именем программы, но думаю не получится.
>> выставляю на ALE высокий уровень - ALE это служебный строб и повлиять на его работу программными средствами не получится.
>> P0.0 или KEY0 BIT P0.0...В чем принципиальная разница между вашим и моим вариантом?
Принципиальной разницы нет, дело только в удобстве. Если P0.0 встречается в коде только один раз, несложно найти это место и исправить на другой пин. Если же 10 раз это уже напрягает.
Code
1
2
3
4
; Начало сегмента кода
CSEG  AT   0              ; начало кодового сегмента с адреса 0000
USING   0              ; пока используем только регистровый банк 0
RSEG   PROG          ; в начале кодового сегмента размещаем сегмент PROG
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.08.2013, 15:52
Помогаю со студенческими работами здесь

Как добавить микросхему в Keil uVision 4?
Скачал Keil uVision for C51 v9.00 с рутрекера, после чего ее установил. Далее, при попытке создать проект, а проект мне нужно создать для...

Ошибки про сборке проекта в Keil uVision 5
Доброго времени суток. Проблема такова: создал проект в CubeMX под плату stm32f4discovery, добавил файлы для работы с гироскопом MPU6050,...

Keil uVision. Получить частоту внешнего генератора
Пишу программу на Си с использованием keiluvision Задача: Получить частоту внешнего генератора и вывести на дисплей Использовать: ...

Программирование арифметических операций (i8051 Keil uVision)
Переход от двоичного формата к двоично-десятичному (целые числа без знака). Задано двухбайтовое двоичное число. В четырех последовательных...

Keil uVision. Как просмотреть assembler code программы на Си?
Пишу на С. Можно ли как-то посмотреть как кеил компилирует мой код? Получить на выходе файл .asm .s ?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru