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

📄 main.asm

📁 8051单片机的ucos移植
💻 ASM
📖 第 1 页 / 共 2 页
字号:
*#file includes.h
*11:
*#file C:\MC\8051io.h
*5:
*6:
*10:
*11:extern register printf(), sprintf(), concat();
*12:
*#file 8051int.h
*44:
*45:
*51:
*53:
*90:
*93:
*101:
*#file C:\MC\8051reg.h
*6:
*7:
*8:extern register unsigned char PSW, SP, DPH, DPL, P0, P1, P2, P3,
*9:	IP, IE, TMOD, TCON, TH0, TL0, TH1, TL1, SCON, SBUF, PCON,
*10:	T2CON, TH2, TL2, RCAP2H, RCAP2L;
*11:
*#file includes.h
*15:
*16:
*#file os_cfg.h
*14:
*15:
*20:
*21:
*23:                                       
*25:                                       
*27:                                       
*29:                                       
*30:
*32:                                       
*33:
*35:
*38:
*49:
*51:
*#file os_cpu.h
*15:
*16:
*22:
*28:
*29:
*39:
*41:
*48:
*60:
*62:
*67:
*72:
*73:
*78:
*79:
*81:
*83:
*84:
*85:extern  unsigned char  IE_SHADOW;
*86:
*87:
*88:extern  unsigned char  ISTK_START;
*89:
*90:
*91:extern  unsigned int    OSTickCtr;
*92:
*93:
*94:
*96:
*97:
*98:extern  unsigned int    OSTickFrequency;
*99:
*#file ucos_ii.h
*14:
*15:
*20:
*21:
*22:
*24:
*30:
*32:
*38:
*41:
*44:
*47:
*48:                                       
*54:
*58:
*59:                                       
*63:
*64:
*68:
*72:
*77:
*78:
*82:
*85:
*87:
*89:
*93:
*95:
*100:
*102:
*108:
*111:
*114:
*120:
*122:
*123:
*128:
*131:struct OS_Event{
*132:    void   *evt_OSEventPtr;                    
*133:    unsigned char   evt_OSEventTbl[((12)/8+1)]; 
*134:    unsigned int  evt_OSEventCnt;                    
*135:    unsigned char   evt_OSEventType;                   
*136:    unsigned char   evt_OSEventGrp;                    
*137:};
*139:
*140:
*145:
*148:struct OS_Mbox_Data{
*149:    void   *mbox_OSMsg;                         
*150:    unsigned char   mbox_OSEventTbl[((12)/8+1)]; 
*151:    unsigned char   mbox_OSEventGrp;                    
*152:};
*154:
*159:
*180:
*181:
*186:
*197:
*202:
*211:
*216:
*224:
*225:
*230:
*232:struct os_tcb {
*233:    unsigned char        *OSTCBStkPtr;        
*234:
*242:
*243:    struct os_tcb *OSTCBNext;          
*244:    struct os_tcb *OSTCBPrev;          
*245:
*247:    struct OS_Event      *OSTCBEventPtr;      
*249:
*251:    void          *OSTCBMsg;           
*253:
*254:    unsigned int         OSTCBDly;           
*255:    unsigned char          OSTCBStat;          
*256:    unsigned char          OSTCBPrio;          
*257:
*258:    unsigned char          OSTCBX;             
*259:    unsigned char          OSTCBY;             
*260:    unsigned char          OSTCBBitX;          
*261:    unsigned char          OSTCBBitY;          
*262:    
*266:};
*267:
*268:
*273:
*274:             
*275:                                     
*276:
*277:extern  unsigned int    OSCtxSwCtr;               
*278:
*280:extern  struct OS_Event    *OSEventFreeList;          
*281:extern  struct OS_Event     OSEventTbl[2];
*283:
*284:extern  unsigned int       OSIdleCtr;                
*285:
*292:
*293:extern  unsigned char        OSIntNesting;             
*294:
*295:extern  unsigned char        OSLockNesting;            
*296:
*297:extern  unsigned char        OSPrioCur;                
*298:extern  unsigned char        OSPrioHighRdy;            
*299:
*300:extern  unsigned char        OSRdyGrp;                        
*301:extern  unsigned char        OSRdyTbl[((12)/8+1)];       
*302:
*303:extern  unsigned char      OSRunning;                       
*304:
*306:extern  unsigned char        OSTaskCtr;                       
*308:
*309:extern  struct os_tcb      *OSTCBCur;                        
*310:extern  struct os_tcb      *OSTCBFreeList;                   
*311:extern  struct os_tcb      *OSTCBHighRdy;                    
*312:extern  struct os_tcb      *OSTCBList;                       
*313:extern  struct os_tcb      *OSTCBPrioTbl[12 + 1];
*314:
*315:extern  unsigned int       OSTime;                   
*316:
*317:
*318:extern  unsigned char const  OSMapTbl[];               
*319:extern  unsigned char const  OSUnMapTbl[];             
*320:
*321:
*327:
*328:
*333:
*335:void       *OSMboxAccept(struct OS_Event *pevent);
*336:struct OS_Event   *OSMboxCreate(void *msg);
*337:void       *OSMboxPend(struct OS_Event *pevent, unsigned int timeout, unsigned char *err);
*338:unsigned char       OSMboxPost(struct OS_Event *pevent, void *msg);
*339:unsigned char       OSMboxQuery(struct OS_Event *pevent, struct OS_Mbox_Data *pdata);
*345:
*356:
*366:
*371:
*383:
*387:
*388:unsigned char       OSTaskCreate(void *task, void *pdata, unsigned char *ptos, unsigned char prio);
*389:
*401:
*406:
*411:
*415:
*416:unsigned char       OSTaskQuery(unsigned char prio, struct os_tcb *pdata);
*417:
*422:
*423:void        OSTimeDly(unsigned int ticks);
*424:unsigned char       OSTimeDlyHMSM(unsigned char hours, unsigned char minutes, unsigned char seconds, unsigned int milli);
*425:unsigned char       OSTimeDlyResume(unsigned char prio);
*426:unsigned int      OSTimeGet(void);
*427:void        OSTimeSet(unsigned int ticks);
*428:void        OSTimeTick(void);
*429:
*434:
*435:
*436:void        OSInit(void);
*437:
*438:void        OSIntEnter(void);
*439:void        OSIntExit(void);
*440:
*441:void        OSSchedLock(void);
*442:void        OSSchedUnlock(void);
*443:
*444:void        OSStart(void);
*445:
*446:void        OSStatInit(void);
*447:
*448:unsigned int      OSVersion(void);
*449:
*450:
*456:
*457:
*459:void        OSEventTaskRdy(struct OS_Event *pevent, void *msg, unsigned char msk);
*460:void        OSEventTaskWait(struct OS_Event *pevent);
*461:void        OSEventTO(struct OS_Event *pevent);
*462:void        OSEventWaitListInit(struct OS_Event *pevent);
*464:
*468:
*472:
*473:void        OSSched(void);
*474:
*475:void        OSTaskIdle(void *data);
*476:
*480:
*481:unsigned char       OSTCBInit(unsigned char prio, unsigned char *ptos, unsigned char *pbos, unsigned int id, 
*482:                      unsigned int stk_size, void *pext, unsigned int opt);
*483:
*484:
*490:
*491:
*492:void        OSCtxSw(void);
*493:
*494:void        OSIntCtxSw(void);
*495:
*496:void        OSStartHighRdy(void);
*497:
*498:void        OSTaskCreateHook(struct os_tcb *ptcb);
*499:void        OSTaskDelHook(struct os_tcb *ptcb);
*500:void        OSTaskStatHook(void);
*501:void       *OSTaskStkInit(void *task, void *pdata, void *ptos, unsigned int opt);
*502:void        OSTaskSwHook(void);
*503:
*504:void        OSTickISR(void);
*505:
*506:void        OSTimeTickHook(void);
*#file main.C
*2:
*7:
*12:
*13:
*14:void task0( void *pd );
*15:void task1( void *pd );
*16:void task2( void *pd );
*17:void task3( void *pd );
*18:
*19:unsigned char task0_stack[2048];
*20:unsigned char task1_stack[2048];
*21:unsigned char task2_stack[2048];
*22:unsigned char task3_stack[2048];
*23:
*24:struct OS_Event * mbox_1;
*25:struct OS_Event * mbox_2;
*26:struct OS_Event * mbox_3;
*27:
*28:
*29:
*30:main()
*31:{
*32:
*33:	IE &= 0x7F;
main EQU *
 MOV A,IE
 ANL A,#127
 MOV IE,A
*34:
*35:	serinit( 9600 );
 MOV A,#128
 MOV B,#37
 PUSH A
 PUSH B
 LCALL serinit
 DEC SP
 DEC SP
*36:
*37:    IE &= 0x7F;
 MOV A,IE
 ANL A,#127
 MOV IE,A
*38:
*39:    OSInit();
 LCALL OSInit
*40:
*41:    OSSetTimer();
 LCALL OSSetTimer
*42:    OSSetTickPerSec( 200 );
 MOV A,#200
 MOV B,#0
 PUSH A
 PUSH B
 LCALL OSSetTickPerSec
 DEC SP
 DEC SP
*43:
*44:    
*45:    printf("uCOS-II 8051 Port Demo Program\n");
 MOV A,#?0+0&255
 MOV B,#?0+0/256
 PUSH A
 PUSH B
 MOV A,#1
 MOV B,#0
 LCALL printf
 DEC SP
 DEC SP
*46:
*47:    mbox_1 = OSMboxCreate( (void*) 3 );
 MOV A,#3
 MOV B,#0
 PUSH A
 PUSH B
 LCALL OSMboxCreate
 DEC SP
 DEC SP
 MOV DPTR,#mbox_1
 MOVX [DPTR],A
 INC DPTR
 XCH A,B
 MOVX [DPTR],A
 XCH A,B
*48:    mbox_2 = OSMboxCreate( (void*) 0 );
 MOV A,#0
 MOV B,#0
 PUSH A
 PUSH B
 LCALL OSMboxCreate
 DEC SP
 DEC SP
 MOV DPTR,#mbox_2
 MOVX [DPTR],A
 INC DPTR
 XCH A,B
 MOVX [DPTR],A
 XCH A,B
*49:    mbox_3 = OSMboxCreate( (void*) 0 );
 MOV A,#0
 MOV B,#0
 PUSH A
 PUSH B
 LCALL OSMboxCreate
 DEC SP
 DEC SP
 MOV DPTR,#mbox_3
 MOVX [DPTR],A
 INC DPTR
 XCH A,B
 MOVX [DPTR],A
 XCH A,B
*50:
*51:
*52:    OSTaskCreate( &task0, 0, (void*)(&task0_stack[2047]), 0 );
 MOV R1,#task0
 MOV R2,#=task0
 MOV A,R1
 MOV B,R2
 PUSH A
 PUSH B
 MOV A,#0
 MOV B,#0
 PUSH A
 PUSH B
 MOV A,#255
 MOV B,#7
 MOV R1,#task0_stack
 MOV R2,#=task0_stack
 LCALL ?addi
 MOV A,R1
 MOV B,R2
 PUSH A
 PUSH B
 MOV A,#0
 MOV B,#0
 PUSH A
 PUSH B
 LCALL OSTaskCreate
 MOV R7,#-8
 LCALL ?adjstk
*53:    OSTaskCreate( &task1, 1, (void*)(&task1_stack[2047]), 1 );
 MOV R1,#task1
 MOV R2,#=task1
 MOV A,R1
 MOV B,R2
 PUSH A
 PUSH B
 MOV A,#1
 MOV B,#0
 PUSH A
 PUSH B
 MOV A,#255
 MOV B,#7
 MOV R1,#task1_stack
 MOV R2,#=task1_stack
 LCALL ?addi
 MOV A,R1
 MOV B,R2
 PUSH A
 PUSH B
 MOV A,#1
 MOV B,#0
 PUSH A
 PUSH B
 LCALL OSTaskCreate
 MOV R7,#-8
 LCALL ?adjstk
*54:    OSTaskCreate( &task2, 2, (void*)(&task2_stack[2047]), 2 );
 MOV R1,#task2
 MOV R2,#=task2
 MOV A,R1
 MOV B,R2
 PUSH A
 PUSH B
 MOV A,#2
 MOV B,#0
 PUSH A
 PUSH B
 MOV A,#255
 MOV B,#7
 MOV R1,#task2_stack
 MOV R2,#=task2_stack
 LCALL ?addi
 MOV A,R1
 MOV B,R2
 PUSH A
 PUSH B
 MOV A,#2
 MOV B,#0
 PUSH A
 PUSH B
 LCALL OSTaskCreate
 MOV R7,#-8
 LCALL ?adjstk
*55:    OSTaskCreate( &task3, 3, (void*)(&task3_stack[2047]), 3 );
 MOV R1,#task3
 MOV R2,#=task3
 MOV A,R1
 MOV B,R2
 PUSH A

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -