⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 main.asm

📁 8051单片机的ucos移植
💻 ASM
📖 第 1 页 / 共 2 页
字号:
 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 + -