123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308 |
- $mod851
- state EQU 7fh
- tmp EQU 7eh
- org 0000h
- ljmp start
- org 000bh
- t0int: ljmp task_switch
-
- org 0060h
- start: clr EA
- mov A,TMOD
- anl A,#11111000b
- orl A,#1
- mov TMOD,A ; T0 mode = 1
- mov TL0,#0
- mov TH0,#0f0h
- mov state,#00h
- setb TR0 ; T0 enable
- setb ET0 ; T0 int enable
- setb EA ; enable int
- task1: xrl P1,#0fh
-
- mov B,#070h
- t1l2: mov A,#0ffh
- t1l1: djnz Acc,t1l1
- djnz B,t1l2
- sjmp task1
-
- task2: xrl P1,#0f0h
- mov B,#030h
- t2l2: mov A,#0ffh
- t2l1: djnz Acc,t2l1
- djnz B,t2l2
- sjmp task2
- ;========================================
- task_switch:
- push DPH
- push DPL
- push Acc
- mov A,state
- jz ts_go
- ljmp rev
- ts_go: pop Acc ; Acc
- mov DPTR,#t1inf
- movx @DPTR,A
- pop Acc ; DPL
- inc DPTR
- movx @DPTR,A
- pop Acc ; DPH
- inc DPTR
- movx @DPTR,A
- inc DPTR ; B
- mov A,B
- movx @DPTR,A
- inc DPTR ; PSW
- mov A,PSW
- movx @DPTR,A
- pop Acc ; PC
- inc DPTR
- movx @DPTR,A
- pop Acc
- inc DPTR
- movx @DPTR,A
- inc DPTR ; SP
- mov A,SP
- movx @DPTR,A
- inc DPTR ; adr: 00h
- mov A,R0
- movx @DPTR,A
- mov B,#6fh ; adr: 01h-6fh
- mov R0,#01h
- ts_l1: inc DPTR
- mov A,@R0
- movx @DPTR,A
- inc R0
- djnz B,ts_l1
- ;------------
- mov DPTR,#(t2inf_end-1)
- mov B,#6fh ; adr: 01-6f
- mov R0,#6fh
- ts_l2: movx A,@DPTR
- mov @R0,A
- dec R0
- lcall dec_dptr
- djnz B,ts_l2
- movx A,@DPTR
- mov R0,A ; adr: 00
- lcall dec_dptr ; SP
- movx A,@DPTR
- mov SP,A
- lcall dec_dptr ; PC
- movx A,@DPTR
- push Acc
- lcall dec_dptr
- movx A,@DPTR
- push Acc
- lcall dec_dptr ; PSW
- movx A,@DPTR
- mov PSW,A
- lcall dec_dptr ; B
- movx A,@DPTR
- mov B,A
-
- lcall dec_dptr ; DPH
- movx A,@DPTR
- push Acc
- lcall dec_dptr ; DPL
- movx A,@DPTR
- push Acc
- lcall dec_dptr ; Acc
- movx A,@DPTR
-
- pop DPL
- pop DPH
- mov state,#0ffh
- mov TL0,#0
- mov TH0,#0f0h
- reti
- ;-=-=-=-=-=-=-=-=-
- rev:
- pop Acc ; Acc
- mov DPTR,#t2inf
- movx @DPTR,A
- pop Acc ; DPL
- inc DPTR
- movx @DPTR,A
- pop Acc ; DPH
- inc DPTR
- movx @DPTR,A
- inc DPTR ; B
- mov A,B
- movx @DPTR,A
- inc DPTR ; PSW
- mov A,PSW
- movx @DPTR,A
- pop Acc ; PC
- inc DPTR
- movx @DPTR,A
- pop Acc
- inc DPTR
- movx @DPTR,A
- inc DPTR ; SP
- mov A,SP
- movx @DPTR,A
- inc DPTR ; adr: 00h
- mov A,R0
- movx @DPTR,A
- mov B,#6fh ; adr: 01h-6fh
- mov R0,#01h
- ts_l3: inc DPTR
- mov A,@R0
- movx @DPTR,A
- inc R0
- djnz B,ts_l3
- ;------------
- mov DPTR,#(t1inf_end-1)
- mov B,#6fh ; adr: 01-6f
- mov R0,#6fh
- ts_l4: movx A,@DPTR
- mov @R0,A
- dec R0
- lcall dec_dptr
- djnz B,ts_l4
- movx A,@DPTR
- mov R0,A ; adr: 00
- lcall dec_dptr ; SP
- movx A,@DPTR
- mov SP,A
- lcall dec_dptr ; PC
- movx A,@DPTR
- push Acc
- lcall dec_dptr
- movx A,@DPTR
- push Acc
- lcall dec_dptr ; PSW
- movx A,@DPTR
- mov PSW,A
- lcall dec_dptr ; B
- movx A,@DPTR
- mov B,A
-
- lcall dec_dptr ; DPH
- movx A,@DPTR
- push Acc
- lcall dec_dptr ; DPL
- movx A,@DPTR
- push Acc
- lcall dec_dptr ; Acc
- movx A,@DPTR
-
- pop DPL
- pop DPH
- mov state,#00h
- mov TL0,#0
- mov TH0,#0f0h
- reti
- ;========================================
- dec_dptr:
- xch A,DPL
- dec A
- cjne A,#0ffh,decdp_lab1
- dec DPH
- decdp_lab1:
- xch A,DPL
- ret
- ;========================================
- org 8000h
- t1inf:
- db 00 ; Acc
- db 00 ; DPL
- db 00 ; DPH
- db 00 ; B
- db 00 ; PSW
- dw 00 ; PC
- db 07 ; SP
- db 0,0,0,0,0,0,0,0 ; R0-R7 (from adress: 00h)
- db 0,0,0,0,0,0,0,0 ; Stack
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0 ; (to adress: 6fh)
- t1inf_end:
- t2inf:
- db 00 ; Acc
- db 00 ; DPL
- db 00 ; DPH
- db 00 ; B
- db 00 ; PSW
- dw task2 ; PC
- db 07 ; SP
- db 0,0,0,0,0,0,0,0 ; R0-R7 (from adress: 00h)
- db 0,0,0,0,0,0,0,0 ; Stack
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0
- db 0,0,0,0,0,0,0,0 ; (to adress: 6fh)
- t2inf_end:
- END
-
-
|