久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 28588|回復: 27
收起左側

單片機發送尋呼機pocsag碼

  [復制鏈接]
ID:18867 發表于 2016-10-6 18:17 | 顯示全部樓層 |閱讀模式
//本例實現單片機用pocsag碼向數字機發送pocsag數字28167的全部編碼
//包括引導碼、同步碼、閑置碼、地址碼、信息碼。、
//本例用stc12C5a60s2用32M晶振成功呼響了motorola大顧問傳呼機
//本例僅供傳呼機愛好者地pocsag進行了解和試驗,切勿用于商業用途
#include "STC12C5A60S2.H"                  

//#include "string.h"
//#include "intrins.h"
//#include"stdio.h"

#define uchar unsigned char
#define uint unsigned int           

#define TIMER0_ENABLE  TR0=1;
#define TIMER0_DISABLE TR0=0;

#define TX  P2_0   //數據輸出端
#define PTT P2_2   //PTT控制端
#define HIGH   1
#define LOW    0

unsigned long xdata addr;        //地址         
uchar  Tx_Num;//地址碼發射次序

bit TM0_FLAG=0;

void UartInit(void)                //9600bps@32.000MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位數據,可變波特率
        AUXR |= 0x40;                //定時器1時鐘為Fosc,即1T
        AUXR &= 0xFE;                //串口1選擇定時器1為波特率發生器
        TMOD &= 0x0F;                //清除定時器1模式位
        TMOD |= 0x20;                //設定定時器1為8位自動重裝方式
        TL1 = 0x98;                //設定定時初值
        TH1 = 0x98;                //設定定時器重裝值
        ET1 = 0;                //禁止定時器1中斷
        TR1 = 1;                //啟動定時器1
   //        TI = 1;
}         

void Delay200ms()                //@32MHz
{
        unsigned char i, j, k;

        i = 25;
        j = 82;
        k = 145;
        do
        {
                do
                {
                        while (--k);
                } while (--j);
        } while (--i);
}        

unsigned long  calc_bch_and_parity( unsigned long cw_e ) //BCH校驗和奇偶校驗函數
{
   uchar i;
   uchar  parity = 0; //奇偶校驗計數   
   unsigned long local_cw; //臨時存放數         
   local_cw=cw_e;//保存cw_e參數值
   for(i=1;i<=21; i++,cw_e<<=1)           
       if (cw_e & 0x80000000) cw_e ^= 0xED200000;  
   cw_e=cw_e&0xFFC00000;//保留前10位,BCH校驗值共11位,只保留前10位有效數據         
   local_cw |= (cw_e >> 21); //BCH校驗數移至第22位到31位,BCH共10位,并和原始數據相加
   cw_e=local_cw;         
   for(i=0; i<31; i++, cw_e<<=1) if(cw_e&0x80000000) parity++;        
   if(parity%2) local_cw+=1;//從1至31位判斷為奇數則后面加1補充為偶數
   return local_cw;         
}  

unsigned long  calc_addr( unsigned long add,uchar fun ) //地址轉換,第1參數為地址,第2參數為功能
{
  unsigned long adr;
  unsigned long tem;   
  Tx_Num=(uchar)(add&0x00000007);//獲取地址發射的幀位次,111位第7幀,后3位地址數據隱藏不發送,接收按幀位還原
  adr=0x00;
  adr=add&0xFFFFFFF8;        //去掉地址碼后3位
  adr=adr<<10;  //地址左移10位
  tem=0x00;
  tem=fun;  //功能位
  tem=tem<<11;//功能位左移11位,功能位為00 01 10 11四種狀態,代表4個地址碼
  adr=adr|tem; //地址碼和功能位合成地址碼;
  return adr;
}


void IntTimer0() interrupt 1 //設定中斷時間為0.8333毫秒,1/1200=0.8333,1200比特速率
{
     TL0 = 0x53;                //設置定時初值
         TH0 = 0xF7;                //設置定時初值         
     TM0_FLAG=1;
}
         

void WaitTF0( void )
{
   while(!TM0_FLAG);
   TM0_FLAG=0;      //清標志位
}

void Send_start(unsigned long s)
{
   uchar i,n;
   unsigned long tem;  
   for(i=0;i<20;i++) //發送576個前導10101010101010
        {      
      tem=s;
          for (n=0;n<32;n++)
       {
                 if(tem&0x80000000)TX= HIGH ;else TX=LOW;
                 WaitTF0();//等待延時結束 0.833ms                           
                    tem<<=1;
           }      
        }   
}

void Send_nill()//發送閑置位
{
  uchar n;
  unsigned long s=0x7A89C197;
  for(n=0;n<32;n++)
   {
          if(s&0x80000000)TX= HIGH ;else TX=LOW;
          WaitTF0();//等待延時結束 0.833ms                           
          s<<=1;
   }
}

void Send_Num(unsigned long s)         //發送數據
{
   uchar n;
   for (n=0;n<32;n++)
    {  
          if(s&0x80000000)TX= HIGH ;else TX=LOW;
          WaitTF0();//等待延時結束 0.833ms                           
          s<<=1;
    }   
}         

void Print_code(unsigned long p)  //串口打印,用于測試BCH值
{
  uchar i;
  unsigned long t;
  t=p;
  for(i=0;i<32;i++,t<<=1)
   {
         if(t&0x80000000)
          {
            SBUF=0x31;
                while(TI==0);
                TI=0;
          }
         else
          {
                SBUF=0x30;
                while(TI==0);
                TI=0;
          }         
   }
  SBUF=0x0D;
                while(TI==0);
                TI=0;

  SBUF=0x0A;
                while(TI==0);
                TI=0;
  
   t=p;
   t<<=21;
   for(i=0;i<10;i++,t<<=1)
    {
          if(t&0x80000000)
           {
        SBUF=0x31;
                while(TI==0);
                TI=0;
          }
         else
          {
                SBUF=0x30;
                while(TI==0);
                TI=0;
          }         
        }
   SBUF=0x0D;
                while(TI==0);
                TI=0;

   SBUF=0x0A;
                while(TI==0);
                TI=0;  
}

         

main()
{
    uchar i,n;
        unsigned long tem;
        unsigned long star;  
        unsigned long sync;         //同步碼
        unsigned long mess;  //信息碼        
        

        UartInit();  //串口初始化

        TMOD|=0x01;  //定時器0為模式1 (16位定時器)                                    
        TL0 = 0x53;                //設置定時初值
        TH0 = 0xF7;                //設置定時初值
    ET0=1; //定時器0充許中斷
        TR0=0;        
        EA=1;  //開總中斷
        TX = 0;
        
    P2M0 = 0x01;//設P2_0為推挽輸出模式
        P2M1 = 0x00;

    PTT= 0;        
        star = 0xAAAAAAAA; //前導碼
        sync = 0x7CD215D8; //同步碼        
   
        tem=calc_addr(1234567,1);//前面是地址碼,后面是BB機內00 01 10 11  代表0,1,2,3種不同的聲音        
    addr=calc_bch_and_parity(tem);//取得BCH校驗后的地址碼序列
        mess=calc_bch_and_parity( 0xA0C37000);//信息碼28167數字碼,取0010(2)的反順序0100輸入
        Print_code(mess);  //從串口打印32位信息碼和BCH校驗碼


   while(1)
    {           
           PTT = 0;
           Delay200ms();        
           TL0 = 0x53;                //設置定時初值
           TH0 = 0xF7;                //設置定時初值                 
           TIMER0_ENABLE; //啟動定時器
           Send_start(star); //引導碼
       Send_Num(sync);        //同步碼

       for(i=0;i<8;i++)  //發送一個批次,共8幀數據
            {
              if(Tx_Num==i)        //計算地址碼插入的幀位,本例為第7幀
               {
                      Send_Num(addr);          //地址碼
                      Send_Num(mess);          //信息碼
               }
              else
               {
              Send_nill();        //閑置碼
                      Send_nill();        //閑置碼                     
                   }
            }                        
           Send_Num(0xFFFFFFFF);
           TX=LOW;
           TIMER0_DISABLE;
           Delay200ms();
           Delay200ms();
           Delay200ms();
           Delay200ms();
           Delay200ms();
           PTT = 1;  
     }
}

