之前进行PIE编码的,考虑什么问题都在中断里面进行处理,如果中断处理不过来,那么问题就来了啊,就会产生重复波形啊
而且我也不太清楚,如何把数据传递到我的中断程序里面。
之前的代码思路是这样的:
int_bit_clear;
cnt++;
if(cnt==1)
preamble(1);
else if(cnt==2)
preamble(2);
else if(cnt==3)
preamble(3)
else if(cnt==4)
preamble(4)
else
{
if(data[cnt-4])
{
rTCNTB0=data_1;
rTCMPB0=data_1;
}
else
{
rTCNTB0=data_0;
rTCMPB0=data_0;
}
}
有一个需要说明的问题是,如果开启翻转,那么在开启翻转的那么一瞬间,会产生尖峰脉冲
就这么简单明了,可以,完全可以,毛刺问题可能会出现
第二种思考方法
把preamble头部也放进,data里面,而且是直接计数的,比如是data0,那么就在数组里面相应的位置赋值为(312,156)
要是1的话就赋值为(712,156) ,先把这个数组计算出来
然后再定时器0的中断里面计数,对于每一个计数,在中断里面把rTCNTB0赋值为计算好的数组里面的相应的位,简单明了,还不用判断语句
多么的大气啊
不过这样有一个坏处,就是牺牲存储,来换取速度的提升。
可以试验一下,反正现在也没有什么事情干。
现在的问题是,老师写非常容易出错的代码
比如判断一个字符型数据的最高位是0还是1,如过是1,则给某一位赋值1,否则赋值0;
你写的不行,这个时候,0x1<<7位是判断最高位的,而不是0x1<<8;否则得到都都是0;
音乐能产生共鸣,当你比较活跃的时候,翻翻一些不用于大众流行的音乐,你会收获很多。
PIE编码我发现了一个问题,如果启动定时器就让它产生一个query波形,那是不现实的一个问题,肯定会有在帧头的前面,有一段比较脏的数据在里面
当然并不是没有办法了,可以采取这样的措施。
启动定时器,让它一直产生高电平脉冲,当然会有一条线下来,这个是没有办法避免的事情哈,然后延时一段时间,避免帧头和一开始启动时产生的脏数据部分连接到一起
即延时一段时间之后,定时器0中断,这个时候,使用示波器大量到的波形,就比较完美,但是问题是还是会有一条线下来。
产生的query命令图形如下所示。
下面是一开始给定时器定最大的值,开启翻转给定时器初始值为(65535,0),延时一段时间,让定时器跑一会儿,然后开启中断允许
当定时器跑完之后,稳定下来,计数值变为0的时候,马上进入中断,产生所需要的波形,下面是所需要的波形图,看上去还挺漂亮的哈。
因为要一直给标签供电,所以在产生query命令之后,pwm的输出要一直保持高电平,来给标签供电,所以嘛哈哈
这个时候就需要一个问题了,如果产生query命令之后,pwm的输出拉低怎么办?
这真的是个问题,还好我再主函数里面,只发送一次query,然后while(1),并用示波器打开,查看pwm输出口的电平
发现时高电平,窃喜,这个问题就不是问题了哈!!
但是现在还有一个电平的问题啊,就是给标签发送命令的时候,之前PA要打开,CTA载波要打开,最低貌似要保持20us的时间,陈师兄说的
看来应该会满足的吗。