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

📄 motorctr.lst

📁 一个直流电机的闭环控制源代码程序
💻 LST
📖 第 1 页 / 共 5 页
字号:
(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) 
(0081) /***********************************************************
(0082) *   函数说明:空函数                                       *
(0083) *   输入:    无                                           *
(0084) *   输出:    无                                           *
(0085) *   调用函数:无                                           *
(0086) ***********************************************************/
(0087) BOOL NULL_PROC(void)
(0088) {
(0089)     return FALSE;
_NULL_PROC:
      BE 2700      CLR	R16
      BF 9508      RET
_CMOS_INIT:
  Reg1                 --> R10
  n1                   --> R20
      C0 D792      RCALL	push_xgset300C
(0090) }
(0091) 					  
(0092) /***********************************************************
(0093) *   函数说明:消息队列系统初始化函数                       *
(0094) *   输入:    无                                           *
(0095) *   输出:    无                                           *
(0096) *   调用函数:COS_REGISTER_PROC_FUNCTION                   *
(0097) * -------------------------------------------------------- *
(0098) *  [注意事项]                                              *
(0099) *         1、ProcPCB[]是一个函数指针数组,里面登记着       *
(0100) *            所有系统合法的消息处理函数的地址。            *
(0101) *         2、ProcPCB[]下标中,0为系统保留,其余为用户      *
(0102) *            自定义。                                      *
(0103) *         3、用户需要自己通过编写函数并通过连接宏          *
(0104) *            MSG_REGISTER_PROC_FUNCTION来注册合法消息处理  *
(0105) *            函数。                                        *
(0106) *         4、编程的时候,每增加一个静态的进程,就要增加一  *
(0107) *            次进程计数器MSG_Proc_Counter。                *
(0108) ***********************************************************/
(0109) void CMOS_INIT(void)
(0110) {
(0111)     uint8 n = 0;
(0112) 		
(0113)     for (n = 0;n<COS_PROCESS_COUNT+1;n++)
      C1 2744      CLR	R20
      C2 C014      RJMP	0x00D7
(0114)     {
(0115)         #ifdef _USE_MESSAGE_PROC
(0116)         ProcPCB[n].ProcIO = SYS_DEFAULT;
(0117)         #endif
(0118)         ProcPCB[n].Proc   = NULL_PROC;
      C3 E083      LDI	R24,3
      C4 9F84      MUL	R24,R20
      C5 0150      MOVW	R10,R0
      C6 EA89      LDI	R24,0xA9
      C7 E090      LDI	R25,0
      C8 01F5      MOVW	R30,R10
      C9 0FE8      ADD	R30,R24
      CA 1FF9      ADC	R31,R25
      CB E286      LDI	R24,0x26
      CC E090      LDI	R25,0
      CD 8391      STD	Z+1,R25
      CE 8380      STD	Z+0,R24
(0119)         ProcPCB[n].IfProcAlive = FALSE;
      CF EA8B      LDI	R24,0xAB
      D0 E090      LDI	R25,0
      D1 01F5      MOVW	R30,R10
      D2 0FE8      ADD	R30,R24
      D3 1FF9      ADC	R31,R25
      D4 2422      CLR	R2
      D5 8220      STD	Z+0,R2
      D6 9543      INC	R20
      D7 3044      CPI	R20,4
      D8 F350      BCS	0x00C3
(0120)     }
(0121) 		
(0122)     COS_REGISTER_PROC_FUNCTION
      D9 D621      RCALL	_PROC_Register
      DA C77D      RJMP	pop_xgset300C
(0123) }
(0124) 
(0125) /***********************************************************
(0126) *   函数说明:任务处理函数                                 *
(0127) *   输入:    无                                           *
(0128) *   输出:    无                                           *
(0129) *   调用函数:无                                           *
(0130) ***********************************************************/
(0131) void Process_Task(void)
(0132) {
(0133)     static uint8 n = 0;
(0134)     
(0135)     if (ProcPCB[n].IfProcAlive)                             //处理进程
_Process_Task:
      DB 9020 007A LDS	R2,n
      DD E083      LDI	R24,3
      DE 9D82      MUL	R24,R2
      DF 01F0      MOVW	R30,R0
      E0 EA8B      LDI	R24,0xAB
      E1 E090      LDI	R25,0
      E2 0FE8      ADD	R30,R24
      E3 1FF9      ADC	R31,R25
      E4 8020      LDD	R2,Z+0
      E5 2022      TST	R2
      E6 F0C1      BEQ	0x00FF
(0136)     {
(0137)         ProcPCB[n].IfProcAlive = (*ProcPCB[n].Proc)();
      E7 9020 007A LDS	R2,n
      E9 E083      LDI	R24,3
      EA 9D82      MUL	R24,R2
      EB 0110      MOVW	R2,R0
      EC EA89      LDI	R24,0xA9
      ED E090      LDI	R25,0
      EE 01F1      MOVW	R30,R2
      EF 0FE8      ADD	R30,R24
      F0 1FF9      ADC	R31,R25
      F1 81A0      LDD	R26,Z+0
      F2 81B1      LDD	R27,Z+1
      F3 920F      PUSH	R0
      F4 921F      PUSH	R1
      F5 01FD      MOVW	R30,R26
      F6 D778      RCALL	xicallx
      F7 903F      POP	R3
      F8 902F      POP	R2
      F9 EA8B      LDI	R24,0xAB
      FA E090      LDI	R25,0
      FB 01F1      MOVW	R30,R2
      FC 0FE8      ADD	R30,R24
      FD 1FF9      ADC	R31,R25
      FE 8300      STD	Z+0,R16
(0138)     }        
(0139)     
(0140)     n ++;
      FF 9180 007A LDS	R24,n
     101 5F8F      SUBI	R24,0xFF
     102 9380 007A STS	n,R24
(0141)     if (n >= g_cCOSPROCCounter)
     104 9020 0079 LDS	R2,g_cCOSPROCCounter
     106 1582      CP	R24,R2
     107 F018      BCS	0x010B
(0142)     {
(0143)         n = 0;
     108 2422      CLR	R2
     109 9220 007A STS	n,R2
(0144)     }
     10B 9508      RET
FILE: H:\单片机\源程序\2007全国电子设计大赛\电机闭环模块\RD_UseSerialBuff.c
(0001) /***********************************************************
(0002) *   函数库说明:串行通讯缓冲区处理函数库                   *
(0003) *   版本:      v1.00                                      *
(0004) *   作者:      王卓然                                     *
(0005) *   创建日期:  2006年4月24日                              *
(0006) * -------------------------------------------------------- *
(0007) *  [支 持 库]                                              *
(0008) *   支持库名称:RD_MacroAndConst.h                         *
(0009) *   需要版本:  v0.01 &abv                                 *
(0010) *   函数库说明:系统常用宏定义库                           *
(0011) *                                                          *
(0012) *   支持库名称:RD_UseSerialBuff.h                         *
(0013) *   需要版本:  -----                                      *
(0014) *   声明库说明:串行通讯缓冲区处理声明库                   *
(0015) * -------------------------------------------------------- *
(0016) *  [版本更新]                                              *
(0017) *   修改:      王卓然                                     *
(0018) *   修改日期:  2006年5月20日                              *
(0019) *   版本:      v0.31                                      *
(0020) *                                                          *
(0021) *   修改:      王卓然                                     *
(0022) *   修改日期:  2007年3月1日                               *
(0023) *   版本:      v0.40                                      *
(0024) *                                                          *
(0025) *   修改:      王卓然                                     *
(0026) *   修改日期:  2007年3月2日                               *
(0027) *   版本:      v1.00                                      *
(0028) * -------------------------------------------------------- *
(0029) *  [版本历史]                                              *
(0030) *       v0.30  该版本提供了最基本的环形队列缓冲区操作函数。*
(0031) *       v0.31  增加了调用该函数时候的宏说明,可以选择需要  *
(0032) *              提供的缓冲区功能。                          *
(0033) *       v0.40  增加了串口发送进程。增加了原子操作。        *
(0034) *       v1.00  针对新规范进行了修改,增加自动收发进程。    *
(0035) * -------------------------------------------------------- *
(0036) *  [使用说明]                                              *
(0037) *           1、通过SERIAL_RX_BUFF_SIZE来设定接收缓冲区的大 *
(0038) *              小;通过SERIAL_TX_BUFF_SIZE来设定发送缓冲区 *
(0039) *              的大小。                                    *
(0040) *           2、通过定义_USE_SERIAL_RX_BUFF来选择添加一个接 *
(0041) *              收缓冲区;通过定义_USE_SERIAL_TX_BUFF来添加 *
(0042) *              一个发送缓冲区。                            *
(0043) *           3、在取数的时候,有时候要考虑屏蔽中断,否则会  *
(0044) *              出现不可预知的后果。                        *
(0045) *           4、可以通过宏_USE_SERIAL_TX_TRANSMITTER_PROC在 *
(0046) *              使用发送缓冲时,使用自动发送进程。并需要定  *
(0047) *              义宏UDR_PORT来指定发送端口、也需要将宏      *
(0048) *              SERIAL_INSERT_USART_TX_ISR_CODE插入到发送完 *
(0049) *              成中断处理程序中。                          *
(0050) *           5、使用宏SERIAL_ENABLE_WRITE定义额外的发送使能 *
(0051) *              代码。例如485总线的发送使能等。             *
(0052) *           6、使用宏SERIAL_DISABLE_WRITE定义额外的发送使  *
(0053) *              能关闭代码。例如485总线发送使能的关闭。     *
(0054) ***********************************************************/
(0055) 
(0056) /********************
(0057) * 头 文 件 配 置 区 *
(0058) ********************/
(0059) # include "LIB_Config.h"
(0060) # include "RD_MacroAndConst.h"
(0061) # include "RD_UseSerialBuff.h"
(0062) 
(0063) /********************
(0064) *   系 统 宏 定 义  *
(0065) ********************/
(0066) 
(0067) /*------------------*
(0068) *   常 数 宏 定 义  *
(0069) *------------------*/
(0070) #ifndef SERIAL_RX_BUFF_SIZE
(0071)     # define SERIAL_RX_BUFF_SIZE 32
(0072) #endif
(0073) #ifndef SERIAL_TX_BUFF_SIZE
(0074)     # define SERIAL_TX_BUFF_SIZE 32
(0075) #endif
(0076) #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0077)     #ifndef UDR_PORT
(0078)         # error Need for UDR_PORT!
(0079)     #endif
(0080) 
(0081)     #ifndef SERIAL_ENABLE_WRITE
(0082)         # define SERIAL_ENABLE_WRITE
(0083)     #endif
(0084) 
(0085)     #ifndef SERIAL_DISABLE_WRITE
(0086)         # define SERIAL_DISABLE_WRITE
(0087)     #endif
(0088) #endif
(0089) /********************
(0090) *   函 数 声 明 区  *
(0091) ********************/
(0092) #ifdef _USE_SERIAL_RX_BUFF
(0093) BOOL UARTaddDataToRxBuff(uint8 Data);
(0094) BOOL UARTgetDataFromRxBuff(uint8 *Data);
(0095) #endif
(0096) 
(0097) #ifdef _USE_SERIAL_TX_BUFF
(0098) BOOL UARTaddDataToTxBuff(uint8 Data);
(0099) BOOL UARTgetDataFromTxBuff(uint8 *Data);
(0100)     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0101) BOOL PROC_Serial_Transmitter(void);
(0102)     #endif
(0103) #endif
(0104) 
(0105) /********************
(0106) *   模块变量定义区  *
(0107) ********************/
(0108) #ifdef _USE_SERIAL_RX_BUFF
(0109) static uint8  UARTRxBuff[SERIAL_RX_BUFF_SIZE];
(0110) static unsigned int  UARTRxBuffHead = 0;
(0111) static unsigned int  UARTRxBuffTail = 0;
(0112) static unsigned int  UARTRxBuffCounter = 0;
(0113) #endif
(0114) 
(0115) #ifdef _USE_SERIAL_TX_BUFF
(0116) static uint8  UARTTxBuff[SERIAL_TX_BUFF_SIZE];
(0117) static unsigned int  UARTTxBuffHead = 0;
(0118) static unsigned int  UARTTxBuffTail = 0;
(0119) static unsigned int  UARTTxBuffCounter = 0;
(0120) #endif
(0121)  
(0122) /********************
(0123) *   全局变量定义区  *
(0124) ********************/
(0125) #ifdef _USE_SERIAL_TX_BUFF
(0126)     #ifdef _USE_SERIAL_TX_TRANSMITTER_PROC
(0127) BOOL g_bIfSerialTransmitCompleted = TRUE;
(0128)     #endif
(0129) #endif
(0130) 
(0131) /***********************************************************
(0132) *   函数说明:接收缓冲区取值函数                           *
(0133) *   输入:    存储取出数据地址的指针                       *
(0134) *   输出:    取值是否成功                                 *
(0135) *   调用函数:无                                           *
(0136) ***********************************************************/
(0137) #ifdef _USE_SERIAL_RX_BUFF
(0138) BOOL UARTgetDataFromRxBuff(uint8  *Data)
(0139) {
(0140)     SAFE_CODE_PERFORMANCE
_UARTgetDataFromRxBuff:
  Data                 --> R16
     10C 94F8      BCLR	7
     10D 9020 007D LDS	R2,n+3
     10F 9030 007E LDS	R3,0x007E
     111 9040 007B LDS	R4,n+1
     113 9050 007C LDS	R5,n+2
     115 1442      CP	R4,R2
     116 0453      CPC	R5,R3
     117 F459      BNE	0x0123
     118 9020 007F LDS	R2,0x007F
     11A 9030 0080 LDS	R3,0x0080
     11C 2022      TST	R2
     11D F429      BNE	0x0123
     11E 2033      TST	R3
     11F F419      BNE	0x0123
     120 9478      BSET	7
     121 2700      CLR	R16
     122 C02B      RJMP	0x014E
     123 9020 007B LDS	R2,n+1
     125 9030 007C LDS	R3,n+2
     127 01C1      MOVW	R24,R2
     128 9601      ADIW	R24,1
     129 9390 007C STS	n+2,R25
     12B 9380 007B STS	n+1,R24
     12D E385      LDI	R24,0x35
     12E E091      LDI	R25,1
     12F 01F1      MOVW	R30,R2
     130 0FE8      ADD	R30,R24
     131 1FF9      ADC	R31,R25
     132 8020      LDD	R2,Z+0
     133 01F8      MOVW	R30,R16
     134 8220      STD	Z+0,R2
     135 9180 007F LDS	R24,0x007F
     137 9190 0080 LDS	R25,0x0080
     139 9701      SBIW	R24,1
     13A 9390 0080 STS	0x0080,R25
     13C 9380 007F STS	0x007F,R24
     13E 9180 007B LDS	R24,n+1
     140 9190 007C LDS	R25,n+2
     142 3880      CPI	R24,0x80
     143 E0E0      LDI	R30,0
     144 079E      CPC	R25,R30
     145 F431      BNE	0x014C
     146 2422      CLR	R2
     147 2433      CLR	R3
     148 9230 007C STS	n+2,R3
     14A 9220 007B STS	n+1,R2
     14C 9478      BSET	7
(0141)     (

⌨️ 快捷键说明

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