![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 13.06.2012
Сообщений: 6
|
![]()
мне надо полные комментарии к программе....либо блок схему для нее....очень срочно и очень важно
; Только одна кнопка !!!!!!! ; Имеем три массива на основе их анализа все ясно ; Анализом ловим передний фронт и до нового ни Гу-Гу. ;оприс сделан долгим - жгут стенда = 1.5 m ; ; tic = 20 mS org 20h ct_opros db 0 ct_poz db 0 flag db 0 poz_pnt db 0 tic equ flag.0 org 30H out_dim ds 7 ; запись в сегментный регистр out_pnt db 0 ; Указатель к нему org 38h ct_del db 0 save_dat db 0 index db 0 ct_keypress db 0 org 40h scan_dimold ds 8 scan_dimprev ds 8 scan_dimnew ds 8 org 0 jmp start org 0Bh ; таймер 0 - от таймера ФМ setb tic mov TH0, #high(10000h - 20000) mov TL0, #low(10000h - 20000) reti org 100h start: ; Таймер + ПРЕРЫВАНИЕ mov TH0, #high(10000h - 20000) mov TL0, #low(10000h - 20000); измерение в течении 20 мс ;обнулим диалог-регистр clr TxD mov R0,out_pnt mov a,@R0; Загрузка значения элемента массива, dec out_pnt movx @R0,a ;setb TMOD.0 ;clr TMOD.1 mov TMOD,#1 setb TR0 setb EA setb ET0 ; mov out_pnt,#out_dim cikl: ; Есть на выдачу ? mov a,out_pnt cjne a,#out_dim,out_byte jmp wait_tic out_byte: jb INT0,wait_tic ; Выходной регистр занят? push 0 setb TxD mov R0,out_pnt mov a,@R0 dec out_pnt movx @R0,a pop 0 wait_tic: jnb tic,cikl ;jbc !!!!! ;---------- просканируем матрицу clr tic mov index,#0 mov ct_keypress,#0 mov P2, #(not (01h)) mov R0, #scan_dimnew mov R1,#8 scan: call del mov a,P1 cpl a ; mov c,P1.6 ; mov T1,c mov @R0,a inc R0 push acc mov a,P2 rl a mov P2,a pop acc jz scan1 ;------ определим и запомним линию нажатой клавиши mov a,R0 setb c ;компенсация inc R0 subb a,#scan_dimnew mov index,a inc ct_keypress ; ; --------------- scan1: djnz R1,scan mov P2,#0ffh mov a, ct_keypress ; jz shiftm ; ни одна клавиша не нажата ;scan2: cjne a,#01h,cikl ; нажато больше одной клавиши ;------------ просканировали ;scan3: ; анализ массивов. B index смещение в массиве и он же номер опроса ; и одновременно сформируем код кнопки ; Одна кнопка нажата ? mov R7,#0 mov R1,#8 ; сколько кнопок нажато в линейке ? mov a, #scan_dimnew add a,index mov R0,a mov a,@R0 sear: rrc a xch a,R7 addc a,#0 xch a,R7 djnz R1,sear cjne R7,#01h,cikl ; нажато больше одной кнопки в линейке ; ------------- ; анализ и сдвиг массивов, вывод. ???? B R7 разряд ; --------определим, это нажатие или удержание кнопки ;contf: ;contf1: cpl INT1 mov a, #scan_dimold add a,index mov R0,a mov a, #scan_dimprev add a,index mov R1,a mov a,@R0 xrl a,@R1 jz shiftm ;это не нажатие кнопки ;mov a, #scan_dimprev ;add a,index ;mov R0,a mov a, #scan_dimnew add a,index mov R0,a mov a,@R0 xrl a,@R1 jnz shiftm ; это не нажатие кнопки ;mov a, #scan_dimold ;add a,index ;mov R1,a ;mov a,@R0 ;xrl a,@R1 ;jz shiftm ;это не нажатие кнопки ; есть передний фронт и удержание кнопки ;сформируем байт на выдачу ;переведем позицию в код cpl T0 mov a,@R0 mov poz_pnt,#0 setb c poz_cod: rlc a jc contf inc poz_pnt jmp poz_cod contf: ;mov a,#0 mov a,index ;cpl a ;anl a,#7h rl a rl a rl a orl a,poz_pnt ;R7 mp20: ; cpl p2.0 ; jmp mp20 ;--- введем клавишу SHIFT mov c,Rxd mov acc.6,c ; ------- jb INT0,s_byte ; Выведем байт mp21: cpl T1 ; jmp mp21 wr_di: setb TxD nop nop nop nop movx @R0,a ; nop ; nop ; clr TxD ; movx @R0,a ; jmp wr_di |
![]() |
![]() |
![]() |
#2 |
Регистрация: 13.06.2012
Сообщений: 6
|
![]()
jmp shiftm ;
;jmp cikl s_byte: ;В буфере есть место? push acc mov a,#(out_pnt-1) clr c subb a,out_pnt pop acc jnc s_byte1 ;jmp shiftm ; jmp cikl ;Переполнение s_byte1: ;Поставим в очередь push 0 ; 0 = R0 mov R0,out_pnt ; mov @R0,a inc out_pnt pop 0 ;проверка переполнения ? ; А теперь сдвинем массивы shiftm: ; Весь массив сдвинуть !!!!!!!! mov R7,#8 ;mov a, #scan_dimprev ;add a,index mov R0, #scan_dimprev ;mov a, #scan_dimold ;mov a, #scan_dimold ;add a,index mov R1,#scan_dimold shift1: ;mov a, #scan_dimprev ;add a,index ;mov R0,a ;mov a, #scan_dimold ;add a,index ;mov R1,a mov a,@R0 mov @R1,a inc R1 inc R0 djnz R7,shift1 mov R7,#8 ;mov a, #scan_dimnew ;add a,index mov R0, #scan_dimnew ;mov a, #scan_dimprev ;add a,index mov R1,#scan_dimprev shift2: ;mov a, #scan_dimnew ;add a,index ;mov R0,a ;mov a, #scan_dimprev ;add a,index ;mov R1,a mov a,@R0 mov @R1,a inc R1 inc R0 djnz R7,shift2 jmp cikl ; Небольшая задержка del: mov ct_del,#0FFh del1: djnz ct_del,del1 ret end start s0: mov P2,#01h call del mov a,P1 jz s1 inc R7 mov opros,#01h s1: mov P2,#02h call del mov a,P1 jz s2 inc R7 mov opros,#02h s2: mov P2,#04h call del mov a,P1 jz s3 inc R7 mov opros,#04h s3: mov P2,#08h call del mov a,P1 jz s4 inc R7 mov opros,#08h s4: mov P2,#10h call del mov a,P1 jz s5 inc R7 mov opros,#10h s5: mov P2,#20h call del mov a,P1 jz s6 inc R7 mov opros,#20h s6: mov P2,#40h call del mov a,P1 jz s7 inc R7 mov opros,#40h s7: mov P2,#80 call del mov a,P1 jz s8 inc R7 mov opros,#80h s8: cjne R7,#01h,cikl mov a,P2 rr a mov P2,a inc R0;dat_pnt cjne a,#01,set_del mov R0, #scan_dim set_del: mov ct_del,#0FFh ; Небольшая задержка del: djnz ct_del,del mov a,P1 jz cikl mov save_dat,a mov a,@R0 ;dat_pnt jnz cont mov a,save_dat mov @R0,a ;@dat_pnt,a jmp cikl cont: ; сравнить save_dat c scan_dim mov a,save_dat xrl a,@R0 jnz doble_clic ; сформируем байт call format jmp cikl doble_clic: ; предыдущ и текущее зпачения не совпали ; два варианта - или разные кнопки нажаты или несколько одновременно mov a,save_dat anl a,@R0 jz end_doble_clic ; пошли на разные кнопки ;а это - есть одинаковые call format ;jmp cikl end_doble_clic: jmp cikl format: mov a,save_dat anl a,@R0 mov ct_poz,#-1 poz: setb c inc ct_poz rrc a jnc poz mov a,ct_poz cjne a,#8,cont1 ;form_byte ret ;push poz cont1: mov ct_opros,#-1 mov a,p2 opros: setb c inc ct_opros rrc a jnc opros mov a,ct_opros cjne a,#8,form_byte ;pop poz ret form_byte: mov a,ct_opros rl a rl a rl a ;pop poz orl a,ct_poz push acc mov a,R0 add a, delta mov R1,a pop acc mov @R1,a ; установить бит !!!!!!!!!!!! jmp cikl end start mov a,P1 cjne a,#0,req jmp cikl req: ; сколько клвиш нажто и как долго ;опрос клавиши шифт ; код одной клавиш jb clic,job mov rem,a setb clic jmp cikl job: push acc xrl a,rem jz outd pop acc mov rem,a outd: pop acc clr clic |
![]() |
![]() |
![]() |
#3 |
Пользователь
Регистрация: 20.05.2012
Сообщений: 58
|
![]()
укажи архитектуру и может тебе помогут
|
![]() |
![]() |
![]() |
#4 |
Регистрация: 13.06.2012
Сообщений: 6
|
![]()
Насчет архитектуры не уверен....но как написано в описании 8051....вообщем у меня микросхема 1821ВЕ53У
Последний раз редактировалось Serega852; 13.06.2012 в 20:10. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Необходима помощъ | Watson57 | Помощь студентам | 1 | 17.04.2012 17:26 |
Необходима Литература по С# | MooNDeaR | C# (си шарп) | 1 | 09.12.2011 01:22 |
Необходима консультация | Бегиннер | Общие вопросы по Java, Java SE, Kotlin | 3 | 17.02.2009 08:25 |
Необходима программа | Werstak | Фриланс | 2 | 23.01.2008 14:46 |
Необходима помощь | nimf | Свободное общение | 0 | 29.08.2007 10:43 |