passive_encoder.lst
来自「全场地位系统:小车静止或移动过程中码盘进行全场定位,用的是avr单片机」· LST 代码 · 共 1,758 行 · 第 1/5 页
LST
1,758 行
__start:
__text_start:
65 EFCF LDI R28,0xFF
66 E0D4 LDI R29,4
67 BFCD OUT 0x3D,R28
68 BFDE OUT 0x3E,R29
69 50C0 SUBI R28,0
6A 40D2 SBCI R29,2
6B EA0A LDI R16,0xAA
6C 8308 STD Y+0,R16
6D 2400 CLR R0
6E E4ED LDI R30,0x4D
6F E0F1 LDI R31,1
70 E011 LDI R17,1
71 34ED CPI R30,0x4D
72 07F1 CPC R31,R17
73 F011 BEQ 0x0076
74 9201 ST R0,Z+
75 CFFB RJMP 0x0071
76 8300 STD Z+0,R16
77 E7EC LDI R30,0x7C
78 E0F0 LDI R31,0
79 E0A0 LDI R26,0
7A E0B1 LDI R27,1
7B E010 LDI R17,0
7C E000 LDI R16,0
7D BF0B OUT 0x3B,R16
7E 3CE9 CPI R30,0xC9
7F 07F1 CPC R31,R17
80 F021 BEQ 0x0085
81 95C8 LPM
82 9631 ADIW R30,1
83 920D ST R0,X+
84 CFF9 RJMP 0x007E
85 D5AC RCALL _main
_exit:
86 CFFF RJMP _exit
FILE: E:\单片机\ROOBCO~1\全向定位系统\被动小车\Passive_Encoder\LIB_Config.c
(0001) /***********************************************************
(0002) * 声明库说明:库函数配置库 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件说明] *
(0008) * 处理器: *
(0009) * 系统时钟: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 库] *
(0012) * 支持库名称:LIB_Config.h *
(0013) * 需要版本: ----- *
(0014) * 支持库说明:库函数配置声明库 *
(0015) * -------------------------------------------------------- *
(0016) * [版本更新] *
(0017) * 修改: *
(0018) * 修改日期: *
(0019) * 版本: *
(0020) * -------------------------------------------------------- *
(0021) * [版本历史] *
(0022) * -------------------------------------------------------- *
(0023) * [使用说明] *
(0024) ***********************************************************/
(0025)
(0026) /********************
(0027) * 头 文 件 配 置 区 *
(0028) ********************/
(0029) # include "LIB_Config.h"
(0030)
(0031) /********************
(0032) * 系 统 宏 定 义 *
(0033) ********************/
(0034)
(0035) /*------------------*
(0036) * 常 数 宏 定 义 *
(0037) *------------------*/
(0038)
(0039) /*------------------*
(0040) * 动 作 宏 定 义 *
(0041) *------------------*/
(0042)
(0043) /********************
(0044) * 自定义类型声明区 *
(0045) ********************/
(0046)
(0047) /********************
(0048) * 模块结构体定义区 *
(0049) ********************/
(0050)
(0051) /********************
(0052) * 函 数 声 明 区 *
(0053) ********************/
(0054) void LIB_INIT(void);
(0055)
(0056) /********************
(0057) * 模块函数声明区 *
(0058) ********************/
(0059)
(0060) /********************
(0061) * 模块变量声明区 *
(0062) ********************/
(0063)
(0064) /********************
(0065) * 全局变量声明区 *
(0066) ********************/
(0067)
(0068) /***********************************************************
(0069) * 函数说明:库函数初始化函数 *
(0070) * 输入: 无 *
(0071) * 输出: 无 *
(0072) * 调用函数:无 *
(0073) ***********************************************************/
(0074) void LIB_INIT(void)
(0075) {
_LIB_INIT:
87 9508 RET
FILE: E:\单片机\ROOBCO~1\全向定位系统\被动小车\Passive_Encoder\EX_Support.c
(0001) /***********************************************************
(0002) * 函数库说明:底层硬件初始化驱动函数库 *
(0003) * 版本: *
(0004) * 作者: *
(0005) * 创建日期: *
(0006) * -------------------------------------------------------- *
(0007) * [硬件说明] *
(0008) * 处理器: *
(0009) * 系统时钟: *
(0010) * -------------------------------------------------------- *
(0011) * [支 持 库] *
(0012) * 支持库名称:HD_Support.h *
(0013) * 需要版本: ----- *
(0014) * 支持库说明:底层硬件初始化声明库 *
(0015) * *
(0016) * 支持库名称:EX_Support.h *
(0017) * 需要版本: ----- *
(0018) * 支持库说明:底层硬件初始化驱动声明库 *
(0019) * *
(0020) * 支持库名称:PF_Config.h *
(0021) * 需要版本: ----- *
(0022) * 支持库说明:硬件平台配置声明库 *
(0023) * -------------------------------------------------------- *
(0024) * [版本更新] *
(0025) * 修改: *
(0026) * 修改日期: *
(0027) * 版本: *
(0028) * -------------------------------------------------------- *
(0029) * [版本历史] *
(0030) * -------------------------------------------------------- *
(0031) * [使用说明] *
(0032) ***********************************************************/
(0033)
(0034) /********************
(0035) * 头 文 件 配 置 区 *
(0036) ********************/
(0037) # include "PF_Config.h"
(0038) # include "Ex_Support.h"
(0039) # include "LIB_Config.h"
(0040) # include "DL_Config.h"
(0041)
(0042) /********************
(0043) * 系 统 宏 定 义 *
(0044) ********************/
(0045)
(0046) /*------------------*
(0047) * 常 数 宏 定 义 *
(0048) *------------------*/
(0049)
(0050) /*------------------*
(0051) * 动 作 宏 定 义 *
(0052) *------------------*/
(0053) # pragma ctask Insert_Timer0_OVF_ISR_Code
(0054)
(0055) /********************
(0056) * 模块结构体定义区 *
(0057) ********************/
(0058)
(0059) /********************
(0060) * 函 数 声 明 区 *
(0061) ********************/
(0062) void Insert_Timer0_OVF_ISR_Code(void);
(0063) void Driver_INIT(void);
(0064) void Delay_MS(uint16 wTime);
(0065) BOOL PROC_Send_Frame(void);
(0066)
(0067) /********************
(0068) * 模块函数声明区 *
(0069) ********************/
(0070)
(0071)
(0072)
(0073) /********************
(0074) * 模块变量声明区 *
(0075) ********************/
(0076) static uint16 s_wSystemDelayTimerCounter = 0;
(0077)
(0078)
(0079) /********************
(0080) * 全局变量声明区 *
(0081) ********************/
(0082) uint16 g_wSystemTimer = 0;
(0083) INT32 g_lCounterL = 0;
(0084) INT32 g_lCounterR = 0;
(0085) INT32 g_lCounterLImage = 0;
(0086) INT32 g_lCounterRImage = 0;
(0087)
(0088) BYTE g_chSendBuffer[17] =
(0089) {
(0090) 0xAA,17,0xAC,
(0091) 0,0,0,0,0,0,0,0,0,0,0,0,
(0092) 0,0x55
(0093) };
(0094) BYTE g_chReceiveBuffer[17] = {0};
(0095) BYTE g_chSPICounter = 0;
(0096)
(0097) /********************
(0098) * 全局变量声引用区 *
(0099) ********************/
(0100) extern BOOL g_bRunFlagA;
(0101)
(0102) /***********************************************************
(0103) * 函数说明:软件驱动初始化函数 *
(0104) * 输入: 无 *
(0105) * 输出: 无 *
(0106) * 调用函数:无 *
(0107) ***********************************************************/
(0108) void Driver_INIT(void)
(0109) {
_Driver_INIT:
88 9508 RET
(0110) //*在这里插入你的各类软件驱动初始化代码*//
(0111) }
(0112)
(0113) /***********************************************************
(0114) * 函数说明:数据包发送函数 *
(0115) * 输入: 无 *
(0116) * 输出: FALSE *
(0117) * 调用函数:无 *
(0118) ***********************************************************/
(0119) BOOL PROC_Send_Frame(void)
(0120) {
(0121) if (g_chSPICounter)
_PROC_Send_Frame:
n1 --> R18
chXOR0 --> R16
89 9020 0136 LDS R2,g_chSPICounter
8B 2022 TST R2
8C F011 BEQ 0x008F
(0122) {
(0123) return TRUE;
8D E001 LDI R16,1
8E C041 RJMP 0x00D0
(0124) }
(0125) //处理数据
(0126) TYPE_CONVERSION(&g_chSendBuffer[3],float) = g_fX;
8F 9040 013D LDS R4,g_fX+2
91 9050 013E LDS R5,g_fX+3
93 9020 013B LDS R2,g_fX
95 9030 013C LDS R3,g_fX+1
97 E1E7 LDI R30,0x17
98 E0F1 LDI R31,1
99 8220 STD Z+0,R2
9A 8231 STD Z+1,R3
9B 8242 STD Z+2,R4
9C 8253 STD Z+3,R5
(0127) TYPE_CONVERSION(&g_chSendBuffer[7],float) = g_fY;
9D 9040 0141 LDS R4,g_fY+2
9F 9050 0142 LDS R5,g_fY+3
A1 9020 013F LDS R2,g_fY
A3 9030 0140 LDS R3,g_fY+1
A5 E1EB LDI R30,0x1B
A6 E0F1 LDI R31,1
A7 8220 STD Z+0,R2
A8 8231 STD Z+1,R3
A9 8242 STD Z+2,R4
AA 8253 STD Z+3,R5
(0128) TYPE_CONVERSION(&g_chSendBuffer[11],float) = g_fLastAngle;
AB 9040 0139 LDS R4,g_fLastAngle+2
AD 9050 013A LDS R5,g_fLastAngle+3
AF 9020 0137 LDS R2,g_fLastAngle
B1 9030 0138 LDS R3,g_fLastAngle+1
B3 E1EF LDI R30,0x1F
B4 E0F1 LDI R31,1
B5 8220 STD Z+0,R2
B6 8231 STD Z+1,R3
B7 8242 STD Z+2,R4
B8 8253 STD Z+3,R5
(0129)
(0130) {
(0131) UINT8 n = 0;
(0132) BYTE chXOR = 0;
B9 2700 CLR R16
(0133)
(0134) for(n = 1;n < 15;n++)
BA E021 LDI R18,1
BB C009 RJMP 0x00C5
(0135) {
(0136) chXOR ^= g_chSendBuffer[n];
BC E184 LDI R24,0x14
BD E091 LDI R25,1
BE 2FE2 MOV R30,R18
BF 27FF CLR R31
C0 0FE8 ADD R30,R24
C1 1FF9 ADC R31,R25
C2 8020 LDD R2,Z+0
C3 2502 EOR R16,R2
C4 9523 INC R18
C5 302F CPI R18,0xF
C6 F3A8 BCS 0x00BC
(0137) }
(0138)
(0139) g_chSendBuffer[15] = chXOR;
C7 9300 0123 STS 0x0123,R16
(0140) }
(0141)
(0142) //开始发送数据
(0143) SPI_SS = LOW;
C9 B185 IN R24,0x05
CA 7F8B ANDI R24,0xFB
CB B985 OUT 0x05,R24
(0144) SPDR = g_chSendBuffer[0];
CC 9020 0114 LDS R2,g_chSendBuffer
CE BC2E OUT 0x2E,R2
(0145)
(0146) return FALSE;
CF 2700 CLR R16
D0 9508 RET
(0147) }
(0148)
(0149) /***********************************************************
(0150) * 函数说明:系统毫秒延时函数 *
(0151) * 输入: 需要延时的时间长度 *
(0152) * 输出: 无 *
(0153) * 调用函数:无 *
(0154) ***********************************************************/
(0155) void Delay_MS(uint16 wTime)
(0156) {
(0157) s_wSystemDelayTimerCounter = wTime;
_Delay_MS:
wTime --> R16
D1 9310 0101 STS 0x0101,R17
D3 9300 0100 STS 0x0100,R16
(0158)
(0159) while(s_wSystemDelayTimerCounter);
D5 9020 0100 LDS R2,0x0100
D7 9030 0101 LDS R3,0x0101
D9 2022 TST R2
DA F7D1 BNE 0x00D5
DB 2033 TST R3
DC F7C1 BNE 0x00D5
DD 9508 RET
(0160) }
(0161)
(0162) /***********************************************************
(0163) * 函数说明:定时器0中断处理程序代码插入函数 *
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?