📄 main.asm
字号:
PUSH B
MOV A,#3
MOV B,#0
PUSH A
PUSH B
MOV A,#255
MOV B,#7
MOV R1,#task3_stack
MOV R2,#=task3_stack
LCALL ?addi
MOV A,R1
MOV B,R2
PUSH A
PUSH B
MOV A,#3
MOV B,#0
PUSH A
PUSH B
LCALL OSTaskCreate
MOV R7,#-8
LCALL ?adjstk
*56:
*57:
*58: OSStart();
LCALL OSStart
*59:
*60: while( 1 );
?1 EQU *
LJMP ?1
?2 EQU *
*61:
*62:}
RET
*63:
*64:void task0( void *pd )
*65:{
*66: pd = pd;
task0 EQU *
MOV R0,#-5
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
DEC R0
MOV [R0],A
INC R0
MOV [R0],B
*67:
*68: OSInterruptInit();
LCALL OSInterruptInit
*69:
*70: while( 1 )
?3 EQU *
*71: {
*72:
*73: IE_SHADOW=IE;IE&=0x7F;
MOV A,IE
MOV DPTR,#IE_SHADOW
MOVX [DPTR],A
MOV A,IE
ANL A,#127
MOV IE,A
*74: printf("task 0 is running and then sleep, parameter = %d \n", (unsigned int)pd );
MOV A,#?0+32&255
MOV B,#?0+32/256
PUSH A
PUSH B
MOV R0,#-7
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
PUSH A
PUSH B
MOV A,#2
MOV B,#0
LCALL printf
DEC SP
DEC SP
DEC SP
DEC SP
*75: IE=IE_SHADOW;
MOV DPTR,#IE_SHADOW
MOVX A,[DPTR]
MOV IE,A
*76:
*77: OSTimeDly(1);
MOV A,#1
MOV B,#0
PUSH A
PUSH B
LCALL OSTimeDly
DEC SP
DEC SP
*78: }
LJMP ?3
?4 EQU *
*79:}
RET
*80:
*81:void task1( void *pd )
*82:{
*83: unsigned char err;
*84: unsigned int msg;
*85:
*86: pd = pd;
task1 MOV R7,#253
MOV R6,#255
LCALL ?adjex2
MOV R0,#-5
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
DEC R0
MOV [R0],A
INC R0
MOV [R0],B
*87:
*88: while( 1 )
?5 EQU *
*89: {
*90: msg = (unsigned int)OSMboxPend( mbox_1, 0, &err );
MOV DPTR,#mbox_1
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV A,#0
MOV B,#0
PUSH A
PUSH B
MOV R7,#0
LCALL ?idxex1
MOV A,R1
MOV B,R2
PUSH A
PUSH B
LCALL OSMboxPend
MOV R7,#-6
LCALL ?adjstk
MOV R7,#1
LCALL ?accex1
MOVX [DPTR],A
INC DPTR
XCH A,B
MOVX [DPTR],A
XCH A,B
*91:
*92: IE_SHADOW=IE;IE&=0x7F;
MOV A,IE
MOV DPTR,#IE_SHADOW
MOVX [DPTR],A
MOV A,IE
ANL A,#127
MOV IE,A
*93: printf("task 1 got a message from task %d, parameter = %d \n", msg, (unsigned int)pd );
MOV A,#?0+83&255
MOV B,#?0+83/256
PUSH A
PUSH B
MOV R7,#1
LCALL ?accex1
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV R0,#-9
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
PUSH A
PUSH B
MOV A,#3
MOV B,#0
LCALL printf
MOV R7,#-6
LCALL ?adjstk
*94: IE=IE_SHADOW;
MOV DPTR,#IE_SHADOW
MOVX A,[DPTR]
MOV IE,A
*95:
*96: OSMboxPost( mbox_2, (void*)1 );
MOV DPTR,#mbox_2
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV A,#1
MOV B,#0
PUSH A
PUSH B
LCALL OSMboxPost
DEC SP
DEC SP
DEC SP
DEC SP
*97: }
LJMP ?5
?6 EQU *
*98:}
MOV R7,#3
LJMP ?adjex1
*99:
*100:
*101:void task2( void *pd )
*102:{
*103: unsigned char err;
*104: unsigned int msg;
*105:
*106: pd = pd;
task2 MOV R7,#253
MOV R6,#255
LCALL ?adjex2
MOV R0,#-5
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
DEC R0
MOV [R0],A
INC R0
MOV [R0],B
*107:
*108: while( 1 )
?7 EQU *
*109: {
*110: msg = (unsigned int)OSMboxPend( mbox_2, 0, &err );
MOV DPTR,#mbox_2
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV A,#0
MOV B,#0
PUSH A
PUSH B
MOV R7,#0
LCALL ?idxex1
MOV A,R1
MOV B,R2
PUSH A
PUSH B
LCALL OSMboxPend
MOV R7,#-6
LCALL ?adjstk
MOV R7,#1
LCALL ?accex1
MOVX [DPTR],A
INC DPTR
XCH A,B
MOVX [DPTR],A
XCH A,B
*111:
*112: IE_SHADOW=IE;IE&=0x7F;
MOV A,IE
MOV DPTR,#IE_SHADOW
MOVX [DPTR],A
MOV A,IE
ANL A,#127
MOV IE,A
*113: printf("task 2 got a message from task %d, parameter = %d\n", msg, (unsigned int)pd);
MOV A,#?0+135&255
MOV B,#?0+135/256
PUSH A
PUSH B
MOV R7,#1
LCALL ?accex1
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV R0,#-9
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
PUSH A
PUSH B
MOV A,#3
MOV B,#0
LCALL printf
MOV R7,#-6
LCALL ?adjstk
*114: IE=IE_SHADOW;
MOV DPTR,#IE_SHADOW
MOVX A,[DPTR]
MOV IE,A
*115:
*116: OSMboxPost( mbox_3, (void*)2 );
MOV DPTR,#mbox_3
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV A,#2
MOV B,#0
PUSH A
PUSH B
LCALL OSMboxPost
DEC SP
DEC SP
DEC SP
DEC SP
*117: }
LJMP ?7
?8 EQU *
*118:}
MOV R7,#3
LJMP ?adjex1
*119:
*120:void task3( void *pd )
*121:{
*122: unsigned char err;
*123: unsigned int msg;
*124:
*125: pd = pd;
task3 MOV R7,#253
MOV R6,#255
LCALL ?adjex2
MOV R0,#-5
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
DEC R0
MOV [R0],A
INC R0
MOV [R0],B
*126:
*127: while( 1 )
?9 EQU *
*128: {
*129: msg = (unsigned int)OSMboxPend( mbox_3, 0, &err );
MOV DPTR,#mbox_3
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV A,#0
MOV B,#0
PUSH A
PUSH B
MOV R7,#0
LCALL ?idxex1
MOV A,R1
MOV B,R2
PUSH A
PUSH B
LCALL OSMboxPend
MOV R7,#-6
LCALL ?adjstk
MOV R7,#1
LCALL ?accex1
MOVX [DPTR],A
INC DPTR
XCH A,B
MOVX [DPTR],A
XCH A,B
*130:
*131: IE_SHADOW=IE;IE&=0x7F;
MOV A,IE
MOV DPTR,#IE_SHADOW
MOVX [DPTR],A
MOV A,IE
ANL A,#127
MOV IE,A
*132: printf("task 3 got a message from task %d, parameter = %d\n", msg, (unsigned int)pd);
MOV A,#?0+186&255
MOV B,#?0+186/256
PUSH A
PUSH B
MOV R7,#1
LCALL ?accex1
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV R0,#-9
LCALL ?auto0
MOV A,[R0]
INC R0
MOV B,[R0]
PUSH A
PUSH B
MOV A,#3
MOV B,#0
LCALL printf
MOV R7,#-6
LCALL ?adjstk
*133: IE=IE_SHADOW;
MOV DPTR,#IE_SHADOW
MOVX A,[DPTR]
MOV IE,A
*134:
*135: OSMboxPost( mbox_1, (void*)3 );
MOV DPTR,#mbox_1
MOVX A,[DPTR]
INC DPTR
MOV B,A
MOVX A,[DPTR]
XCH A,B
PUSH A
PUSH B
MOV A,#3
MOV B,#0
PUSH A
PUSH B
LCALL OSMboxPost
DEC SP
DEC SP
DEC SP
DEC SP
*136: }
LJMP ?9
?10 EQU *
*137:}
MOV R7,#3
LJMP ?adjex1
$SE:1
?0 DB 117,67,79,83,45,73,73,32,56,48,53,49,32,80,111,114
DB 116,32,68,101,109,111,32,80,114,111,103,114,97,109,10,0
DB 116,97,115,107,32,48,32,105,115,32,114,117,110,110,105,110
DB 103,32,97,110,100,32,116,104,101,110,32,115,108,101,101,112
DB 44,32,112,97,114,97,109,101,116,101,114,32,61,32,37,100
DB 32,10,0,116,97,115,107,32,49,32,103,111,116,32,97,32
DB 109,101,115,115,97,103,101,32,102,114,111,109,32,116,97,115
DB 107,32,37,100,44,32,112,97,114,97,109,101,116,101,114,32
DB 61,32,37,100,32,10,0,116,97,115,107,32,50,32,103,111
DB 116,32,97,32,109,101,115,115,97,103,101,32,102,114,111,109
DB 32,116,97,115,107,32,37,100,44,32,112,97,114,97,109,101
DB 116,101,114,32,61,32,37,100,10,0,116,97,115,107,32,51
DB 32,103,111,116,32,97,32,109,101,115,115,97,103,101,32,102
DB 114,111,109,32,116,97,115,107,32,37,100,44,32,112,97,114
DB 97,109,101,116,101,114,32,61,32,37,100,10,0
$EX:printf
$EX:IE
$EX:IE_SHADOW
$EX:OSMboxCreate
$EX:OSMboxPend
$EX:OSMboxPost
$EX:OSTaskCreate
$EX:OSTimeDly
$EX:OSInit
$EX:OSStart
$DD:task0_stack 2048
$DD:task1_stack 2048
$DD:task2_stack 2048
$DD:task3_stack 2048
$DD:mbox_1 2
$DD:mbox_2 2
$DD:mbox_3 2
$EX:serinit
$EX:OSSetTimer
$EX:OSSetTickPerSec
$EX:OSInterruptInit
$RL:8192
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -