音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

登錄 免費(fèi)注冊(cè) 首頁(yè) | 行業(yè)黑名單 | 幫助
維庫(kù)電子市場(chǎng)網(wǎng)
技術(shù)交流 | 電路欣賞 | 工控天地 | 數(shù)字廣電 | 通信技術(shù) | 電源技術(shù) | 測(cè)控之家 | EMC技術(shù) | ARM技術(shù) | EDA技術(shù) | PCB技術(shù) | 嵌入式系統(tǒng)
驅(qū)動(dòng)編程 | 集成電路 | 器件替換 | 模擬技術(shù) | 新手園地 | 單 片 機(jī) | DSP技術(shù) | MCU技術(shù) | IC 設(shè)計(jì) | IC 產(chǎn)業(yè) | CAN-bus/DeviceNe

發(fā)兩個(gè)我2001年寫(xiě)的C51程序,用DTMF發(fā)送GPS時(shí)間來(lái)同步多個(gè)時(shí)間。

作者:syzdq 欄目:單片機(jī)
發(fā)兩個(gè)我2001年寫(xiě)的C51程序,用DTMF發(fā)送GPS時(shí)間來(lái)同步多個(gè)時(shí)間。
有GPS模塊的數(shù)據(jù)讀取,MT88888870的讀寫(xiě),字符型LCD的讀寫(xiě),WDT,格林尼制時(shí)間轉(zhuǎn)東八區(qū)時(shí)間等,rxd中有一個(gè)軟件模擬的串口,不過(guò)只做了發(fā)沒(méi)做收。
原理圖就不發(fā)了,版權(quán)問(wèn)題。

* - 本貼最后修改時(shí)間:2005-11-15 9:33:59 修改者:syzdq

2樓: >>參與討論
syzdq
gpstxd.c
#pragma OPTIMIZE(5,speed)
/* CPU type:ATMEL AT89C51-24JC */
/* Fosc=11.0592MHZ */

#include <reg51.h>
#include <absacc.h>

#define uCHAR unsigned CHAR
#define uint  unsigned int

#define MT8888D XBYTE[0x0000]       /* MT8888數(shù)據(jù)端口 */
#define MT8888C XBYTE[0x0200]       /* MT8888地址端口 */

sbit ok=P3^1;                /* OUTPUT,當(dāng)GPS OEM板收到3顆以上的衛(wèi)星時(shí)LED亮 */
sbit lcdrs=P3^2;            /* OUTPUT, LCD模塊寄存器選擇線 */
sbit lcdrw=P3^3;            /* OUTPUT, LCD模塊讀寫(xiě)線 */
sbit lcden=P3^4;            /* OUTPUT, LCD模塊使能線 */
sbit wdi=P3^5;                /* OUTPUT,看門(mén)狗電路(IMP813LCPA)脈沖輸出兼運(yùn)行狀態(tài)指示LED輸出 */

bit disdef=0;

static uCHAR data time8s=160;        /* 8秒時(shí)間計(jì)數(shù) */

static uCHAR data satellitecount[2]={'0','0'};/* 連接的衛(wèi)星數(shù) */
static uCHAR data recebuf[20];        /* 20Byte GPS OEM板接收緩沖區(qū)和DTMF發(fā)送緩沖區(qū) */
static uCHAR data tempbuf[10];        /* 10Byte 臨時(shí)數(shù)據(jù)交換區(qū) */
static uCHAR data dispbuf[32];        /* 32Byte 顯示緩沖區(qū) */

uCHAR code dispinit[33]={"Initializing... Please waiting! "};/* 系統(tǒng)啟動(dòng)時(shí)LCD模塊顯示的信息 */
uCHAR code dispnsat[33]={"No GPS OEM boardfound.Searching!"};/* 連續(xù)8秒內(nèi)收不到GPS OEM板的信息時(shí)LCD模塊顯示的信息 */
uCHAR code dispsend[33]={"Sending data... Please waiting! "};/* 時(shí)間以DTMF碼發(fā)送時(shí)LCD模塊顯示的信息 */
uCHAR code dispdflt[33]={"2003-11-09    0820:40:07   DAHUA"};/* LCD模塊平時(shí)顯示日期,連接的衛(wèi)星數(shù),時(shí)間和公司名稱 */

uCHAR code dtmftrans[16]={10,1,2,3,4,5,6,7,8,9,13,14,15,0,11,12};/* 二進(jìn)制轉(zhuǎn)DTMF碼表 */
            /* 0,1,2,3,4,5,6,7,8,9, A, B, C,D, *, # ,*以E代,#以F代 */
uCHAR code moumaxday[12]={31,28,31,30,31,30,31,31,30,31,30,31};  /* 每個(gè)月的最大天數(shù)(不包括潤(rùn)年) */
            /* 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12 */

uCHAR code msg1[]={"GPS timer transceiver board-TXD,Ver:2.00,2001-09-20.Designer:"};
uCHAR code msg2[]={"Dongqing Zheng(鄭冬青),HANGZHOU DAHUA ELECTRON CO.LTD."};

void _nop_(void);                   /* 匯編中的NOP空操作,內(nèi)部函數(shù) */

void DISPLAY(void)
{
  uCHAR data i,j;
  wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */
  lcdrs=0;                /* 讀、寫(xiě)指令寄存器 */
  P1=0x80;                /* 設(shè)置DDRAM地址為00H */
  lcden=0;                /* 產(chǎn)生下降沿 */
  lcden=1;
  for(j=0;j<10;j++)
    _nop_();
  lcdrs=1;                /* 讀、寫(xiě)數(shù)據(jù)寄存器 */
  for(i=0;i<16;i++)            /* 顯示第一行 */
  {
    P1=dispbuf[i];            /* 寫(xiě)入顯示緩沖區(qū)數(shù)據(jù) */
    lcden=0;                /* 產(chǎn)生下降沿 */
    lcden=1;
    for(j=0;j<10;j++)
      _nop_();
  }
  lcdrs=0;                /* 讀、寫(xiě)指令寄存器 */
  P1=0xc0;                /* 設(shè)置DDRAM地址為40H,準(zhǔn)備顯示第二行 */
  lcden=0;                /* 產(chǎn)生下降沿 */
  lcden=1;
  for(j=0;j<10;j++)
    _nop_();
  lcdrs=1;                /* 讀、寫(xiě)數(shù)據(jù)寄存器 */
  for(i=16;i<32;i++)            /* 顯示第二行 */
  {
    P1=dispbuf[i];            /* 寫(xiě)入顯示緩沖區(qū)數(shù)據(jù) */
    lcden=0;                /* 產(chǎn)生下降沿 */
    lcden=1;
    for(j=0;j<10;j++)
      _nop_();
  }
  wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */
}

void initialize(void)            /* 系統(tǒng)初始化 */
{
  uCHAR i;
  uint x;
  _nop_();
  wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */
  ok=1;

  lcdrs=0;                /* 選擇指令寄存器 */
  lcdrw=0;                /* 寫(xiě) */
  lcden=1;                /* 拉高 */
  for(x=0;x<500;x++)
    _nop_();
  P1=0x01;                /* 清屏指令 */
  lcden=0;                /* 產(chǎn)生下降沿 */
  _nop_();
  lcden=1;
  wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */
  for(x=0;x<500;x++)
    _nop_();
  P1=0x38;                /* 功能設(shè)置:2行顯示,5X7點(diǎn)陣,8位數(shù)據(jù)寬度 */
  lcden=0;                /* 產(chǎn)生下降沿 */
  _nop_();
  lcden=1;
  wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */
  for(i=0;i<10;i++)
    _nop_();
  P1=0x06;                /* 設(shè)置輸入方式:當(dāng)將一字符寫(xiě)入DDRAM時(shí),地址加1,光標(biāo)右移,整個(gè)顯示不移動(dòng) */
  l
3樓: >>參與討論
syzdq
gpsrxd.c
#pragma OPTIMIZE(5,speed)
/* CPU type:ATMEL AT89C1051(可直接用AT89C2051代換) */
/* Fosc=11.0592MHZ */
/* 由于DOS下的C51最小只支持128字節(jié)的片內(nèi)RAM,故要手工把程序自動(dòng)生成的清零所有片內(nèi)RAM的128字節(jié)改為64字節(jié), */
/* 比如地址02B5H(實(shí)際位置可能根據(jù)編譯結(jié)果有所不同)處的787FH(MOV R0,#7FH)改為783FH(MOV R0,#3FH)。 */

#include <reg51.h>
#include <absacc.h>

#define uCHAR unsigned CHAR
#define uint  unsigned int

static uCHAR data recebuf[20];        /* 20Byte DTMF接收緩沖區(qū)和232口發(fā)送緩沖區(qū) */

sbit rxd=P3^0;                /* I,軟件模擬串口輸入端(軟件上未用) */
sbit txd=P3^1;                /* O,軟件模擬串口輸出端 */
sbit std=P3^2;                /* I,MT8870輸出更新:1—有新的數(shù)據(jù)輸出 */
sbit toe=P3^3;                /* O,MT8870輸出允許:1—允許數(shù)據(jù)輸出。 */
sbit pwdn=P3^4;                /* O,MT8870節(jié)電端:1—進(jìn)入節(jié)電方式(不再接收DTMF碼) */
sbit wdi=P3^5;                /* O,看門(mén)狗電路(IMP813LCPA)脈沖輸出兼運(yùn)行狀態(tài)指示LED輸出 */
sbit led=P3^7;                /* O,時(shí)間接收指示LED(硬件上未用) */

bit sendbit=0;                /* 軟件模擬RS232口上待發(fā)送位 */
bit sendflag=0;                /* 通信標(biāo)志 */

static uCHAR data bitpoint=10;        /* 軟件模擬RS232口上一個(gè)字節(jié)發(fā)送時(shí)的位置指針, */
                    /* 數(shù)字10:插0,9:D0,8:D1,...... */
                    /* 2:D7,1:插1 ,0:結(jié)束本字節(jié) */

uCHAR code dtmftrans[16]={13,1,2,3,4,5,6,7,8,9,0,14,15,10,11,12};/* DTMF轉(zhuǎn)二進(jìn)制碼表 */
            /* D,1,2,3,4,5,6,7,8,9,0, *, #, A, B, C ,*以E代,#以F代 */

uCHAR code msg1[]={"GPS timer transceiver board-RXD,Ver:1.00,2001-04-18.Designer:"};
uCHAR code msg2[]={"Dongqing Zheng(鄭冬青),HANGZHOU DAHUA ELECTRON CO.LTD."};

void _nop_(void);                   /* 匯編中的NOP空操作 */

void main(void)
{
  uCHAR i;
  uint x;
  _nop_();
  led=0;
  rxd=1;
  P1|=0xff;                /* 整個(gè)P1口作為輸入口 */
  wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */

  pwdn=0;                /* 初始化MT8870 */
  toe=0;

  IP=0x00;
  IE=0x00;

  _nop_();

  for(;;)
  {
    wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */
    IE=0;
    _nop_();
    if(std)                /* 等待MT8870輸出狀態(tài)更新 */
    {
      toe=1;                /* 讀入一位DTMF碼 */
      _nop_();
      i=P1;
      toe=0;
      while(std);            /* 等待MT8870輸出定時(shí)周期結(jié)束 */
      wdi=~wdi;                /* 復(fù)位看門(mén)狗電路 */
      _nop_();
      if(i==0x0f)            /* 0x0c的DTMF碼 */
      {                    /* 開(kāi)始接收 */
          recebuf[0]=i;
          for(i=1;i<18;i++)
    {
      while(!std);            /* 等待MT8870輸出狀態(tài)更新 */
                      /* 如果未能連續(xù)收滿18個(gè)字節(jié),便會(huì)因看門(mén)狗溢出而復(fù)位,等待下一批DTMF碼 */
      toe=1;            /* 讀入一位DTMF碼 */
      _nop_();
      recebuf[i]=P1;
      toe=0;
      while(std);            /* 等待MT8870輸出定時(shí)周期結(jié)束 */
      wdi=~wdi;            /* 復(fù)位看門(mén)狗電路 */
     }
     pwdn=1;                /* 關(guān)閉MT8870 */
        for(i=0;i<18;i++)        /* DTMF轉(zhuǎn)碼為非壓縮型BCD碼 */
          recebuf[i]=dtmftrans[recebuf[i]];
        recebuf[1]=(recebuf[0]<<4)|recebuf[1];/* 非壓縮型BCD碼轉(zhuǎn)為壓縮型BCD碼 */
        recebuf[2]=(recebuf[2]<<4)|recebuf[3];
        recebuf[3]=(recebuf[4]<<4)|recebuf[5];
        recebuf[4]=(recebuf[6]<<4)|recebuf[7];
        recebuf[5]=(recebuf[8]<<4)|recebuf[9];
        recebuf[6]=(recebuf[10]<<4)|recebuf[11];
        recebuf[7]=(recebuf[12]<<4)|recebuf[13];
        recebuf[8]=(recebuf[14]<<4)|recebuf[15];
        recebuf[9]=(recebuf[16]<<4)|recebuf[17];
    wdi=~wdi;
        i=recebuf[1];            /* 為發(fā)送方便,數(shù)據(jù)是倒著放的 */
        recebuf[1]=recebuf[9];
        recebuf[9]=i;
     &nbs
4樓: >>參與討論
javie
最好是說(shuō)明再詳細(xì)一點(diǎn),呵呵
好,很好

5樓: >>參與討論
syzdq
還要怎么詳細(xì)。
粘到論壇里后括號(hào)對(duì)得不是很齊,大家將就一下吧。
我那時(shí)都是先用Keil C51編譯看有無(wú)語(yǔ)法等錯(cuò)誤,通過(guò)后用FRANKLIN C51不得WIN版調(diào)試(調(diào)試比當(dāng)時(shí)的Keil強(qiáng)很多),最后用FRANKLIN C51 DOS版編譯成目標(biāo)代碼(代碼最。

參與討論
昵稱:
討論內(nèi)容:
 
 
相關(guān)帖子
請(qǐng)問(wèn)誰(shuí)有C語(yǔ)言編寫(xiě)的單片機(jī)控制微型打印機(jī)的程序
各位大蝦幫我看看這個(gè)定時(shí)電路有什么問(wèn)題?可以怎么改進(jìn)嗎?
濾波問(wèn)題
中間使用光藕會(huì)不會(huì)限制串口通信的波特率?
液晶顯示的問(wèn)題
免費(fèi)注冊(cè)為維庫(kù)電子開(kāi)發(fā)網(wǎng)會(huì)員,參與電子工程師社區(qū)討論,點(diǎn)此進(jìn)入


Copyright © 1998-2006 m.58mhw.cn 浙ICP證030469號(hào)