⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 modem.c

📁 微程序控制器采用ATMEL AVR MEGA162
💻 C
字号:
#include "Modem.h"

#include "sci.h"
#include <string.h>
#define MODEM_BUFFER_SIZE 250 // Size of Modem Buffer
BYTE InBuffer[256];

BYTE OutBuffer[10];

BYTE *In = &InBuffer[0];
BYTE *Out = &OutBuffer[0];

// Byte pointers of the ring buffer (FIFO)
volatile BYTE mDataSlot = 0; // Points to the next available character
volatile BYTE mEmptySlot = 0; // Points to next available slot of the FIFO
volatile BYTE mTest = 0;
volatile BYTE oTest = 0;
volatile BYTE firstTest = 0;
volatile BYTE isAdd = 0;
void addoid(void);
void strtob(void);
BYTE *ModemBuffer = &InBuffer[0];
extern BYTE *pordid;
extern BYTE ordidStr[];
extern BYTE looptimeStr[];
extern BYTE *plooptime;

extern DWORD ii,kk;

void ProcModemReceive (BYTE c)
{
	ModemBuffer [mEmptySlot++] = c;
	if (mEmptySlot > MODEM_BUFFER_SIZE) {
		mEmptySlot = 0;
  	}
    if(c == '['){
    	firstTest=1;
        return;
    }else if(c == ']'){
    	mTest=0;
        return;
    }else if(firstTest==1){
    	if(c == '$'){
        	mTest=1;
            firstTest=0;
            return;
        }else{
        	firstTest=0;
        }
    }
    
    if(mTest){
    	
    }
}

void ModemInit (void)
{
    mDataSlot = 0; // Initialize FIFO Modem pointers
	mEmptySlot = 0;
  
}

BYTE ModemBuffNotEmpty (void)
{
	return !(mDataSlot == mEmptySlot);
}


void ModemBuffFlush (void)
{
	mDataSlot = mEmptySlot;
}



BYTE Waitfor (char *String, BYTE Time)
{
	BYTE c = 0;
	BYTE Offset = 0;
   
    while (Time-- > 0) 
	{
		DelayM (100);          // Wait =~ 150 mSec
    	while (ModemBuffNotEmpty())
		{          // Wait for characters
    		c = ModemGetch ();          // Extract a character from FIFO
    		if (c == String [Offset]) 
			{     // Is C a part of the string?
    			Offset++;          // Compare with next character
    			if (String [Offset] == 0)
				{ // is this the end of string?
           			return True; // match = True
    			}
    		}
    		else // c does not belong to String
    		Offset = 0; // Reset String pointer
    	}
        
    }
    return False;
}


BYTE ModemGetch (void)
{
	BYTE c = 0;
    if (mDataSlot != mEmptySlot)
	{
         c = ModemBuffer [mDataSlot];
         mDataSlot++;
         if (mDataSlot > MODEM_BUFFER_SIZE)
		 mDataSlot = 0;
		 return(c);
    }
    else {
       return (BYTE)0x00;
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -