📄 constant.h
字号:
/***************************************************/
/* 超声波测距传感器 */
/* —— 常量定义 */
/* 20080222 */
/* By DingQi */
/***************************************************/
// 注:以下文档的 TAB 为 2 个字符!
/* —————— 工作模式控制 ———————— */
#define STOP_MEASURE 0x00 // 停止测量,待命
#define AUTO_MEASURE 0x10 // 自动测量模式
#define READ_BACK_DATA 0x00 // 自动测量模式下,被动数据返回
#define AUTO_BACK_DATA 0x01 // 自动测量模式下,主动数据返回
#define SINGLE_MEASURE 0x20 // 单次测量模式
#define NOPROC_BACK 0x00 // 测量数据不作处理,直接返回,测量几次返回几个
#define MID_BACK 0x01 // 剔除测量数据中的最大最小值后剩余数据返回
#define MEAN_BACK 0x02 // 将测量数据取平均后返回平均值
#define MID_MEAN_BACK 0x03 // 剔除测量数据中的最大最小值后平均值返回
#define GET_MAIN_MODE 0xF0
#define GET_SUB_MODE 0x0F
/* ————— 通讯 ————————*/
#define MaxRcvByte_C 32 // 接收缓冲区大小
#define MaxTxdByte_C 32 // 发送缓冲区大小,设置单独的发送缓冲区是为了能全双工通讯
// 波特率定义
#define B_57600 4
#define B_38400 3
#define B_19200 2
#define B_9600 1
#define B_4800 0
// 在 22.1184Hz 下用 T1 作波特率发生器, 1 分频, T1 自动重加载值
#define B57600_C 244
#define B38400_C 238
#define B19200_C 220
#define B9600_C 184
#define B4800_C 144
// SMOD
#define UART_MODE1_C 0x40 // SM0,SM1= 01
#define EN_RCV_C 0x10 // REN=1
// 允许串口中断
#define EnUART_C 0x10
// 串口中断优先级
#define UART_HIGH 0x10
// 帧命令字
#define READ_MEMORY 0x01 // 读内存命令字
#define WRITE_MEMORY 0x02 // 写内存命令字
#define SET_WORKMODE 0x03 // 设置工作模式
#define READ_DATA 0x04 // 自动模式下读测量数据
// 自己的设备地址
#define MY_ADDR 0x01
/* ——— 工作状态 ————*/
#define WAIT_START 0x00
#define ULTRASONIC_T 0x01
#define ULTRASONIC_R 0x02
#define CAL_RESULT 0x03
#define DATA_BACK 0x04
#define WAIT_FINISH 0x05
#define WAIT_NEXT 0x06 // 等待单次测量模式下多次数据采集的间隔时间
/*—————— 测量 ——————*/
#define DATA_SAVE_NUM 8 // 暂时保存 8 个数据,因为要环形处理,所以此数必须为2的幂!!
#define ULTRASONIC_T_NUM 20 // 发送10个脉冲,但需要处理 20 个时间间隔
#define SEND_VALID 1 // 超声波发射有效, 对应变压器驱动导通,此时Cut_Off端应无效!
#define SEND_INVALID 0 // 超声波发射无效,变压器驱动无效
#define CUT_OFF_VALID 0 // 超声波余波抑制控制端有效,对应变压器初级短路,此时 Send 端应无效!
#define CUT_OFF_INVALID 1 // 超声波余波抑制控制端无效,变压器正常工作
#define EN852OUT 1 // 控制 852 的输出,0 —— 禁止, 1 - 允许,利用OC输出方式短路积分电容。
#define DIS852OUT 0
#define INHIBIT_TIME 11000 // 屏蔽计时约 1ms
#define CUT_OFF_DELAY 300 // 启动回波抑制延时时间
#define MEA_GAPTIME 10 // 单次模式下两次数据采集间隔时间,ms
// 计算距离用常数
// 因为按照最大距离 20 m, 计时数据不超过 50ms, 和速度的乘积不会造成长整数据溢出。
#define ULTRA_SPEED 3403 // 放大了 10 倍,和下面系数配合,得到单位为 mm 的距离值
#define TIME_RATIO 110592 // 作为分母,缩小了 100 倍。
/*———————— 工作指示 ———————— */
#define NORMAL 0
#define NORMAL_DISP 500 // 正常工作指示,1秒亮一次
#define NORMAL_NUM 0 // 正常工作指示连续
#define UART_OK 1
#define UART_DISP 100 // 通讯工作指示,1秒亮 5 次
#define UART_NUM 10 // 显示 10 次
#define MEA_OK 2
#define MEA_OK_DISP 10 // 测量工作指示, 1秒亮 50 次
#define MEA_OK_NUM 10 // 显示 10 次
/*----- WDT 参数定义 ---------- */
#define Watchdog_C 0x3D // 0011 1101, 设置 WDT 分频选择: 101, 约 1s ( 22.1184MHz)
#define CLRWDT_C 0x3D
#define WDTTIME_C 1000 // 对 1 ms 计数,1秒清一次 WDT。
/*———————— MCU硬件初始化常数 ———————— */
/* CPU时钟参数定义 */
#define CLKDIV1_C 0x0 /* 设置CPU 主时钟分频 */
#define CLKDIV2_C 1
#define CLKDIV4_C 2
#define CLKDIV8_C 3
#define CLKDIV16_C 4
#define CLKDIV32_C 5
#define CLKDIV64_C 6
#define CLKDIV128_C 7
#define FOSC 22118400l // 振荡器频率 22.1184Mhz
/* 输入输出口定义 */
#define P1M0_C 0x0f /* 0000 1111,P1口低 4 位OC输出(因为852增益控制有内置上拉电阻),高 4位 标准 51 口 */
#define P1M1_C 0x0f /* 0000 1111 */
#define P3M0_C 0xAC /* 1010 1100,P3.0 P3.1 标准51口,P3.3 输入, P3.4 推挽输出, P3.2 P3.5 P3.7 OC输出*/
#define P3M1_C 0xB4 /* 1011 0100 */
/* 定时器参数定义 */
#define T0MODE0 0x00 // 0000 0000,Timer0工作在模式0 ,13位定时;
#define T0MODE1 0x01 // 0000 0001,Timer0工作在模式1 ,16位定时;
#define T0MODE2 0x02 // 0000 0010,Timer0工作在模式2 ,8 位自动重加载定时;
#define T0MODE3 0x03 // 0000 0011,Timer0工作在模式3
#define T0_TIMER 0x00 // Timer0 工作在定时器模式
#define T0_COUNTER 0x04 // Timer0 工作在计数器模式
#define T0_DISGATE 0x00 // Timer0 禁止INT0引脚控制
#define T0_ENGATE 0x08 // Timer0 允许INT0引脚控制
#define T1MODE0 0x00 // 0000 0000,Timer0工作在模式0 ,13位定时;
#define T1MODE1 0x10 // 0000 0001,Timer0工作在模式1 ,16位定时;
#define T1MODE2 0x20 // 0000 0010,Timer0工作在模式2 ,8 位自动重加载定时;
#define T1MODE3 0x30 // 0000 0011,Timer0工作在模式3
#define T1_TIMER 0x00 // Timer1 工作在定时器模式
#define T1_COUNTER 0x40 // Timer1 工作在计数器模式
#define T1_DISGATE 0x00 // Timer1 禁止INT1引脚控制
#define T1_ENGATE 0x80 // Timer1 允许INT1引脚控制
#define SET_T0X12_C 0x80 // or AUXR
#define CLR_T0X12_C 0x7F // and AUXR
#define SET_T1X12_C 0x40 // or AUXR
#define CLR_T1X12_C 0xBF // and AUXR
#define TIME1ms_C 0xF8D0 /* 1ms 定时的加载值字节,对应 22.1184MHz 定时器12分频 */
#define TIME1msH_C 0xF8 /* 1ms 定时的加载值高字节 */
#define TIME1msL_C 0xD0 /* 1ms 定时的加载值低字节 */
/* 中断处理参数定义 */
#define EnINT0_C 0x01
#define EnT0_C 0x02
#define EnINT1_C 0x04
#define EnT1_C 0x08
#define EnUART_C 0x10
#define EnADCSPI_C 0x20
#define EnPCALVD_C 0x40
#define INT0_DOWN 0x01 // TCON 中对INT0中断信号的控制,下降沿触发;
#define INT0_LOW 0x00 // TCON 中对INT0中断信号的控制,低电平触发;
#define INT1_DOWN 0x04 // TCON 中对INT1中断信号的控制,下降沿触发;
#define INT1_LOW 0x00 // TCON 中对INT1中断信号的控制,低电平触发;
#define NOIP_C 0x00 /* 无优先级 */
#define INT0_HIGH 0x01 // IP 寄存器中的优先级设置,IPH暂不处理。
#define T0_HIGH 0x02
#define INT1_HIGH 0x04
#define T1_HIGH 0x08
#define UART_HIGH 0x10
#define ADCSPI_HIGH 0x20
#define PCALVD_HIGH 0x40
/* SPI 初始化常数 */
#define SCLK_FDIV4 0x00 // SPI 时钟: CPU_CLK/4
#define SCLK_FDIV16 0x01 // SPI 时钟: CPU_CLK/16
#define SCLK_FDIV64 0x10 // SPI 时钟: CPU_CLK/64
#define SCLK_FDIV128 0x11 // SPI 时钟: CPU_CLK/128
#define SAMPLE_IN_FIRST 0x00 // 在时钟的前沿数据采样
#define SAMPLE_IN_SECOND 0x04 // 在时钟的后沿数据采样
#define SCLK_IS_HIGH 0x00 // 时钟为正脉冲,前沿为上升,后沿为下降
#define SCLK_IS_LOW 0x08 // 时钟为负脉冲,前沿为下降,后沿为上升
#define SPI_SLV 0x00 // 设置 SPI 为从模式
#define SPI_MASTER 0x10 // 设置 SPI 为主模式
#define MSB_FIRST_SEND 0x00 // 先发送数据的最高位
#define LSB_FIRST_SEND 0x20 // 先发送数据的最低位
#define DISABLE_SPI 0x00 // 禁止 SPI
#define ENABLE_SPI 0x40 // 使能 SPI
#define IGNORER_SS 0x80 // 忽略 SS 引脚
#define SLV_BY_SS 0x00 // 有 SS 引脚选择主、从模式
#define CLEAR_SPISTAT 0xC0 // 清除SPI的 SPIF、WCOL 标志
#define GET_SPIF 0x80 // 得到SPIF标志
/* PCA 初始化常数, */
#define STARTPCA_C 0x40; // or CCON 中的CR位控制 启动 PCA
#define STOPPCA_C 0xBF; // and CCON 中的CR位控制 停止 PCA
#define FOSCdiv12_C 0x00
#define FOSCdiv2_C 0x02
#define T0Over_C 0x04 // T0 溢出
#define ECI_C 0x06 // 外部脉冲输入
#define EnCF_C 0x01 // 允许PCA溢出中断
#define EnCMP_C 0x40 // 0100 0000, CCAPMn 中控制位6, 允许比较器
#define EnCAPP_C 0x20 // 0010 0000, CCAPMn 中控制位5, 允许上升沿捕获
#define EnCAPN_C 0x10 // 0001 0000, CCAPMn 中控制位4, 允许下降沿捕获
#define EnMAT_C 0x08 // 0000 1000, CCAPMn 中控制位3, 允许匹配或捕获后置位 CCFn
#define EnTOG_C 0x04 // 0000 0100, CCAPMn 中控制位2, 允许匹配或捕获后触发输出翻转
#define EnPWM_C 0x02 // 0000 0010, CCAPMn 中控制位1, 允许对应的端子输出PWM信号
#define EnCCFI_C 0x01 // 0000 0001, CCAPMn 中控制位0, 允许CCF产生中断
/* —————— 通用常数定义 —————— */
#define TRUE 1
#define FALSE 0
#define LED_ON 0
#define LED_OFF 1
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -