找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 28617|回復(fù): 27
收起左側(cè)

單片機(jī)發(fā)送尋呼機(jī)pocsag碼

  [復(fù)制鏈接]
ID:18867 發(fā)表于 2016-10-6 18:17 | 顯示全部樓層 |閱讀模式
//本例實(shí)現(xiàn)單片機(jī)用pocsag碼向數(shù)字機(jī)發(fā)送pocsag數(shù)字28167的全部編碼
//包括引導(dǎo)碼、同步碼、閑置碼、地址碼、信息碼。、
//本例用stc12C5a60s2用32M晶振成功呼響了motorola大顧問(wèn)傳呼機(jī)
//本例僅供傳呼機(jī)愛(ài)好者地pocsag進(jìn)行了解和試驗(yàn),切勿用于商業(yè)用途
#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   //數(shù)據(jù)輸出端
#define PTT P2_2   //PTT控制端
#define HIGH   1
#define LOW    0

unsigned long xdata addr;        //地址         
uchar  Tx_Num;//地址碼發(fā)射次序

bit TM0_FLAG=0;

void UartInit(void)                //9600bps@32.000MHz
{
        PCON &= 0x7F;                //波特率不倍速
        SCON = 0x50;                //8位數(shù)據(jù),可變波特率
        AUXR |= 0x40;                //定時(shí)器1時(shí)鐘為Fosc,即1T
        AUXR &= 0xFE;                //串口1選擇定時(shí)器1為波特率發(fā)生器
        TMOD &= 0x0F;                //清除定時(shí)器1模式位
        TMOD |= 0x20;                //設(shè)定定時(shí)器1為8位自動(dòng)重裝方式
        TL1 = 0x98;                //設(shè)定定時(shí)初值
        TH1 = 0x98;                //設(shè)定定時(shí)器重裝值
        ET1 = 0;                //禁止定時(shí)器1中斷
        TR1 = 1;                //啟動(dòng)定時(shí)器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校驗(yàn)和奇偶校驗(yàn)函數(shù)
{
   uchar i;
   uchar  parity = 0; //奇偶校驗(yàn)計(jì)數(shù)   
   unsigned long local_cw; //臨時(shí)存放數(shù)         
   local_cw=cw_e;//保存cw_e參數(shù)值
   for(i=1;i<=21; i++,cw_e<<=1)           
       if (cw_e & 0x80000000) cw_e ^= 0xED200000;  
   cw_e=cw_e&0xFFC00000;//保留前10位,BCH校驗(yàn)值共11位,只保留前10位有效數(shù)據(jù)         
   local_cw |= (cw_e >> 21); //BCH校驗(yàn)數(shù)移至第22位到31位,BCH共10位,并和原始數(shù)據(jù)相加
   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位判斷為奇數(shù)則后面加1補(bǔ)充為偶數(shù)
   return local_cw;         
}  

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


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

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

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

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

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

void Print_code(unsigned long p)  //串口打印,用于測(cè)試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;  //定時(shí)器0為模式1 (16位定時(shí)器)                                    
        TL0 = 0x53;                //設(shè)置定時(shí)初值
        TH0 = 0xF7;                //設(shè)置定時(shí)初值
    ET0=1; //定時(shí)器0充許中斷
        TR0=0;        
        EA=1;  //開(kāi)總中斷
        TX = 0;
        
    P2M0 = 0x01;//設(shè)P2_0為推挽輸出模式
        P2M1 = 0x00;

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


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

       for(i=0;i<8;i++)  //發(fā)送一個(gè)批次,共8幀數(shù)據(jù)
            {
              if(Tx_Num==i)        //計(jì)算地址碼插入的幀位,本例為第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;  
     }
}

回復(fù)

使用道具 舉報(bào)

ID:1 發(fā)表于 2016-10-6 22:10 來(lái)自手機(jī) | 顯示全部樓層
這個(gè)很好,樓主能描述一下外外接電路怎么連嗎
回復(fù)

使用道具 舉報(bào)

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

發(fā)射機(jī)用寶峰5R改裝,p2.0接對(duì)講機(jī)的數(shù)據(jù)輸入端,p2.2接對(duì)講機(jī)的PTT,有興趣 的留言,P2.0接圖中的紅色標(biāo)記處位。
QQ圖片20160824212451.jpg
回復(fù)

使用道具 舉報(bào)

ID:140601 發(fā)表于 2016-11-7 09:35 | 顯示全部樓層
厲害了,樓主說(shuō)點(diǎn)原理啊,詳細(xì)點(diǎn),好玩兒
回復(fù)

使用道具 舉報(bào)

ID:140601 發(fā)表于 2016-11-7 09:39 | 顯示全部樓層
厲害了,詳細(xì)說(shuō)說(shuō)原理會(huì)更過(guò)癮~
回復(fù)

使用道具 舉報(bào)

ID:69271 發(fā)表于 2016-11-9 17:38 | 顯示全部樓層
這個(gè)東西太老了,原理沒(méi)有講,你寫(xiě)那么多,并且沒(méi)有電路圖,誰(shuí)能看懂?
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:204213 發(fā)表于 2018-5-17 11:04 | 顯示全部樓層
GUOXUAN 發(fā)表于 2018-1-14 09:20
雖然我玩了10多年無(wú)線,也有個(gè)人電臺(tái)數(shù)臺(tái),和呼號(hào)BH7KHV.也用過(guò)對(duì)講機(jī),BP機(jī).但是玩DIY硬件的,對(duì)于這個(gè)真不易 ...

是不是需要在電腦上有個(gè)程序,這個(gè)程序把用戶輸入的文字通過(guò)串口傳到單片機(jī)上,然后再靠對(duì)講機(jī)發(fā)射?
回復(fù)

使用道具 舉報(bào)

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

這個(gè)程序不完整,只能發(fā)固定的數(shù)字
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:375228 發(fā)表于 2020-2-10 23:25 | 顯示全部樓層
有沒(méi)有成功的詳細(xì)說(shuō)說(shuō)
回復(fù)

使用道具 舉報(bào)

ID:695866 發(fā)表于 2020-2-20 23:29 | 顯示全部樓層
現(xiàn)在呼響不是問(wèn)題,問(wèn)題是F協(xié)議呼響。
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

ID:274739 發(fā)表于 2020-12-9 20:02 | 顯示全部樓層
實(shí)在是 弄不明白     有沒(méi)有現(xiàn)成的   導(dǎo)出文件  提供一下   謝謝

2020-12-09_200047.png

回復(fù)

使用道具 舉報(bào)

ID:18867 發(fā)表于 2021-1-17 07:52 | 顯示全部樓層
xiao_chun 發(fā)表于 2020-12-9 20:02
實(shí)在是 弄不明白     有沒(méi)有現(xiàn)成的   導(dǎo)出文件  提供一下   謝謝

STC單片機(jī)頭文件沒(méi)有
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

使用道具 舉報(bào)

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

請(qǐng)問(wèn)有沒(méi)有教程
回復(fù)

使用道具 舉報(bào)

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

使用道具 舉報(bào)

本版積分規(guī)則

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

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表