回復

使用道具 舉報

ID:1 發表于 2016-10-6 22:10 來自手機 | 顯示全部樓層
這個很好,樓主能描述一下外外接電路怎么連嗎
回復

使用道具 舉報

ID:18867 發表于 2016-10-7 16:31 | 顯示全部樓層
本帖最后由 PLA 于 2016-10-7 16:36 編輯

發射機用寶峰5R改裝,p2.0接對講機的數據輸入端,p2.2接對講機的PTT,有興趣 的留言,P2.0接圖中的紅色標記處位。
QQ圖片20160824212451.jpg
回復

使用道具 舉報

ID:140601 發表于 2016-11-7 09:35 | 顯示全部樓層
厲害了,樓主說點原理啊,詳細點,好玩兒
回復

使用道具 舉報

ID:140601 發表于 2016-11-7 09:39 | 顯示全部樓層
厲害了,詳細說說原理會更過癮~
回復

使用道具 舉報

ID:69271 發表于 2016-11-9 17:38 | 顯示全部樓層
這個東西太老了,原理沒有講,你寫那么多,并且沒有電路圖,誰能看懂?
回復

使用道具 舉報

ID:204213 發表于 2017-5-24 10:58 | 顯示全部樓層
用89C52的單片機,可以嗎??
回復

使用道具 舉報

ID:204213 發表于 2017-5-25 11:12 | 顯示全部樓層
LZ上傳個電路可好,只看代碼,看不懂呀
回復

使用道具 舉報

ID:204213 發表于 2017-5-31 10:21 | 顯示全部樓層
跪求電路圖!!
回復

使用道具 舉報

ID:225369 發表于 2017-8-7 09:34 | 顯示全部樓層
12C5A60S2.jpg
就像這個圖,晶體換成32M
圖中腳位再核對一下。
可能有變動。
回復

使用道具 舉報

ID:233842 發表于 2017-11-10 16:45 | 顯示全部樓層
20538274@qq.com
能喚醒 NEC數至尊 嗎?
求資料和教程
回復

使用道具 舉報

ID:204213 發表于 2017-11-27 16:54 | 顯示全部樓層
我要試一下,看看能不能把我的傳呼機給呼響
回復

使用道具 舉報

ID:249545 發表于 2018-1-14 09:20 | 顯示全部樓層
雖然我玩了10多年無線,也有個人電臺數臺,和呼號BH7KHV.也用過對講機,BP機.但是玩DIY硬件的,對于這個真不易看懂.
樓主老師是在個人電腦上編輯文字后,輸出到USB線,USB線接CH340,再接STC12C5A60S,再控制150MHZ對講機發射.
同頻率BP機來接收嗎?就是發數字~??
回復

使用道具 舉報

ID:204213 發表于 2018-5-14 17:31 | 顯示全部樓層
好久沒有人頂了,有新資料上傳嗎??
回復

使用道具 舉報

ID:204213 發表于 2018-5-17 11:04 | 顯示全部樓層
GUOXUAN 發表于 2018-1-14 09:20
雖然我玩了10多年無線,也有個人電臺數臺,和呼號BH7KHV.也用過對講機,BP機.但是玩DIY硬件的,對于這個真不易 ...

是不是需要在電腦上有個程序,這個程序把用戶輸入的文字通過串口傳到單片機上,然后再靠對講機發射?
回復

使用道具 舉報

ID:18867 發表于 2018-5-28 14:17 來自手機 | 顯示全部樓層
govox 發表于 2018-5-17 11:04
是不是需要在電腦上有個程序,這個程序把用戶輸入的文字通過串口傳到單片機上,然后再靠對講機發射?

