📄 jiema_user.c
字号:
//jiema_user:解码用户层程序
//测试成功,计数结果为1296(左右)时则可认为是引导码的开始
//若计数结果为108左右则认为是'0'码
//若计数结果为210左右则认为是'1'码
//若计数结果为1104左右则认为是连发代码,舍弃
//根据测试的计数次数判断为0和1吗
#include<spce061a_chf.h>
#include"bit.h"
#include"jiema_user.h"
int num[34]={0};
extern flag;
//初始化函数--包括IO口和中断的初始化
void init_jiema(void)
{
PB_Dir->bit.bit2=0;
PB_Attrib->bit.bit2=1;
P1_2=1;//EXT1中断口为悬浮式输入
//时钟的设置
*P_SystemClock=clock_A;//24.576--24.576/8
//定时器时钟的设置
Set_TimerA_Data(start_dataA);//定时器A从0开始计数
Set_TimerA_Ctrl(stopA);//开始先不计数
//设置中断
*P_INT_Ctrl=jiema_INT;//开IRQ3_EXIT1中断
//开中断
asm("irq on");
}
//要在全部译完码才进行解码
unsigned int jiema_value(void)
{
unsigned int system_code=0,system_ncode=0;//定义系统码和系统反码
unsigned int user_code=0,user_ncode=0;//定义用户码和用户反码
unsigned int jiema_i;
if((flag==34)&(num[1]>1200))//flag==0认为解码结束,而num[1]>1200认为引导码解码正确,可以译码
{
for(jiema_i=2;jiema_i<34;jiema_i++)
{
if((200<num[jiema_i])&(jiema_i<250))
{
num[jiema_i]=1;
}
else if((80<num[jiema_i])&(jiema_i<130))
{
num[jiema_i]=0;
}
if(jiema_i<=9)
{
system_ncode<<=1;
system_ncode|=num[jiema_i];
}
else if((9<jiema_i)&(jiema_i<=17))
{
system_code<<=1;
system_code|=num[jiema_i];
}
else if((17<jiema_i)&(jiema_i<=25))
{
user_ncode<<=1;
user_ncode|=num[jiema_i];
}
else
{
user_code<<=1;
user_code|=num[jiema_i];
}
}
//jiema_i=system_code+systen_ncode;
if(((system_code+system_ncode)==0xff)==((user_code+user_ncode)==0xff))//说明解码正确
{
return user_code;//返回用户码
}
else
{
return err;//否则返回错误的信息
}
}
else
{
return err;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -