?? dtmf_main.c
字號:
#include <reg51.h>
#include <MODBUSCR.H>
#include <ABSACC.H>
#define COMMAND PBYTE[0x0A]
#define RAM_READY PBYTE[0x0E]
#define TOOK_AWAY PBYTE[0x0F]
#define CODE_NUMBER DBYTE[0x3F]
#define fff 0x00
unsigned char pdata * data p_point; /*雙口RAM中存放號碼處*/
unsigned char data * data buffer; /*CPU內存放號碼處*/
sbit StD=P3^3; /*解碼測試線,有號碼為高*/
sbit voice_control=P3^4; /*控制對講機發送輸出*/
sbit busyR=P3^2;
sbit watchdog=P3^5; /*看門狗*/
bit code_saved; /*新號碼已儲存*/
bit code_removed; /*buffer中有新號碼*/
read_code()
{
int i=0;
do
{
i++;
} while(StD==1&&i<=100); /*延時判斷*/
watchdog=!watchdog;
if (StD==0){;} /*如是擾動*/
else
{
*buffer=P1&0x0F; /*讀出號碼*/
buffer++;
code_saved=1; /*設已存儲新號碼標志*/
CODE_NUMBER++; /*收到號碼數+1*/
code_removed=0; /*清號碼已送出標志*/
}
}
wait_code()
{
unsigned int data i,j;
i=0;
code_saved=0; /*清號碼已存儲標志*/
if(RAM_READY!=0xE)
RAM_READY=0;
if(RAM_READY==0)
{TOOK_AWAY=0;}/*如果送出的號碼已被收走,送出的號碼個數清零*/
else;
do
{
i++;
watchdog=!watchdog;
}while(StD==0&&i<=15000); /*檢測是否在300MS內無新號碼被解碼*/
if(StD==1){;} /*如有新號碼,退出*/
else if(code_removed==0) /*如無,看是否有新號碼需要送出*/
{
if(TOOK_AWAY==0&&RAM_READY==0) /*如右新號碼需送出,看上次送出的號碼是否被取走*/
{
buffer=0x40; /*恢復號碼緩存區指針*/
p_point=fff; /*恢復送出號碼區指針*/
if(CODE_NUMBER<=16&&CODE_NUMBER!=0) /*緩存區號碼數超過16位,不發送*/
{
for(j=0;j<CODE_NUMBER;j++) /*送出號碼*/
{
*p_point=(*buffer);
p_point++;
buffer++;
}
RAM_READY=0x0E; /*通知微機已送出號碼*/
}
else;
TOOK_AWAY=CODE_NUMBER; /*送出號碼個數*/
code_removed=1;
}
else if(RAM_READY==0)
{TOOK_AWAY=0;} /*如果送出的號碼已被收走,送出的號碼個數清零*/
else;
buffer=0x40; /*恢復號碼緩存取初始狀態*/
CODE_NUMBER=0;
}
else
{
buffer=0x40; /*恢復號碼緩存取初始狀態*/
CODE_NUMBER=0;
}
/*讀語音控制指令*/
if(COMMAND==0x0A){voice_control=0;} /*打開對講機*/
else if(COMMAND==0x00)
{voice_control=1;} /*關閉對講機*/
else{;}
}
main()
{
unsigned char data w;
SCON=0x00;
PCON=0x00;
TMOD=0x91;
PSW=0x00;
IE=0x00;
P2=0x00;
CODE_NUMBER=0;
RAM_READY=0;
TOOK_AWAY=0;
voice_control=1;
p_point=0x00;
for(p_point=0;p_point<=0xFE;p_point++) /*清理RAM*/
{
*p_point=0x00;
}
for(;;) /*無限循環*/
{
watchdog=!watchdog;
if(StD==1) /*判斷檢測到新號碼,進入號碼存儲程序*/
{
if(code_saved==0)
{
read_code();
}
else;
}
else
{
wait_code(); /*否則,進入號碼等待程序,同時處理于微機的信息傳遞*/
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -