📄 motorctr.lst
字号:
(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 + -