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

📄 model.lst

📁 移动机器人(小车)的物理坐标和逻辑坐标的转换源码
💻 LST
📖 第 1 页 / 共 5 页
字号:
(0326)     uint8 n = 0;
(0327)     uint8 cXORCheck = 0;
     2FB 24AA      CLR	R10
(0328)     
(0329)     (*(pSFP->OutputDataFunc))(pSFP->cHeadByte);             //发送消息头部
     2FC 85EA      LDD	R30,Y+10
     2FD 85FB      LDD	R31,Y+11
     2FE 8D00      LDD	R16,Z+24
     2FF 01AF      MOVW	R20,R30
     300 5E42      SUBI	R20,0xE2
     301 4F5F      SBCI	R21,0xFF
     302 01FA      MOVW	R30,R20
     303 81A0      LDD	R26,Z+0
     304 81B1      LDD	R27,Z+1
     305 01FD      MOVW	R30,R26
     306 D791      RCALL	xicall
(0330)     
(0331)     if (!(pSFP->cFixLength))
     307 85EA      LDD	R30,Y+10
     308 85FB      LDD	R31,Y+11
     309 8C22      LDD	R2,Z+26
     30A 2022      TST	R2
     30B F451      BNE	0x0316
(0332)     {
(0333)         (*(pSFP->OutputDataFunc))((Length+5));              //发送消息长度
     30C 2D0E      MOV	R16,R14
     30D 5F0B      SUBI	R16,0xFB
     30E 01FA      MOVW	R30,R20
     30F 81A0      LDD	R26,Z+0
     310 81B1      LDD	R27,Z+1
     311 01FD      MOVW	R30,R26
     312 D785      RCALL	xicall
(0334)         cXORCheck ^= (Length + 5);
     313 2D8E      MOV	R24,R14
     314 5F8B      SUBI	R24,0xFB
     315 26A8      EOR	R10,R24
(0335)     }
(0336)     
(0337)     (*(pSFP->OutputDataFunc))(cCMD);                        //发送指令字节
     316 2D0C      MOV	R16,R12
     317 01FA      MOVW	R30,R20
     318 81A0      LDD	R26,Z+0
     319 81B1      LDD	R27,Z+1
     31A 01FD      MOVW	R30,R26
     31B D77C      RCALL	xicall
(0338)     cXORCheck ^= cCMD;
     31C 24AC      EOR	R10,R12
(0339) 
(0340)     for (n = 0;n < Length;n++)
     31D 24CC      CLR	R12
     31E C011      RJMP	0x0330
(0341)     {
(0342)         (*(pSFP->OutputDataFunc))(pMSG[n]);                 //发送消息本体
     31F 2D6C      MOV	R22,R12
     320 2777      CLR	R23
     321 840E      LDD	R0,Y+14
     322 841F      LDD	R1,Y+15
     323 0D60      ADD	R22,R0
     324 1D71      ADC	R23,R1
     325 01FB      MOVW	R30,R22
     326 8100      LDD	R16,Z+0
     327 01FA      MOVW	R30,R20
     328 81A0      LDD	R26,Z+0
     329 81B1      LDD	R27,Z+1
     32A 01FD      MOVW	R30,R26
     32B D76C      RCALL	xicall
(0343)         cXORCheck ^= pMSG[n];
     32C 01FB      MOVW	R30,R22
     32D 8020      LDD	R2,Z+0
     32E 24A2      EOR	R10,R2
     32F 94C3      INC	R12
     330 14CE      CP	R12,R14
     331 F368      BCS	0x031F
(0344)     }
(0345)     
(0346)     (*(pSFP->OutputDataFunc))(cXORCheck);                   //发送校验字节
     332 2D0A      MOV	R16,R10
     333 01FA      MOVW	R30,R20
     334 81A0      LDD	R26,Z+0
     335 81B1      LDD	R27,Z+1
     336 01FD      MOVW	R30,R26
     337 D760      RCALL	xicall
