久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
PIC16F639單片機的PKE方案源程序 3D天線可低頻(125K)喚醒,空中高頻端數據采用滾...
[打印本頁]
作者:
lddjss
時間:
2020-6-28 15:12
標題:
PIC16F639單片機的PKE方案源程序 3D天線可低頻(125K)喚醒,空中高頻端數據采用滾...
PIC16F639單片機C語言代碼,附件完整工程MPLAB IDE可直接打開,主要功能:3D天線可低頻(125K)喚醒,空中高頻端數據采用滾碼方式加密,PIC內部硬件加密沒用。。。
單片機源程序如下:
#include <pic.h>
#include <string.h>
#include"Keeloq.h"
__CONFIG(0x1004); //0001 0000 0000 0100
#define LED RC0
#define AFECS RC1 // CS
#define AFESCLK RC2 // SCLK
#define AFESDI RC3 // SDI
bit Wake_flag = 0; //休眠、工作標志位
/*******************************************************************************************/
/*void write_byte(unsigned char com,unsigned char addr,unsigned char byte) */
/*com命令 addr為地址 byte要寫入寄存器的數據 */
/*寫命令0x07 讀命令0x06 */
/*******************************************************************************************/
void write_byte(unsigned char com,unsigned char addr,unsigned char byte)
{
unsigned char i,temp;
unsigned char dat;
unsigned char crc;
TRISC = 0x00; //RC0.1.2.3.4.5輸出
asm("nop");
asm("nop");
AFESCLK = 0;
AFESDI = 0;
AFECS = 0; //使能SPI
com = com << 4; //0000 0111
temp = addr|com; //0111 xxxx
temp = temp << 1; //將高位移除
for(i=0;i<7;i++) //寫命令加地址
{
dat = temp&0x80;
temp = temp << 1;
if(dat==0x80)
AFESDI = 1;
else
AFESDI = 0;
AFESCLK = 1; //產生上升沿
asm("nop");
asm("nop");
asm("nop");
asm("nop");
AFESCLK = 0;
//AFESDI = 0;
}
crc = 0; //用于數據位1的個數
temp = byte;
for(i=0;i<8;i++)
{
dat = temp&0x80;
temp = temp <<1;
if(dat==0x80)
{
AFESDI = 1;
crc ++;
}
else
AFESDI = 0;
AFESCLK = 1; //進行數據采樣
asm("nop");
asm("nop");
asm("nop");
asm("nop");
AFESCLK = 0;
//AFESDI = 0;
}
if(crc%2==0) //偶數個1
{
AFESDI = 1;
AFESCLK = 1; //進行數據采樣
asm("nop");
asm("nop");
asm("nop");
asm("nop");
AFESCLK = 0;
AFESDI = 0;
}
else
{
AFESDI = 0;
AFESCLK = 1; //進行數據采樣
asm("nop");
asm("nop");
asm("nop");
asm("nop");
AFESCLK = 0;
AFESDI = 0;
}
TRISC = 0x08;
AFECS = 1;
}
/*******************************************************************************************/
/*unsigned char read_byte(unsigned char addr) */
/*addr為地址 返回讀到數據 */
/*先寫入命令+地址+無效數據(合計16位)拉高CS 再拉低CS 發送SCLK時鐘讀出數據 */
/*******************************************************************************************/
unsigned char read_byte(unsigned char addr)
{
unsigned int temp = 0;
unsigned char i;
write_byte(0x06,addr,0x00); //先寫入命令和地址和無效數據
TRISC = 0x00; //0000 0100
asm("nop");
asm("nop");
asm("nop");
asm("nop");
AFECS = 0;
for(i=0;i<16;i++) // 1010 0000 1
{
AFESCLK = 1;
if(AFESDI) temp = temp|0x01;
temp = temp<<1;
AFESCLK = 0;
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
asm("nop");
}
TRISC = 0x08;
AFECS = 1;
temp = temp>>1;
return temp;
}
/*******************************************************************************************/
/*void LF_Configuration(void) */
/*低頻配置 */
/*寫命令0x07 讀命令0x06 */
/*******************************************************************************************/
void LF_Configuration(void)
{
//const unsigned char AFEConfig[6]={0x00,0x00,0x00,0x00,0x00,0x30};//解調輸出無喚醒
const unsigned char AFEConfig[6]={0xa0,0x00,0x00,0x00,0x00,0x00};//解調輸出喚醒序列
unsigned char i,j,k; //0xa0,0x00,0x00,0x00,0x00,0x10
unsigned char AFEConfig6 = 0; //列校驗
for(i=0;i<8;i++) //校驗數據,生成列校驗寄存器的值
{
j = 0;
AFEConfig6 = AFEConfig6 <<1;
for(k=0;k<6;k++)
{
switch(i)
{
case 0: j = j^(AFEConfig[k]&0x80);
break;
case 1: j = j^(AFEConfig[k]&0x40);
break;
case 2: j = j^(AFEConfig[k]&0x20);
break;
case 3: j = j^(AFEConfig[k]&0x10);
break;
case 4: j = j^(AFEConfig[k]&0x08);
break;
case 5: j = j^(AFEConfig[k]&0x04);
break;
case 6: j = j^(AFEConfig[k]&0x02);
break;
case 7: j = j^(AFEConfig[k]&0x01);
break;
}
}
if(j==0) AFEConfig6 = AFEConfig6 | 0x01;
}
/* while(1)
{
write_byte(0x07,0x00,AFEConfig[0]);
Delay_1ms(5);
} */
write_byte(0x07,0x00,AFEConfig[0]);
write_byte(0x07,0x01,AFEConfig[1]);
write_byte(0x07,0x02,AFEConfig[2]);
write_byte(0x07,0x03,AFEConfig[3]);
write_byte(0x07,0x04,AFEConfig[4]);
write_byte(0x07,0x05,AFEConfig[5]);
write_byte(0x07,0x06,AFEConfig6);
}
/*******************************************************************************************/
/*初始化時鐘、IO、中斷 */
/*******************************************************************************************/
void InIt(void)
{
TRISC = 0x00; //0000 0000 //RC0.1.2.3.4.5輸出
OSCCON = 0x71; //0110 0001 //內部振蕩器用于系統時鐘:8MHz
PCON = 0x00; //0000 1011 //電源控制
T1CON=0x00;
EECON1=0x00;
CMCON0 = 0x07; //關閉引腳比較器功能、模擬端口轉入數字端口
……………………
…………限于本文篇幅 余下代碼請從51黑下載附件…………
復制代碼
所有資料51hei提供下載:
key-pic16f639.rar
(132.86 KB, 下載次數: 50)
2020-6-28 15:11 上傳
點擊文件名下載附件
下載積分: 黑幣 -5
作者:
philix
時間:
2020-11-4 14:53
實際量產過嗎?
作者:
chscn
時間:
2021-1-25 10:13
不全,只是鑰匙部分的低頻喚醒
作者:
peishuaihua
時間:
2024-1-8 09:18
IMMO功能無線充電這塊做過嗎
作者:
keyway
時間:
2024-9-15 08:36
樣品1顆不到5元,量產后1顆漲到100元,microchip我好怕喔.
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
久久久精品一区二区三区
|
日本高清中文字幕
|
四虎黄色片
|
免费一级大片
|
亚洲一区二区三区在线视频
|
日本久久精品视频
|
国产一级二级
|
性一交一乱一伧老太
|
91av在线播放
|
三级a毛片
|
中文文字幕文字幕高清
|
黄色三级视频网站
|
国产一区精品在线观看
|
黄色国产在线观看
|
日韩a视频
|
精品一区二区三区视频
|
日韩精品一区二区在线
|
国产福利在线视频
|
蜜桃精品一区二区三区
|
在线视频成人
|
日韩国产精品视频
|
国产专区在线
|
98国产精品
|
国产一区二区在线观看视频
|
中文字幕精品一区久久久久
|
欧美国产一区二区
|
97人人艹
|
www国产在线观看
|
国产三级精品三级在线观看
|
国产成人免费观看
|
亚洲国产日韩在线
|
一区二区三区在线免费
|
av狠狠干
|
久久靖品
|
91片黄在线观看动漫
|
久久精品小视频
|
在线免费毛片
|
日本特黄一级片
|
成人在线视频免费观看
|
成人福利网站
|
精品综合网
|