📄 main.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 + -