- 打卡等级:常住居民III
- 打卡总天数:158
- 最近打卡:2026-04-08 10:46:34
已绑定手机
论坛元老
- 积分
- 3488
|
核心程序锁判断高电平时间:
//<<AICUBE_USER_HEADER_REMARK_BEGIN>>
////////////////////////////////////////
// 在此添加用户文件头说明信息
// 文件名称: port.c
// 文件描述:
// 文件版本: V1.0
// 修改记录:
// 1. (2025-05-16) 创建文件
////////////////////////////////////////
//<<AICUBE_USER_HEADER_REMARK_END>>
#include "config.h"
//<<AICUBE_USER_INCLUDE_BEGIN>>
// 在此添加用户头文件包含
//<<AICUBE_USER_INCLUDE_END>>
//<<AICUBE_USER_GLOBAL_DEFINE_BEGIN>>
// 在此添加用户全局变量定义、用户宏定义以及函数声明
#define IRED P32
u32 hw_jsm; //定义一个32位数据变量,保存接收码
u8 hw_jsbz; //定义一个8位数据的变量,用于指示接收标志
/*******************************************************************************
* 函 数 名 : HW_jssj
* 函数功能 : 高电平持续时间,将记录的时间保存在t中返回,其中一次大约20us
* 输 入 : 无
* 输 出 : t
*******************************************************************************/
u8 HW_jssj()
{
u8 t=0;
while(IRED==1)//高电平
{
t++;
delay_us(20);
if(t>=250) return t;//超时溢出
}
return t;
}
//<<AICUBE_USER_GLOBAL_DEFINE_END>>
////////////////////////////////////////
// 端口3中断服务程序
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_ISR(void) interrupt P3INT_VECTOR
{
//<<AICUBE_USER_PORT3_ISR_CODE1_BEGIN>>
// 在此添加中断函数用户代码
u8 Tim=0,Ok=0,Data,Num=0;
uint8_t intf;
intf = CheckP3nFlag(BIT_ALL); //读取中断请求标志
ClearP3nFlag(BIT_ALL); //清除中断请求标志
if(intf&0x04)
{
while(1)
{
if(IRED==1)
{
Tim=HW_jssj();//获得此次高电平时间
if(Tim>=250) break;//不是有用的信号
if(Tim>=200 && Tim<250)
{
Ok=1;//收到起始信号
}
else if(Tim>=60 && Tim<90)
{
Data=1;//收到数据 1
}
else if(Tim>=10 && Tim<50)
{
Data=0;//收到数据 0
}
if(Ok==1)
{
hw_jsm<<=1;
hw_jsm+=Data;
if(Num>=32)
{
hw_jsbz=1;
break;
}
}
Num++;
}
}
}
//<<AICUBE_USER_PORT3_ISR_CODE1_END>>
}
////////////////////////////////////////
// P0口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT0_Init(void)
{
SetP0nPushPullMode(BIT_ALL); //设置P0为推挽输出模式
DisableP0nPullUp(BIT_ALL); //关闭P0内部上拉电阻
EnableP0nPullDown(BIT_ALL); //使能P0内部下拉电阻
DisableP0nSchmitt(BIT_ALL); //使能P0施密特触发
SetP0nSlewRateNormal(BIT_ALL); //设置P0一般翻转速度
SetP0nDrivingNormal(BIT_ALL); //设置P0一般驱动能力
SetP0nDigitalInput(BIT_ALL); //使能P0数字信号输入功能
//<<AICUBE_USER_PORT0_INITIAL_BEGIN>>
// 在此添加用户初始化代码
//<<AICUBE_USER_PORT0_INITIAL_END>>
}
////////////////////////////////////////
// P2口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT2_Init(void)
{
SetP2nQuasiMode(0xf8); //设置P2.7,P2.6,P2.5,P2.4,P2.3为准双向口模式
SetP2nPushPullMode(0x07); //设置P2.2,P2.1,P2.0为推挽输出模式
EnableP2nPullUp(0x07); //使能P2.2,P2.1,P2.0内部上拉电阻
DisableP2nPullUp(0xf8); //关闭P2.7,P2.6,P2.5,P2.4,P2.3内部上拉电阻
DisableP2nPullDown(BIT_ALL); //关闭P2内部下拉电阻
DisableP2nSchmitt(BIT_ALL); //使能P2施密特触发
SetP2nSlewRateNormal(BIT_ALL); //设置P2一般翻转速度
SetP2nDrivingNormal(BIT_ALL); //设置P2一般驱动能力
SetP2nDigitalInput(BIT_ALL); //使能P2数字信号输入功能
//<<AICUBE_USER_PORT2_INITIAL_BEGIN>>
// 在此添加用户初始化代码
//<<AICUBE_USER_PORT2_INITIAL_END>>
}
////////////////////////////////////////
// P3口初始化函数
// 入口参数: 无
// 函数返回: 无
////////////////////////////////////////
void PORT3_Init(void)
{
SetP3nQuasiMode(0xfb); //设置P3.7,P3.6,P3.5,P3.4,P3.3,P3.1,P3.0为准双向口模式
SetP3nHighZInputMode(0x04); //设置P3.2为高阻输入模式
EnableP3nPullUp(0x04); //使能P3.2内部上拉电阻
DisableP3nPullUp(0xfb); //关闭P3.7,P3.6,P3.5,P3.4,P3.3,P3.1,P3.0内部上拉电阻
DisableP3nPullDown(BIT_ALL); //关闭P3内部下拉电阻
DisableP3nSchmitt(BIT_ALL); //使能P3施密特触发
SetP3nSlewRateNormal(BIT_ALL); //设置P3一般翻转速度
SetP3nDrivingNormal(BIT_ALL); //设置P3一般驱动能力
SetP3nDigitalInput(BIT_ALL); //使能P3数字信号输入功能
SetP3nFallingInt(0x04); //设置P3.2为下降沿中断
EnableP3nInt(0x04); //使能P3.2口中断
SetP3IntPriority(0); //设置中断为最低优先级
//<<AICUBE_USER_PORT3_INITIAL_BEGIN>>
// 在此添加用户初始化代码
//<<AICUBE_USER_PORT3_INITIAL_END>>
}
//<<AICUBE_USER_FUNCTION_IMPLEMENT_BEGIN>>
// 在此添加用户函数实现代码
//<<AICUBE_USER_FUNCTION_IMPLEMENT_END>>
|
|