久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
用pic16f630 MCU實現的315MHZ無線軟件解碼和編碼.代替PT2272和pt2262
[打印本頁]
作者:
jarno
時間:
2019-3-8 14:16
標題:
用pic16f630 MCU實現的315MHZ無線軟件解碼和編碼.代替PT2272和pt2262
#include <pic.h>
//#include <pic16630.h>
#define uchar unsigned char
#define uint unsigned int
#define PORTAIT(adr,bit) ((unsigned)(&adr)*8+(bit)) ///絕對尋址位操作指令
#define PORTCIT(adr,bit)((unsigned)(&adr)*8+(bit)) ///絕對尋址位操作指令
static bit KEY1 @ PORTAIT(PORTA,0);
static bit KEY2 @ PORTAIT(PORTA,1);
static bit KEY3 @ PORTAIT(PORTA,4);
static bit KEY4 @ PORTAIT(PORTA,5);
static bit DECODE_POWER_ON_OFF @ PORTCIT(PORTC,0);
static bit LED1 @ PORTCIT(PORTC,1);
static bit LED2 @ PORTCIT(PORTC,5);
static bit BEEP @ PORTCIT(PORTC,2);
static bit DIN @ PORTCIT(PORTC,3);
static bit DOUT @ PORTCIT(PORTC,4);
uint i;
uchar keyCode;
bit sign_key;
#define Err 0xFF //當解碼程序發現接收的數據是無效數據時返回此值
char DeviceAddr[9]="1010ffff"; //報警器的地址,1 接高電平,0 接低電平(地), F 為懸空.(人可讀)
uchar AddrH,AddrL; //產品地址(機可讀)
void delay_150us(uchar t)
{ uchar k;
uchar j;
for(k=t;k>0;k--)
for(j=50;--j;);
}
void delay_50us(uchar t)
{
uchar k;
uchar i;
for(k=t;k>0;k--)
for(i=14;--i;);
}
void Convert() //人可讀地址轉換為MCU可讀
{
uchar i;
for(i=0;i<4;i++){
if(DeviceAddr[i]=='0')
{ AddrH<<=2;
AddrH|=0;
}
if(DeviceAddr[i]=='1')
{
AddrH<<=2;
AddrH|=3;
}
if(DeviceAddr[i]=='f')
{
AddrH<<=2;
AddrH|=1;
}
}
for(i=4;i<8;i++){
if(DeviceAddr[i]=='0')
{
AddrL<<=2;
AddrL|=0;
}
if(DeviceAddr[i]=='1')
{
AddrL<<=2;
AddrL|=3;
}
if(DeviceAddr[i]=='f')
{
AddrL<<=2;
AddrL|=1;
}
}
}
void Send(uchar *DAddr,uchar SendData)
{ uchar temp,i;
DOUT=1;
delay_150us(2);
DOUT=0;
delay_150us(60);
for(i=0;i<8;i++)//Send AddrCode
{ temp=*DAddr++;
if(temp=='1')
{ DOUT=1;
delay_150us(6);
DOUT=0;
delay_150us(2);
DOUT=1;
delay_150us(6);
DOUT=0;
delay_150us(2);
}
if(temp=='f')
{ DOUT=1;
delay_150us(2);
DOUT=0;
delay_150us(6);
DOUT=1;
delay_150us(6);
DOUT=0;
delay_150us(2);
}
if(temp=='0')
{ DOUT=1;
delay_150us(2);
DOUT=0;
delay_150us(6);
DOUT=1;
delay_150us(2);
DOUT=0;
delay_150us(6);
}
}
for(i=0;i<4;i++)///Send Data
{ if(SendData&(8>>i))
{
DOUT=1;
delay_150us(6);
DOUT=0;
delay_150us(2);
////////////////////
DOUT=1;
delay_150us(6);
DOUT=0;
delay_150us(2);
}
else
{
DOUT=1;
delay_150us(2);
DOUT=0;
delay_150us(6);
///
DOUT=1;
delay_150us(2);
DOUT=0;
delay_150us(6);
}
}
}
uchar GetData()//解碼程序
{
uchar i,j,k;
uchar ReadCode[3],GetCode;
//------------------------找同步頭-------------------------
if(!DIN)return Err;
delay_150us(3);
for(i=0;i<28;i++)
{
if(DIN)return Err;
delay_150us(2);
}
for(i=0;i<30;i++)
{
if(DIN)break;
delay_50us(1);
if(i>25)return Err;//如果超時則返回
}
//-----------------------接收地址碼和數據碼-----------------
for(j=0;j<3;j++)
{
for(i=0;i<8;i++)
{
delay_150us(2);
delay_50us(1);
ReadCode[j]=ReadCode[j]<<1;
ReadCode[j]=ReadCode[j]|DIN;
if(DIN)
{ //while(DIN);//等待0出現
for(k=0;k<255;k++)
{ delay_50us(2);
if(DIN==0)break;
if(k>12)return Err;//超時,返回錯誤代碼
}
}
//while(!DIN);//等待1出現
for(k=0;k<255;k++)
{ delay_50us(2);
if(DIN==1)break;
if(k>12)return Err;//超時,返回錯誤代碼
}
}
}
//-------------------校驗地址及運算數據---------------------
if(ReadCode[0]!=AddrH)return Err;
if(ReadCode[1]!=AddrL)return Err;//校驗地址
GetCode=ReadCode[2]&0x01;
GetCode|=(ReadCode[2]&0x04)>>1;
GetCode|=(ReadCode[2]&0x10)>>2;
GetCode|=(ReadCode[2]&0x40)>>3;
return GetCode;
}
void delay(){ for(i=6553;i!=0;i--)continue;}
void beep(void)
{ uchar i;
for(i=0;i<0xff;i++)
{ delay_150us(5);
BEEP=!BEEP;
}
BEEP=0;
}
void interrupt ISR(void) //中斷服務程序
{
if(RAIE && RAIF)
{ RAIF = 0;
delay();
if(KEY1==0){sign_key=1;keyCode=1;}
if(KEY2==0){sign_key=1;keyCode=2;}
if(KEY3==0){sign_key=1;keyCode=3;}
if(KEY4==0){sign_key=1;keyCode=4;}
//PORTA = PORTA;
}
/* if(T0IE && T0IF) //判TMR0 中斷
{
T0IF = 0; //清除TMR0 中斷標誌
}
if(TMR1IE && TMR1IF) //判TMR1 中斷
{
TMR1IF = 0; //清除TMR1 中斷標誌
}*/
}
void main()
{
uchar mydata;
DOUT=0; //發送數據端口上電為低電平
CMCON=0x07; //關閉比較器
TRISA=0x33; //PORTA_1為輸入。
OPTION=0x7f; //弱上拉全局控制位使能
WPUA=0xFF; //PORTA弱上拉控制位使能
TRISC=0x08; //設置C口輸入輸出
RAIF=0; //中斷標誌位清零
PORTA=0x00; //配合 PORTA = PORTA 給電平中斷做準備
RAIE=1; //A口電平中斷允許
IOCA=0x33; //A口各個中斷允許
GIE =1; //總中斷允許
PORTA = PORTA;
Convert();
Send("1010ffff",1);
for(;;){
if(sign_key)
{ switch(keyCode){
case 1:
LED1=0;
Send(DeviceAddr,1);
Send(DeviceAddr,1);
Send(DeviceAddr,1);
Send(DeviceAddr,1);
break;
case 2:
Send(DeviceAddr,2);
Send(DeviceAddr,2);
Send(DeviceAddr,2);
Send(DeviceAddr,2);
LED1=1;
break;
case 3:
Send(DeviceAddr,4);
Send(DeviceAddr,4);
Send(DeviceAddr,4);
Send(DeviceAddr,4);
LED2=1;
DECODE_POWER_ON_OFF=1;
break;
case 4:
Send(DeviceAddr,8);
Send(DeviceAddr,8);
Send(DeviceAddr,8);
Send(DeviceAddr,8);
DECODE_POWER_ON_OFF=0;
LED2=0;
break;
}
sign_key=0;
//beep();
}
mydata=GetData();
if(mydata!=Err)
{
if(mydata==1)LED1=0;
if(mydata==2)LED1=1;
if(mydata==4)LED2=0;
if(mydata==8)LED2=1;
}
}
}
復制代碼
作者:
philix
時間:
2020-9-26 19:13
穩定就好,省錢了
作者:
nanfuB
時間:
2020-11-15 17:34
630代2262有點得不償失
作者:
fhhjgvch
時間:
2020-11-30 00:45
可以的,不用浪費錢了
作者:
XSBCL
時間:
2021-1-29 16:40
nanfuB 發表于 2020-11-15 17:34
630代2262有點得不償失
你說的那些1.2.毛的芯片嗎
作者:
gxzqh
時間:
2021-7-2 09:53
XSBCL 發表于 2021-1-29 16:40
你說的那些1.2.毛的芯片嗎
使用過PIC的和國產,臺席的芯片,PIC的性能確實好一些,輸出波形穩定。
作者:
654165671
時間:
2023-7-16 00:42
有沒有流程圖看看
作者:
hhp008
時間:
2023-11-7 16:16
學習一下解碼方法,感謝樓主分享。
作者:
JASONCEN
時間:
2024-1-9 21:30
用一,兩毛的能做嗎
歡迎光臨 (http://m.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲欧美日韩高清
|
国产精品五区
|
亚洲一二三区精品
|
国产精品日韩欧美一区二区三区
|
久久精品中文
|
亚洲高清av在线
|
久久99精品久久久久久琪琪
|
精品国产欧美一区二区
|
福利精品在线观看
|
欧美亚洲一区二区三区
|
欧美精品一区二区三区在线四季
|
日韩欧美在线视频
|
四虎网站在线观看
|
国产精品视频一区二区三区
|
国产欧美日韩综合精品一区二区
|
亚洲二区精品
|
国产资源在线观看
|
欧美中文字幕在线观看
|
国产精品美女久久久久久免费
|
久色网
|
中文字幕一区二区在线观看
|
欧美操操操
|
久久这里只有精品首页
|
亚洲欧美中文字幕在线观看
|
给我免费的视频在线观看
|
久久久久久毛片免费观看
|
国产精品久久
|
国产精品区二区三区日本
|
成人av电影天堂
|
超碰成人免费
|
av在线伊人
|
免费一二区
|
中文字幕国产第一页
|
国产成人99久久亚洲综合精品
|
亚洲精品国产a久久久久久 中文字幕一区二区三区四区五区
|
欧美一级大片免费观看
|
国产精品永久久久久久久www
|
91在线网站
|
久久久久久国产精品免费免费
|
日本天堂一区
|
精品免费视频一区二区
|