(0347)     (*(pSFP->OutputDataFunc))(pSFP->cEndByte);              //发送消息头部
     338 85EA      LDD	R30,Y+10
     339 85FB      LDD	R31,Y+11
     33A 8D01      LDD	R16,Z+25
     33B 01FA      MOVW	R30,R20
     33C 81A0      LDD	R26,Z+0
     33D 81B1      LDD	R27,Z+1
     33E 01FD      MOVW	R30,R26
     33F D758      RCALL	xicall
(0348)     
(0349)     return TRUE;
     340 E001      LDI	R16,1
     341 D716      RCALL	pop_xgsetF0FC
     342 9624      ADIW	R28,4
     343 9508      RET
FILE: E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_UseCooperatingMiniOs.c
(0001) /***********************************************************
(0002) *   函数库说明:合作调度器基本函数库                       *
(0003) *   版本:      v1.01                                      *
(0004) *   作者:      王卓然                                     *
(0005) *   创建日期:  2006年8月28日                              *
(0006) * -------------------------------------------------------- *
(0007) *  [支 持 库]                                              *
(0008) *   支持库名称:RD_UseCooperatingMiniOs.h                  *
(0009) *   需要版本:  -----                                      *
(0010) *   支持库说明:合作调度器基本声明库                       *
(0011) *                                                          *
(0012) *   支持库名称:RD_MacroAndConst.h                         *
(0013) *   需要版本:  v0.04 &abv                                 *
(0014) *   支持库说明:系统常用宏定义库                           *
(0015) * -------------------------------------------------------- *
(0016) *  [版本更新]                                              *
(0017) * -------------------------------------------------------- *
(0018) *  [版本历史]                                              *
(0019) * -------------------------------------------------------- *
(0020) *  [使用说明]                                              *
(0021) *           1、在系统初始化的时候调用函数CmOSInit()来初始  *
(0022) *              化消息对系统;同时通过定义宏                *
(0023) *              COS_REGISTER_PROC_FUNCTION来说明静态进程函  *
(0024) *              数的消息处理函数和动作函数(使用函数指针)。  *
(0025) *              每增加一个静态进程,要更新一次进程计数器    *
(0026) *              COS_Proc_Counter,保证每一个进程都能被有效  *
(0027) *              的寻址。                                    *
(0028) *           7、用户可以通过宏COS_PROCESS_COUNT来定义最大的 *
(0029) *              进程PCB数量。这个数值直接影响系统允许的静态 *
(0030) *              进程的数量,并要占用一定的空间。这个数目的  *
(0031) *              最小值是1,因为默认有一个系统默认消息处理   *
(0032) *              进程。                                      *
(0033) *           8、用户需要COS_REGISTER_MSG_FUNCTION宏来说明   *
(0034) *              系统进程的初始化函数,通过这个初始化函数告  *
(0035) *              诉消息系统,一共有多少静态进程,并且说明这  *
(0036) *              些静态进程的相关函数指针是什么。            *
(0037) ***********************************************************/
(0038) 
(0039) /********************
(0040) * 头 文 件 配 置 区 *
(0041) ********************/
(0042) # include "RD_MacroAndConst.h"
(0043) # include "RD_UseCooperatingMiniOs.h"
(0044) 
(0045) /********************
(0046) *   系 统 宏 定 义  *
(0047) ********************/
(0048) 
(0049) /*------------------*
(0050) *   常 数 宏 定 义  *
(0051) *------------------*/
(0052) #ifndef COS_PROCESS_COUNT
(0053)     //# define COS_PROCESS_COUNT 8
(0054)     #error Need for COS_PROCESS_COUNT!      
(0055) #endif
(0056) 
(0057) /*------------------*
(0058) *   动 作 宏 定 义  *
(0059) *------------------*/
(0060) #ifndef COS_REGISTER_PROC_FUNCTION
(0061)     # define COS_REGISTER_PROC_FUNCTION
(0062) #endif
(0063) 
(0064) /********************
(0065) *    结构体宏定义   *
(0066) ********************/
(0067) 
(0068) /********************
(0069) *   函 数 声 明 区  *
(0070) ********************/
(0071) BOOL NULL_PROC(void);
(0072) void CMOS_INIT(void);
(0073) void Process_Task(void);
(0074) 
(0075) /********************
(0076) *   全局变量声明区  *
(0077) ********************/
(0078) volatile PROCESS ProcPCB[COS_PROCESS_COUNT+1];
(0079) uint8 g_cCOSPROCCounter = 0;
(0080) uint8 g_cScheduleTest = 0;
(0081) 
(0082) /***********************************************************
(0083) *   函数说明:空函数                                       *
(0084) *   输入:    无                                           *
(0085) *   输出:    无                                           *
(0086) *   调用函数:无                                           *
(0087) ***********************************************************/
(0088) BOOL NULL_PROC(void)
(0089) {
(0090)     return FALSE;
_NULL_PROC:
     344 2700      CLR	R16
     345 9508      RET
_CMOS_INIT:
  Reg1                 --> R10
  n1                   --> R20
     346 D727      RCALL	push_xgset300C
(0091) }
(0092) 					  
(0093) /***********************************************************
(0094) *   函数说明:消息队列系统初始化函数                       *
(0095) *   输入:    无                                           *
(0096) *   输出:    无                                           *
(0097) *   调用函数:COS_REGISTER_PROC_FUNCTION                   *
(0098) * -------------------------------------------------------- *
(0099) *  [注意事项]                                              *
(0100) *         1、ProcPCB[]是一个函数指针数组,里面登记着       *
(0101) *            所有系统合法的消息处理函数的地址。            *
(0102) *         2、ProcPCB[]下标中,0为系统保留,其余为用户      *
(0103) *            自定义。                                      *
(0104) *         3、用户需要自己通过编写函数并通过连接宏          *
(0105) *            MSG_REGISTER_PROC_FUNCTION来注册合法消息处理  *
(0106) *            函数。                                        *
(0107) *         4、编程的时候,每增加一个静态的进程,就要增加一  *
(0108) *            次进程计数器MSG_Proc_Counter。                *
(0109) ***********************************************************/
(0110) void CMOS_INIT(void)
(0111) {
(0112)     uint8 n = 0;
(0113) 		
(0114)     for (n = 0;n<COS_PROCESS_COUNT+1;n++)
     347 2744      CLR	R20
     348 C014      RJMP	0x035D
(0115)     {
(0116)         #ifdef _USE_MESSAGE_PROC
(0117)         ProcPCB[n].ProcIO = SYS_DEFAULT;
(0118)         #endif
(0119)         ProcPCB[n].Proc   = NULL_PROC;
     349 E083      LDI	R24,3
     34A 9F84      MUL	R24,R20
     34B 0150      MOVW	R10,R0
     34C E586      LDI	R24,0x56
     34D E091      LDI	R25,1
     34E 01F5      MOVW	R30,R10
     34F 0FE8      ADD	R30,R24
     350 1FF9      ADC	R31,R25
     351 E384      LDI	R24,0x34
     352 E090      LDI	R25,0
     353 8391      STD	Z+1,R25
     354 8380      STD	Z+0,R24
(0120)         ProcPCB[n].IfProcAlive = FALSE;
     355 E588      LDI	R24,0x58
     356 E091      LDI	R25,1
     357 01F5      MOVW	R30,R10
     358 0FE8      ADD	R30,R24
     359 1FF9      ADC	R31,R25
     35A 2422      CLR	R2
     35B 8220      STD	Z+0,R2
     35C 9543      INC	R20
     35D 3044      CPI	R20,4
     35E F350      BCS	0x0349
(0121)     }
(0122) 		
(0123)     COS_REGISTER_PROC_FUNCTION
     35F D655      RCALL	_PROC_Register
     360 C712      RJMP	pop_xgset300C
_Process_Task:
     361 934A      ST	R20,-Y
     362 935A      ST	R21,-Y
(0124) }
(0125) 
(0126) /***********************************************************
(0127) *   函数说明:任务处理函数                                 *
(0128) *   输入:    无                                           *
(0129) *   输出:    无                                           *
(0130) *   调用函数:无                                           *
(0131) ***********************************************************/
(0132) void Process_Task(void)
(0133) {
(0134)     static uint8 n = 0;
(0135)     
(0136)     if (ProcPCB[n].IfProcAlive)                             //处理进程
     363 9020 0102 LDS	R2,RD_UseCooperatingMiniOs.c:n
     365 E083      LDI	R24,3
     366 9D82      MUL	R24,R2
     367 01F0      MOVW	R30,R0
     368 E588      LDI	R24,0x58
     369 E091      LDI	R25,1
     36A 0FE8      ADD	R30,R24
     36B 1FF9      ADC	R31,R25
     36C 8020      LDD	R2,Z+0
     36D 2022      TST	R2
     36E F0C1      BEQ	0x0387
(0137)     {
(0138)         ProcPCB[n].IfProcAlive = (*ProcPCB[n].Proc)();
     36F 9020 0102 LDS	R2,RD_UseCooperatingMiniOs.c:n
     371 E083      LDI	R24,3
     372 9D82      MUL	R24,R2
     373 0110      MOVW	R2,R0
     374 E586      LDI	R24,0x56
     375 E091      LDI	R25,1
     376 01F1      MOVW	R30,R2
     377 0FE8      ADD	R30,R24
     378 1FF9      ADC	R31,R25
     379 81A0      LDD	R26,Z+0
     37A 81B1      LDD	R27,Z+1
     37B 920F      PUSH	R0
     37C 921F      PUSH	R1
     37D 01FD      MOVW	R30,R26
     37E D719      RCALL	xicall
     37F 903F      POP	R3
     380 902F      POP	R2
     381 E588      LDI	R24,0x58
     382 E091      LDI	R25,1
     383 01F1      MOVW	R30,R2
     384 0FE8      ADD	R30,R24
     385 1FF9      ADC	R31,R25
     386 8300      STD	Z+0,R16
(0139)     }        
(0140)     
(0141)     n ++;
     387 9180 0102 LDS	R24,RD_UseCooperatingMiniOs.c:n
     389 5F8F      SUBI	R24,0xFF
     38A 9380 0102 STS	RD_UseCooperatingMiniOs.c:n,R24
(0142)     if (n >= g_cCOSPROCCounter)
     38C 9020 0100 LDS	R2,g_cCOSPROCCounter
     38E 1582      CP	R24,R2
     38F F078      BCS	0x039F
(0143)     {
(0144)         n = 0;
     390 2422      CLR	R2
     391 9220 0102 STS	RD_UseCooperatingMiniOs.c:n,R2
(0145)         g_cScheduleTest = MIN(g_cScheduleTest + 1,254);
     393 9180 0101 LDS	R24,g_cScheduleTest
     395 5F8F      SUBI	R24,0xFF
     396 3F8E      CPI	R24,0xFE
     397 F420      BCC	0x039C
     398 9140 0101 LDS	R20,g_cScheduleTest
     39A 5F4F      SUBI	R20,0xFF
     39B C001      RJMP	0x039D
     39C EF4E      LDI	R20,0xFE
     39D 9340 0101 STS	g_cScheduleTest,R20
(0146)     }
     39F 9159      LD	R21,Y+
     3A0 9149      LD	R20,Y+
     3A1 9508      RET
_UARTgetDataFromRxBuff:
  cflags0              --> R10
  Data                 --> R16
     3A2 92AA      ST	R10,-Y
FILE: E:\单片机\ROOBCO~1\全向定位系统\坐标转换模块\相对定位模块应用版\Relative_Locate_Module\RD_UseSerialBuff.c
(0001) /***********************************************************
(0002) *   函数库说明:串行通讯缓冲区处理函数库                   *
(0003) *   版本:      v1.00                                      *
(0004) *   作者:      王卓然                                     *
(0005) *   创建日期:  2006年4月24日                              *
(0006) * -------------------------------------------------------- *
(0007) *  [支 持 库]                                              *
(0008) *   支持库名称:RD_MacroAndConst.h                         *
(0009) *   需要版本:  v0.01 &abv                                 *
(0010) *   函

⌨️ 快捷键说明

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