📄 ledmux32.a51
字号:
; 31.12.2004 16:31:58
#cpu = AT89C2051 ; @22,1184 MHz
#Exclude Byte 64 - 127 ;Datenpuffer
#Exclude Byte 0 - 47 ;Bits, Stack
#Bit Empfang, Clk=P3.7, Dat=P3.3, Latch=P3.4, OE=P3.5
#Byte MuxPos, Writepointer
ajmp Initialisierung
EXTI0: ; externer Interrupt 0
Writepointer=#64 ;Sync Eingang
reti
Timer 0: ; Timer 0 Interrupt
mov TH0, #250
ajmp Timer 0 Interrupt
SINT: ; serieller Interrupt
clr RI
push psw
push acc
r1=Writepointer
@r1=sbuf
inc Writepointer
inc Writepointer
a=Writepointer
if a=#128 then
Writepointer=#65
elseif a=#129 then
Writepointer=#64
end if
exsub:
pop acc
pop psw
reti
Initialisierung:
r0=#64
clr a
for r2=#64
@r0=a
inc r0
next
; Serieller Port
mov SCON, # 50h ; Modus 1, asynchron, 8 Bit, Baudrate Timer 1 躡erlauf, Datenempfang freigeben
mov TMOD, # 20h ; Timer 1 Autoreloadmodus
mov TH1, # FFh ; Reloadwert f黵 Baudrate 19200
setb TR1 ; Timer 1 Start
orl PCON, # 80h ; Bit SMOD f黵 Baudratenverdoppelung setzen
orl TMOD, # 01h ; Timer 0 als 16-Bit Timer.
; Die 躡erlauffrequenz des Timer 0 betr鋑t 28,125 Hz, die Periodendauer 35,55556 ms.
mov TH0, # 250
setb TR0 ; Timer 0 l鋟ft.
; Interrupts
setb EX0 ; externen Interrupt 0 freigeben
setb IT0 ; Ausl鰏er: negative Flanke an P3.2
setb PX0 ; Priorit鋞 f黵 externen Interrupt 0
setb ET0 ; Timer 0 Interrupt freigeben
setb ES ; seriellen Interrupt freigeben
setb PS ; Priorit鋞 f黵 seriellen Interrupt
setb EA ; globale Interruptfreigabe
MuxPos=#0
Writepointer=#64
loop ; Routine f黵 seriellen Empfang
if bit Empfang then
clr Empfang
Serielle Daten auswerten
end if
end loop
; * * * Hauptprogramm Ende * * *
Serielle Daten auswerten:
mov a, SBUF
; weitere Befehle
ret
Timer 0 Interrupt:
inc MuxPos
a=MuxPos
if a=#16 then
MuxPos=#0
a=#0
end if
rl a
setb acc.6
push acc
setb acc.5
r0=a ;Rechte H鋖fte
inc r0
a= @r0
for r7=#8
clr Clk
rlc a
Dat=c
nop
setb Clk
next
dec r0
a= @r0
for r7=#8
clr Clk
rlc a
Dat=c
nop
setb Clk
next
pop acc
r0=a ;Linke H鋖fte
inc r0
a= @r0
for r7=#8
clr Clk
rlc a
Dat=c
nop
setb Clk
next
dec r0
a= @r0
for r7=#8
clr Clk
rlc a
Dat=c
nop
setb Clk
next
clr OE
a=MuxPos
swap a
P1=a
setb Latch
nop
clr Latch
nop
setb OE
reti
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -