📄 51fxa.cod
字号:
; Alternate Functions are Address/Data for External Memory
; p0.0 = $%tP0_FXDIR.0$IN$OUT$
; p0.1 = $%tP0_FXDIR.1$IN$OUT$
; p0.2 = $%tP0_FXDIR.2$IN$OUT$
; p0.3 = $%tP0_FXDIR.3$IN$OUT$
; p0.4 = $%tP0_FXDIR.4$IN$OUT$
; p0.5 = $%tP0_FXDIR.5$IN$OUT$
; p0.6 = $%tP0_FXDIR.6$IN$OUT$
; p0.7 = $%tP0_FXDIR.7$IN$OUT$
init_io_ports:
mov P0, #0$$P0$h
ret
main:
lcall init_io_ports
end
##80C52 IO_P1#
##80C54 IO_P1#
##80C58 IO_P1#
##80C51FA IO_P1#
##80C51FB IO_P1#
##80C51FC IO_P1#
include "51fx.inc"
; Initialize the quasi-bidirectional port pins. To use these
; pins as inputs they must be written with a one.
; IO port pins:
; p1.0 = $%tP1_FXDIR.0$IN$OUT$ ;Special Function T2CLK
; p1.1 = $%tP1_FXDIR.1$IN$OUT$ ;Special Function T2EX
; p1.2 = $%tP1_FXDIR.2$IN$OUT$ ;
; p1.3 = $%tP1_FXDIR.3$IN$OUT$ ;
; p1.4 = $%tP1_FXDIR.4$IN$OUT$ ;
; p1.5 = $%tP1_FXDIR.5$IN$OUT$ ;
; p1.6 = $%tP1_FXDIR.6$IN$OUT$ ;
; p1.7 = $%tP1_FXDIR.7$IN$OUT$ ;
init_io_ports:
mov P1, #0$$P1$h
ret
main:
lcall init_io_ports
end
##80C52 IO_P2#
##80C54 IO_P2#
##80C58 IO_P2#
##80C51FA IO_P2#
##80C51FB IO_P2#
##80C51FC IO_P2#
include "51fx.inc"
; Initialize the quasi-bidirectional port pins. To use these
; pins as inputs they must be written with a one.
; IO port pins:
; Alternate Functions are High Bytes of Address for External Memory
; p2.0 = $%tP2_FXDIR.0$IN$OUT$
; p2.1 = $%tP2_FXDIR.1$IN$OUT$
; p2.2 = $%tP2_FXDIR.2$IN$OUT$
; p2.3 = $%tP2_FXDIR.3$IN$OUT$
; p2.4 = $%tP2_FXDIR.4$IN$OUT$
; p2.5 = $%tP2_FXDIR.5$IN$OUT$
; p2.6 = $%tP2_FXDIR.6$IN$OUT$
; p2.7 = $%tP2_FXDIR.7$IN$OUT$
init_io_ports:
mov P2, #0$$P2$h
ret
main:
lcall init_io_ports
end
##80C52 IO_P3#
##80C54 IO_P3#
##80C58 IO_P3#
##80C51FA IO_P3#
##80C51FB IO_P3#
##80C51FC IO_P3#
include "51fx.inc"
; Initialize the quasi-bidirectional port pins. To use these
; pins as inputs they must be written with a one.
; IO port pins:
; p3.0 = $%tP3_FXDIR.0$IN$OUT$ ;Special Function RXD
; p3.1 = $%tP3_FXDIR.1$IN$OUT$ ;Special Function TXD
; p3.2 = $%tP3_FXDIR.2$IN$OUT$ ;Special Function INT0
; p3.3 = $%tP3_FXDIR.3$IN$OUT$ ;Special Function INT
; p3.4 = $%tP3_FXDIR.4$IN$OUT$ ;Special Function T0
; p3.5 = $%tP3_FXDIR.5$IN$OUT$ ;Special Function T1
; p3.6 = $%tP3_FXDIR.6$IN$OUT$ ;Special Function WR
; p3.7 = $%tP3_FXDIR.7$IN$OUT$ ;Special Function RD
init_io_ports:
mov P3, #0$$P3$h
ret
main:
lcall init_io_ports
end
##80C52 PM#
##80C54 PM#
##80C58 PM#
##80C51FA PM#
##80C51FB PM#
##80C51FC PM#
include "51fx.inc"
; Power Management
; - Idle Mode = $%ePCON.0$
; - Power Down Mode = $%ePCON.1$
;Power down mode takes precedence over Idle Mode if both
; bits are set.
init_pm:
$$if$ PCON.1
setb PD
$$end$
$$if$ PCON.0 &! PCON.1
setb IDL
$$end$
ret
main:
lcall init_pm
end
##80C52 Serial#
##80C54 Serial#
##80C58 Serial#
##80C51FA Serial#
##80C51FB Serial#
##80C51FC Serial#
include "51fx.inc"
;Serial Port
;Mode = $%4SCON.6-7$0 /shift register$1 /8-bit UART$2 /9-bit UART$3 /9-bit UART$
;Serial Port Interrupt = $%eIE.4$
$$if$ SCON.7
;9th Data Bit = $%eSCON.3$
$$end$
;Receive = $%eSCON.4$
;Auto Addressing = $%eSCON.5$
init_serial:
mov SCON, #0$$SCON$h
$$if$ SCON.6
$$if$ T2CON.4
;Timer 2 is being used to generate baud rates.
mov RCAP2L, #0$$RCAP2L$h
mov RCAP2H, #0$$RCAP2H$h
mov T2CON, #0$$T2CON$h
$$end$
$$ifn$ T2CON.4
;Timer 1 is being used to generate baud rates.
$$if$ PCON.7
orl PCON, #80H
$$end$
mov TMOD, #0$$TMOD$h
mov TH1, #0$$TH1$h
setb TR1 ;TCON.6
$$end$
$$if$ T2CON.4 &! T2CON.5
;Timer 1 is being used to generate baud rates.
$$if$ PCON.7
orl PCON, #80H
$$end$
mov TMOD, #0$$TMOD$h
mov TH1, #0$$TH1$h
setb TR1 ;TCON.6
$$end$
$$ifn$ T2CON.4 && T2CON.5
;Timer 2 is being used to generate baud rates.
mov RCAP2L, #0$$RCAP2L$h
mov RCAP2H, #0$$RCAP2H$h
mov T2CON, #0$$T2CON$h
$$end$
$$end$
$$ifn$ SCON.6 && SCON.7
$$if$ PCON.7
orl PCON, #80H
$$end$
$$end$
$$if$ IE.4
setb ES ;IE.4
$$end$
$$if$ SCON.4
clr RI ;SCON.0
$$end$
$$ifn$ SCON.4
mov SBUF, #00H
clr TI ;SCON.1
$$end$
ret
main:
lcall init_serial
end
##80C52 TIMER0#
##80C54 TIMER0#
##80C58 TIMER0#
##80C51FA TIMER0#
##80C51FB TIMER0#
##80C51FC TIMER0#
include "51fx.inc"
; Configure Timer $$TIMERX$
; - Mode = $%4TMOD.0-1$0$1$2$3$
; - Interrupt = $%tIE.1$ENABLED$DISABLED$
; - Clock Source = $%tTMOD.2$EXTERNAL$INTERNAL$
; - Enable Gating Control = $%tTMOD.3$ENABLED$DISABLED$
init_timer$$TIMERX$:
anl TMOD, #0F0H ;clear Timer 0
orl TMOD, #0$$TMOD$h ;
mov TL0, #0$$TL0$h ;value set by user
mov TH0, #0$$TH0$h ;value set by user
$$if$ IE.1
setb IE.1
$$end$
setb TR$$TIMERX$ ;TCON.4 start timer
ret
main:
lcall init_timer$$TIMERX$
end
##80C52 TIMER1#
##80C54 TIMER1#
##80C58 TIMER1#
##80C51FA TIMER1#
##80C51FB TIMER1#
##80C51FC TIMER1#
include "51fx.inc"
; Configure Timer $$TIMERX$
; - Mode = $%4TMOD.4-5$0$1$2$3$
; - Interuppt = $%tIE.3$ENABLED$DISABLED$
; - Clock Source = $%tTMOD.6$EXTERNAL$INTERNAL$
; - Enable Gating Control = $%tTMOD.7$ENABLED$DISABLED$
init_timer$$TIMERX$:
anl TMOD, #0FH ;clear Timer 1 control
mov TMOD, #0$$TMOD$h ;
mov TL1, #0$$TL1$h ;value set by user
mov TH1, #0$$TH1$h ;value set by user
$$if$ IE.3
setb IE.3
$$end$
setb TR$$TIMERX$ ;TCON.6 start timer 1
ret
main:
lcall init_timer$$TIMERX$
end
##80C52 TIMER2#
##80C54 TIMER2#
##80C58 TIMER2#
##80C51FA TIMER2#
##80C51FB TIMER2#
##80C51FC TIMER2#
include "51fx.inc"
;The Timer is set to $%5T2MODES$No Operation$Auto Reload$Capture$BaudRate Generator$Clock Out$
$$if$ (T2MODES == 1) || (T2MODES == 2)
;Clock Source = $%tT2CON.1$EXTERNAL$INTERNAL$
$$if$ (T2MODES == 1)
;Count Direction = $%tT2MOD.0$UP/DOWN depending on T2EX pin$UP$
$$end$
;Reload Value by $%tT2CON.3$External Transition$Overflow$
$$end$
init_timer$$TIMERX$:
mov T2CON, #0$$T2CON$h
mov T2MOD, #0$$T2MOD$h
$$if$ (T2MODES == 1) || (T2MODES == 2)
mov TL2 , #00H ;set by user
mov TH2 , #00H ;set by user
mov RCAP2L, #00H ;reload value low
mov RCAP2H, #00H ;reload value high
$$if$ T2CON.3
setb T2EX ; will allow capture or reload on negative transistion
; also in Reload controls direction of Count.
; logic 1 counts up logic 0 will count down
$$end$
$$end$
$$if$ (T2MODES == 4)
mov RCAP2L, #0$$RCAP2L$h ;Clk Out Value
mov RCAP2H, #0$$RCAP2H$h ;Clk Out Value
$$end
setb TR2 ;T2CON.2 start timer
ret
main:
lcall init_timer$$TIMERX$
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -