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

📄 main.c

📁 驱动程序 收音控制源代码-2051可单独作收音控制程序 
💻 C
字号:
//-------------------------------------------------------------------------
// RDS Decoding
// COPYRIGHT (C) 2003, Enbia Technology Inc.
// Target: 8031
// AUTHOR: STEVEN LUOhs
//
// Revision History:
// 2003/2/16 - Original Version
//-------------------------------------------------------------------------
#include <reg51.h>
#include <types.h>
#include <intrins.h>

extern WORD gHSBWord;
extern BOOL Read_HSB(void);
extern BOOL Write_HSB(WORD hsbword);

// Gloables ------------------ //
extern WORD PICode;					//
extern BYTE GroupType;				//
extern BYTE PTY;					//
extern BOOL bTP;					// TP
extern BOOL bTA;					// TA
extern BOOL bMS;					// M/S

extern BOOL bRDSOk;
extern BOOL bTextOk;
extern BYTE bytecnt;

WORD aRDS_Text[32];					// radio text, 32 bytes maxium
WORD aPS[4];						// Service name, 8 chars

// Locals
BYTE text_addr;
BYTE ps_addr;

enum RDS_Commands {
	TEST,							// Test HSB, return 0x5555 if HSB ok

	// --- Group 0 ---//
	READ_GRP0_OK,					// Check if the RDS data available, 1 = OK, 0 = not OK		
	READ_PI,			
   	READ_PTY,
	READ_TP,
	READ_TA,
	READ_MS,

	RESET_PS_ADDR,
	READ_PS,			

	// --- Group 2 ---//
	READ_GRP2_OK,					// Check if the RDS data available, 1 = OK, 0 = not OK	
	RESET_TEXT_ADDR,
	READ_TEXT_AMOUNT,
	READ_TEXT
};

// --------------------------------------------------------------
// main
// --------------------------------------------------------------
void main(void){

	EA = 1; EX0 = 1; IT0 = 1;	// Enbale INT0

	while(1){
		if (Read_HSB()){
//			EA=0;
			switch(gHSBWord & 0x00ff){
				case TEST:
 			    	Write_HSB(0x5555); break;

				// --------------- Group 0 ------------- //				
				case READ_GRP0_OK:
					Write_HSB(bRDSOk); break;

				case READ_PI:
					Write_HSB(PICode); break;

				case READ_PTY:
				 	Write_HSB(PTY); break;

				case READ_TP:
				 	Write_HSB(bTP); break;

				case READ_TA:
					Write_HSB(bTA); break;

				case READ_MS:
				 	Write_HSB(bMS); break;

				case RESET_PS_ADDR:
					ps_addr = 0; break;

				case READ_PS:
					Write_HSB(aPS[ps_addr]); ps_addr ++; break;

	
				// --------------- Group 2 ------------- //				
				case READ_GRP2_OK:
					Write_HSB(bTextOk); break;

				case READ_TEXT_AMOUNT:
					Write_HSB(bytecnt); break;
											
				case RESET_TEXT_ADDR:
					text_addr = 0; Write_HSB(1); break;

				case READ_TEXT:
					Write_HSB(aRDS_Text[text_addr]); text_addr ++; break;
		
				default:
					break;
			}		
		}
		//EA=1;
	} // end of main loop

} // main


// ISREX1:EXTERNAL INTERRUPT 1 SERVICE ROUTINE 
static void ISREX1() interrupt 2{
	EX1=0;
}

// THIS TIMER/COUNTER USED AS BAUD RATE GENERATOR, AND TC1 IRQ'S DISABLED.
// This interrupt, therefore, should never occur. 
static void ISRTC1() interrupt 3{
	ET1=0;			// Disable further interruptions 
}

// ISRCOM:COMMUNICATIONS INTERRUPT SERVICE ROUTINE
//The serial port is operated at interrupt level under the 8-bit ASCII mode.

static void ISRCOM() interrupt 4{
	ES=0;			// for debug
}


 


⌨️ 快捷键说明

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