這個程序不完整,只能發固定的數字
回復

使用道具 舉報

ID:357018 發表于 2018-6-23 08:24 | 顯示全部樓層
樓主:紅色標記處要飛線連哪里?請指教,我做成功,謝謝!
回復

使用道具 舉報

ID:277550 發表于 2019-1-4 09:51 | 顯示全部樓層
還有人研究連接別的對講機的么     討論討論
回復

使用道具 舉報

ID:505153 發表于 2019-4-10 01:37 | 顯示全部樓層
一次能發送多少字?
回復

使用道具 舉報

ID:375228 發表于 2020-2-10 23:25 | 顯示全部樓層
有沒有成功的詳細說說
回復

使用道具 舉報

ID:695866 發表于 2020-2-20 23:29 | 顯示全部樓層
現在呼響不是問題,問題是F協議呼響。
回復

使用道具 舉報

ID:253767 發表于 2020-6-3 06:54 | 顯示全部樓層
謝謝分享!!!
回復

使用道具 舉報

ID:274739 發表于 2020-12-9 20:02 | 顯示全部樓層
實在是 弄不明白     有沒有現成的   導出文件  提供一下   謝謝

2020-12-09_200047.png

回復

使用道具 舉報

ID:18867 發表于 2021-1-17 07:52 | 顯示全部樓層
xiao_chun 發表于 2020-12-9 20:02
實在是 弄不明白     有沒有現成的   導出文件  提供一下   謝謝

STC單片機頭文件沒有
回復

使用道具 舉報

ID:832201 發表于 2021-4-16 14:59 | 顯示全部樓層
牛啊,贊
回復

使用道具 舉報

ID:1031190 發表于 2022-6-17 22:29 來自手機 | 顯示全部樓層
這個是頭文件定義不一樣,把它改為#define TX  P20   //數據輸出端 #define PTT P22   //PTT控制端,去中間一橫就可以通過了,另還有一個警告,可"n"刪除
回復

使用道具 舉報

ID:1043483 發表于 2022-9-9 14:41 | 顯示全部樓層
PLA 發表于 2016-10-7 16:31
發射機用寶峰5R改裝,p2.0接對講機的數據輸入端,p2.2接對講機的PTT,有興趣 的留言,P2.0接圖中的紅色標記 ...

請問有沒有教程
回復

使用道具 舉報

ID:204213 發表于 2023-12-31 20:58 | 顯示全部樓層
  這個帖子還在呀,有更新信息嗎?硬件連接的電路圖有上傳的嗎
回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 成人欧美在线 | 亚洲精品一区二区二区 | 欧美一区二区三区在线观看视频 | 色婷婷av99xx | 91久久国产精品 | 成人影院在线视频 | 精品视频一区二区 | 国产精品亚洲第一区在线暖暖韩国 | 超碰人人做 | 精品欧美一区二区久久久伦 | 精品国产欧美一区二区三区不卡 | 免费在线观看av的网站 | 偷拍第一页 | 亚洲国产精品一区在线观看 | 在线免费观看欧美 | 美女一区二区在线观看 | 精品乱人伦一区二区三区 | 欧美性区| 欧美激情精品久久久久久变态 | 九久久 | 国产欧美日韩一区二区三区 | 一级片网址 | 亚洲国产aⅴ精品一区二区 免费观看av | 色播视频在线观看 | 免费久久99精品国产婷婷六月 | 精品国产乱码久久久久久丨区2区 | 亚洲视频三区 | 一本大道久久a久久精二百 国产成人免费在线 | 视频精品一区二区三区 | 国产精品日韩一区 | 一区二区三区av | 丁香六月伊人 | 黄网站免费入口 | 欧美亚洲一级 | 欧美亚州 | 国产伦精品一区二区三区四区视频 | 成人av免费在线观看 | 成人在线免费观看 | 久久国产精品久久久久 | 亚洲五码在线 | 最新免费黄色网址 |