21.12.2011, 17:23
общий
это ответ
Здравствуйте, Дмитрий!
Вот Вам программа, решающая Вашу задача.
Комментарии не писал, Вы их можете посмотреть в руководстве, там все расписано от и до...
Отличия:
1) Точка входа
2) Yx = 135 для доступа к светодиодам
3) Используем страницу 1fh
4) На индикацию отправляется байт 10011011b
5) Чтобы timer2 срабатывал каждые 40 мсек, загружаем регистры числом 36864 = 921600/25 (25Гц ~ 40мс)
6) Чтобы изменения были каждые 2 сек, загружаем в регистр t2OF = R0 число 50 (50 * 40мс = 2сек)
Все остальное целиком и полностью взято из руководства.
[code h=207]#include "aduc812.h"
Wr_byte equ R1
Tochka_Vhoda equ 44e0h
t2OF equ R0
Reg1 equ 1
Write MACRO Wr_byte,reg_addr,page_num
mov DPP,#page_num
mov DPTR,#reg_addr
mov a,Wr_byte
movx @DPTR,a
mov DPP,#0
ENDM
CSEG at 0
jmp Tochka_Vhoda
ORG 2003h
jmp Ext0_int
ORG 2013h
jmp Ext1_int
ORG 202bh
jmp T2_int
ORG Tochka_Vhoda
main:
call Init_Timer2
mov Wr_byte,#10011011b
_8:
jmp _8
Init_Timer2:
mov t2OF,#100 ;50*40ms = 2 sec
mov RCAP2H,#HIGH((not 36864)+1) ;36864 = 921600/25 (25Гц ~ 40мс)
mov RCAP2L,#LOW((not 36864)+1)
mov TH2,#HIGH((not 36864)+1)
mov TL2,#LOW((not 36864)+1)
setb ET2
setb TR2
setb ET1
setb IT1
SETb ET0
setb IT0
setb EA
ret
T2_int:
clr TF2
djnz t2OF,vyhod
mov t2OF,#100
Write Wr_byte,135,1fh
xrl Reg1,#0ffh
vyhod:
reti
Ext0_int:
mov Wr_byte,#0aah
reti
Ext1_int:
clr TR2
reti
END
[/code]
Об авторе:
"Если вы заметили, что вы на стороне большинства, —
это верный признак того, что пора меняться." Марк Твен