//
// ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ "MUTE":
//1. ΠΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ "LED-MUTE-RELAY" (PP7)
//2. ΠΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ "SCAN"
//
//ΠΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΡ "PREAMP OFF":
//1. ΠΠΊΠ»ΡΡΠΈΡΡ "LED-MUTE-RELAY" (PP7)
//2. DE-ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ "LED-PWR-RELAY" (PP0)
//3. DE-ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ² (PP1-Π Π 6)
//4. ΠΠΊΠ»ΡΡΠΈΡΡ PT7(1) ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠΌ 10 ΠΌΡ
//5. DE-ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ "LED-MUTE-RELAY" (PP7) ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠ΅ΡΠ΅Π· 3 Ρ.
//6. ΠΠ΅ΡΠ΅ΠΉΡΠΈ ΠΊ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ "PREAMP ON"
//
//Π°Π²ΡΠΎΡΡ: Steven Barrett ΠΈ Daniel Pack
//ΠΠ°ΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ: 19 ΠΈΡΠ½Ρ 2004
//ΠΠΎΡΠ»Π΅Π΄Π½ΡΡ ΡΠ΅Π΄Π°ΠΊΡΠΈΡ: 20 ΠΈΡΠ½Ρ 2004
//*******************************************************************
//*******************************************************************
//Π²ΠΊΠ»ΡΡΠ΅Π½Π½ΡΠ΅ ΡΠ°ΠΉΠ»Ρ
#include <912b32.h> //B32 EVB header file
#include "func_def.h" //ΡΡΠ½ΠΊΡΠΈΠΈ-ΠΏΡΠΎΡΠΎΡΠΈΠΏΡ, Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
//main program*******************************************************
// Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅
int which_input; //Π²Ρ ΠΎΠ΄ ΡΡΠΈΠ»ΠΈΡΠ΅Π»Ρ
int keep_going; //Π²Π²ΠΎΠ΄ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
int mute; //ΡΠ»Π°Π³ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ΠΌ Π·Π²ΡΠΊΠ°
unsigned char old_PORTB = 0xff; //ΡΠ΅ΠΊΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ PORTB
unsigned char old_PORTA = 0x00; //ΡΠ΅ΠΊΡΡΠΈΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ PORTA
unsigned char new_PORTB, new_PORTA; //Π½ΠΎΠ²ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ PORTA, PORTB
void main(void) {
asm(" .area vectors(abs)\n"
" .org 0xFFF8\n" //ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ Π²Π΅ΠΊΡΠΎΡΠ° ΡΠ±ΡΠΎΡΠ° Π΄Π»Ρ 68HC12 B32
" .word 0x8000, 0x8000, 0x8000, 0x8000\n"
" .text");
initialize_task();
//Π³Π»Π°Π²Π½ΡΠΉ ΡΠΈΠΊΠ»
while(1) { //ΠΎΠΆΠΈΠ΄Π°Π΅ΡΡΡ ΡΠΈΠ³Π½Π°Π» Π½Π° Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΠΈΡΠ°Π½ΠΈΡ
if ((PORTB==0xFE)||(PORTA==0X01))
//PORTB ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² Π½ΠΈΠ·ΠΊΠΎΠ΅, PORTA - Π²
// Π²ΡΡΠΎΠΊΠΎΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΠ΅
{ //Π²Ρ Π·Π°Π±ΡΠ»ΠΈ Π²ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΈΡΠ°Π½ΠΈΠ΅! ΠΠ°ΠΏΡΠΎΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ
keep_going = 1; //ΡΠΈΠΊΠ» ΡΡΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
PORTP=0x7E; //Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ LED-MUTE-RELAY PP7(0)
//LED-PWR-RELAY PP0(0) (0111_1110)
which_input_task();
activate_power_relay_task();
delay_3s(); //Π·Π°Π΄Π΅ΡΠΆΠΊΠ° 3 Ρ.
PORTP = 0x80; // DE-ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ PD7(1) - Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π·Π²ΡΠΊΠ°
while(keep_going) //ΠΏΡΠΎΡ ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ ΠΌΠ΅Π½Ρ - Π³Π»Π°Π²Π½ΡΠΉ ΡΠΈΠΊΠ» ΠΎΠΏΡΠΎΡΠ°
{
process_PORTB_input_task();
process_PORTA_input_task();
}
}//end if - ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΈΡΠ°Π½ΠΈΡ - ΠΏΠΈΡΠ°Π½ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ΄Π°Π½ΠΎ!
}//end while(1)
}//ΠΊΠΎΠ½Π΅Ρ Π³Π»Π°Π²Π½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°
//*******************************************************************
// ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ
//*******************************************************************
initialize_task: Π½Π°ΡΠ°Π»ΡΠ½ΡΠ΅ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ ΡΡΠΈΠ»ΠΈΡΠ΅Π»Ρ
//*******************************************************************
void initialize_task(void) {
mute = on; //turn mute on
initialize_timer(); // ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠ°ΠΉΠΌΠ΅ΡΠ°
initialize_ports(); // ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΠΏΠΎΡΡΠΎΠ²
initialize_pins(); // ΠΈΠ½ΠΈΡΠΈΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ Π²ΡΠ²ΠΎΠ΄ΠΎΠ²
which_input = 2 ; //ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²Ρ ΠΎΠ΄ CD(2)
//Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ² Π½Π° Π»ΠΈΡΠ΅Π²ΠΎΠΉ ΠΏΠ°Π½Π΅Π»ΠΈ
PORTP = 0x81; //Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅Ρ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ² PD1-PD6 Π½ΠΈΠ·ΠΊΠΈΠΌ Π°ΠΊΡΠΈΠ²Π½ΡΠΌ
// ΡΡΠΎΠ²Π½Π΅ΠΌ (1000_0001)
delay_3s(); //Π·Π°Π΄Π΅ΡΠΆΠΊΠ° 3 Ρ
PORTP = 0xff; //Π²ΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ΠΎΠ²
}
//*******************************************************************
//which_input_task: ΠΎΠΏΡΠΎΡ Π²Ρ ΠΎΠ΄ΠΎΠ², ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠ° ΡΠ΅ΠΊΡΡΠ΅Π³ΠΎ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ
//*******************************************************************
void which_input_task(void) {
switch(which_input) { // ΠΏΠΎΠ΄ΡΠ²Π΅ΡΠΈΠ²Π°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ Π΄Π»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΠΎΠ³ΠΎ
// Π²Ρ ΠΎΠ΄Π° (ΠΏΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π²Ρ ΠΎΠ΄ 2 - CD)
case 1: //ΠΠΈΠ°Π½ΠΈΠ½ΠΎ
phono_task();
break;
case 2: //CD
CD_task();
break;
case 3: //Π’ΡΠ½Π΅Ρ
tuner_task();
break;
case 4: //ΠΠ°Π³Π½ΠΈΡΠΎΡΠΎΠ½ 1
tape1_task();
break;
case 5: //ΠΠ°Π³Π½ΠΈΡΠΎΡΠΎΠ½ 2
tape2_task();
break;
case 6: //ΠΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΊΠ°Π½Π°Π» (ΠΠ)
aux_task();
break;
default:;
}//ΠΊΠΎΠ½Π΅Ρ switch
}
//*******************************************************************
//phono_task: ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π²Ρ ΠΎΠ΄ ΠΎΡ Π Π°Π΄ΠΈΠΎ
//*******************************************************************
void phono_task(void) {
PORTT |= 0x02; //ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ PT1(1) (0000_0010)
delay_5ms();
PORTT &= ~0x02; // Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ PT1(0)
PORTP = 0x7E; //Π³Π°ΡΡΡΡΡ Π²ΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ
PORTP &= ~0x02; //Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ 1 (0)
}
//******************************************************************
//CD_task: ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π²Ρ ΠΎΠ΄ ΠΎΡ CD
//******************************************************************
void CD_task(void) {
//CD
PORTT |= 0x04; // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ PT2(1) (0000_0100)
delay_5ms();
PORTT &= ~0x04; // Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ PT2(0)
PORTP |= 0x7E; //Π³Π°ΡΡΡΡΡ Π²ΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ
PORTP &= ~0x04; // Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ 2 (0)
}
//******************************************************************
//tuner_task: ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π²Ρ ΠΎΠ΄ ΠΎΡ ΡΡΠ½Π΅ΡΠ°
//******************************************************************
void tuner_task(void) {
//TUNER PORTT |= 0x08; // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ PT3(1) (0000_1000)
delay_5ms();
PORTT & = 0x08; // Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ PT3(0
PORTP |= 0x7E; //Π³Π°ΡΡΡΡΡ Π²ΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ
PORTP &= ~0x08; // Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ 3 (0)
}
//******************************************************************
//tape1_task: ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π²Ρ ΠΎΠ΄ ΠΎΡ ΠΌΠ°Π³Π½ΠΈΡΠΎΡΠΎΠ½Π° 1
//******************************************************************
void tape1_task(void) {
//TAPE#1
PORTT |= 0x10; //assert PT4(1) (0001_0000)
delay_5ms();
PORTT &= ~0x10; // Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ PT4(0)
PORTP |= 0x7E; //Π³Π°ΡΡΡΡΡ Π²ΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ
PORTP &= ~0x10; // Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ 4 (0)
}
//******************************************************************
//tape2_task: ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π²Ρ ΠΎΠ΄ ΠΎΡ ΠΌΠ°Π³Π½ΠΈΡΠΎΡΠΎΠ½Π° 2
//******************************************************************
void tape2_task(void) {
//TAPE#2
PORTT |= 0x20; // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ PT5(1) (0010_0000)
delay_5ms();
PORTT &= ~0x20; // Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ PT5(0)
PORTP |= 0x7E; //Π³Π°ΡΡΡΡΡ Π²ΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ
PORTP & = ~0x20; // Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ 5 (0)
}
//******************************************************************
//aux_task: ΠΊΠΎΠ½ΡΠΈΠ³ΡΡΠΈΡΡΠ΅ΡΡΡ Π²Ρ ΠΎΠ΄ ΠΎΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΠΊΠ°Π½Π°Π»Π°
//******************************************************************
void aux_task(void) {
//ΠΠ
PORTT |= 0x40; // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ PT6(1) (0100_0000)
delay_5ms();
PORTT &= ~0x40; // Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ PT6(0)
PORTP |= 0x7E; //Π³Π°ΡΡΡΡΡ Π²ΡΠ΅ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄Ρ
PORTP &= ~0x40; // Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ²Π΅ΡΠΎΠ΄ΠΈΠΎΠ΄ 6(0)
}
//******************************************************************
//activate_power_relay_task(): Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠ΅Π»Π΅ ΡΠΈΠ»ΠΎΠ²ΠΎΠ³ΠΎ ΠΏΠΈΡΠ°Π½ΠΈΡ
//******************************************************************
void activate_power_relay_task(void) {
PORTT |= 0x80; // ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ PT7(1) ΠΈΠΌΠΏΡΠ»ΡΡΠΎΠΌ 10 ΠΌΡ
delay_5ms();
delay_5ms();
PORTT &= ~0x80; // Π²ΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ PT7
}
//******************************************************************
//process_PORTB_input_task(): ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π²ΡΠ±ΡΠ°Π½Π½ΡΠΉ Π²Ρ ΠΎΠ΄ ΠΎΡ PORTB
//******************************************************************
void process_PORTB_input_task(void) {
new_PORTB = PORTB; //read PORTB
if (new_PORTB != old_PORTB) { //ΡΡΠΈΡΡΠ²Π°Π½ΠΈΠ΅ ΡΠΎΡΡΠΎΡΠ½ΠΈΡ ΠΏΠΎΡΡΠ° PORTB
switch(new_PORTB) { //PORTB ΡΡΡΠ°Π½Π°Π²Π»ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° Π½ΠΈΠ·ΠΊΠΈΠΉ ΡΡΠΎΠ²Π΅Π½Ρ
case 0xFE: //PB0 "S-PREAMP-PWR" (1111_1110)
if (process_valid_input_PORTB(new_PORTB)) {
preamp_off();
keep_going=0;
}
break;
case 0xFD: //PB1 "S-PHONO" (1111_1101)
if (which_input !=1) {
if (process_valid_input_PORTB(new_PORTB) {
which_input = 1;
change_input();
}
}
break;
case 0xFB: //PB2 "S-CD" (1111_1011)
if (which_input!=2) {
if (process_valid_input_PORTB(new_PORTB)) {
which_input = 2;
change_input();
}
}
break;
case 0xF7: //PB3 "S-TUNER" (1111_0111)
if (which_input != 3) {
if (process_valid_input_PORTB(new_PORTB)) {
which_input = 3;
change_input();
}
}
break;
case 0xEF: //PB4 "S-TAPE#1" (1110_1111)
if (which_input != 4) {
if (process_valid_input_PORTB(new_PORTB)) {
which_input = 4;
change_input();
}
}
break;
case 0xDF: //PB5 "S-TAPE#2" (1101_1111)
if (which_input != 5) {
if (process_valid_input_PORTB(new_PORTB)) {