C51编程:c51定时器!昨天贴错了,不好意思!
(接上条)
?C_STARTUP:
ljmp C_START
CSEG AT 3H
ljmp CMD_ir_bit_receive
CSEG AT 7H
ljmp main_loop
CSEG AT 0bH
setb F_t0_int
ljmp CMD_ir_bit_receive
CSEG AT 13H
inc g_hsync_counter
reti
CSEG AT 1bH
ljmp TM_timer_1_int
CSEG AT 23H
reti
CSEG AT 43H
reti ;ljmp CS_watchdog_int
CSEG AT 53H
clr AVS
reti ;ljmp CS_acq_vsync_int
CSEG AT 93H
reti ;ljmp CS_acq_hsync_int
RSEG ?C_C51STARTUP
C_START:
IF IBPSTACK <> 0
EXTRN DATA (?C_IBP)
mov ?C_IBP,#LOW IBPSTACKTOP
ENDIF
STRT_LOOP1:
mov @R0,A
inc R0
djnz R7,STRT_LOOP1
;// clear xram
mov R6,#HIGH (XDATA_LENG)
mov R7,#LOW (XDATA_LENG)
mov DPTR,#XDATA_START
STRT_LOOP2:
movx @DPTR,A
inc DPTR
dec R7
cjne R7,#0ffH,STRT_LOOP2
dec R6
cjne R6,#0ffH,STRT_LOOP2
;/* initialize the variable need power on initialized */
mov DPTR,#?C_INITSEG
Loop:
WATCHDOG
clr A
mov R6,#1
movc A,@A+DPTR
jz INITEND
inc DPTR
mov R7,A
anl A,#3FH
jnb ACC.5,NOBIG
anl A,#01FH
mov R6,A
clr A
movc A,@A+DPTR
inc DPTR
jz NOBIG
inc R6
NOBIG:
xch A,R7
anl A,#0C0H
add A,ACC
jz IorPDATA
jc Bits
XdataMem:
clr A
movc A,@A+DPTR
inc DPTR
mov R2,A ; High
clr A
movc A,@A+DPTR
inc DPTR
mov R0,A ; LOW
XLoop:
clr A
movc A,@A+DPTR
inc DPTR
xch A,R0 ; // low
address to DPL,data to R0,new low address to A
xch A,DPL
xch A,R0 ; // high
address to DPH,data to R2,new low address to R0
xch A,R2
xch A,DPH
xch A,R2 ; // data to A
movx @DPTR,A ; // load data
to variable
inc DPTR
xch A,R0
xch A,DPL
xch A,R0
xch A,R2
xch A,DPH
xch A,R2
djnz R7,XLoop
djnz R6,XLoop
sjmp Loop
IorPData: ; If CY=1 PData values
clr A
movc A,@A+DPTR
inc DPTR
mov R0,A ; Start Address
IorPLoop:
clr A
movc A,@A+DPTR
inc DPTR
jc Pdata
mov @R0,A
sjmp Common
PData:
movx @R0,A
Common:
inc R0
djnz R7,IorPLoop
sjmp Loop
Bits:
clr A
movc A,@A+DPTR
inc DPTR
mov R0,A
anl A,#007H
add A,#Table-LoadTab
xch A,R0
clr C
rlc A ; Bit Condition
to Carry
swap A
anl A,#00FH
orl A,#20H ; Bit Address
xch A,R0 ; convert to
Byte Addressen
movc A,@A+PC
LoadTab:
jc Setzen
cpl A
anl A,@R0
sjmp BitReady
Table:
db 00000001B
db 00000010B
db 00000100B
db 00001000B
db 00010000B
db 00100000B
db 01000000B
db 10000000B
Setzen:
orl A,@R0
BitReady:
mov @R0,A
djnz R7,Bits
sjmp Loop
INITEND: ljmp main
RSEG ?C_INITSEG
; db 0 /*
if not be eminated,it will place "0" at somewhere(but not the end)
; of
the ?C_INITSEG segment and cause initialization terminal unexpected
; -
YMT,00-9-1 8:18 */
;------------------------------------------------------------------------
END
发表时间:2002年11月21日10:11:00