📄 asuro 020.c
字号:
//get corresponding tone-code and store in reload value for tone0
gucTm0CurRldVal=gucMusTonLst[uci];
//make right engine tone pitch differ from left engine tone pitch
gucTm1CurRldVal=gucTm0CurRldVal+1;
//clear tone-duration counter
gucTm2IntCnt=0;
//start tone0-playing
SFRX(TIMSK,TOIE0_H);
//delay to avoid tone0 and tone1 starting at the same time (battery-current reducing)
vDelayXMilliSeconds(1);
//if low octave is selected (timer0 range 3 is set)
if(SFRS(TCCR0,CS00_H)){
//if dual tone mode is set
if(gbDuaTonMod){
//start tone1-playing too
SFRX(TIMSK,TOIE1_H);
}//if
}//if
//if high octave is selected (timer0 range 2 is set)
else{
//start tone1-playing too
SFRX(TIMSK,TOIE1_H);
}//else
//start tone-duration counter
SFRX(TIMSK,TOIE2_H);
//exit loop
break;
}//if
}//else
//select next tone list index
uci++;
}
}
//================================================================================
// DELAY MILLI SECONDS
//================================================================================
void vDelayXMilliSeconds(int iDelMilSec){
//var
unsigned int i,j;
//handle all milli seconds
for(i=0;i<iDelMilSec;i++){
//delay 1 millisecond
for(j=0;j<28750;j++){
}//for
}//for
}
//================================================================================
// TOGGLE SOUND PITCH EIGHT OCTAVES
//================================================================================
void vToggleSoundPitchEightOctaves(void){
//if timer0 range 3 is set (low range)
if(SFRS(TCCR0,CS00_H)){
//set timer0 to range 2 (high range)
SFRX(TCCR0 ,CS00_L);
//set timer1 to range 2 (high range)
SFRX(TCCR1B,CS10_L);
}//if
//if timer0 range 2 is set (high range)
else{
//set timer0 to range 3 (low range)
SFRX(TCCR0 ,CS00_H);
//set timer1 to range 3 (low range)
SFRX(TCCR1B,CS10_H);
}//else
}
//================================================================================
// ALL LEDS OFF
//================================================================================
void vAllLedsOff(void){
//left brake led off
SFRX(PORTC,BOD_LFT_L);
//right brake led off
SFRX(PORTC,BOD_RGT_L);
//red system led off
SFRX(PORTD,SLD_RED_L);
//green system led off
SFRX(PORTB,SLD_GRN_L);
//track led off
SFRX(PORTD,TRK_LED_L);
}
//================================================================================
// TOGGLE ALL LEDS AT RANDOM
// toggles brake/track leds extra to match 8 choices
//================================================================================
void vToggleAllLedsAtRandom(void){
//get random value from 0-7
switch((random()&0x07)){
//toggle left brake led
case 0: SFRT(PORTC,BOD_LFT); break;
//toggle right brake led
case 1: SFRT(PORTC,BOD_RGT); break;
//toggle red system led
case 2: SFRT(PORTD,SLD_RED); break;
//toggle green system led
case 3: SFRT(PORTB,SLD_GRN); break;
//toggle track led
case 4: SFRT(PORTD,TRK_LED); break;
//toggle left brake led
case 5: SFRT(PORTC,BOD_LFT); break;
//toggle right brake led
case 6: SFRT(PORTC,BOD_RGT); break;
//toggle track led
case 7: SFRT(PORTD,TRK_LED); break;
}//switch
}
//================================================================================
// INIT ALL PORTS AS INPUTS AND OUTPUTS
//================================================================================
void vInitAllPortsAsInputsAndOutputs(void){
//disable all output pull-up resistors
//SFRX(SFIOR,PUD_H);
//+-------------------------------------------------------------------------------------------+
//| DDRB = Data Direction Register port B |
//| |
//| FWD_RGT = Forward Right engine |
//| REV_RGT = Reverse Right engine |
//| IR1_TXD = InfraRed Transmit data (connection1, connected to R16) carrier input |
//| SPD_RGT = Speed of Right engine |
//| SPD_LFT = Speed of Left engine |
//| SLD_GRN = System LeD Green |
//| |
//+-------------------------------------------------------------------------------------------+
//| right engine off, ir-tx carrier off, left/right engine speed zero, green system led off |
//+-------------------------------------------------------------------------------------------+
//| |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|port name | PB7 | PB6 | PB5 | PB4 | PB3 | PB2 | PB1 | PB0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|pin number | 10 | 9 | 19 | 18 | 17 | 16 | 15 | 14 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|signal name| XTAL2 | XTAL1 |REV_RGT_X|FWD_RGT_X|IR1_TXD_X|SPD_RGT_X|SPD_LFT_X|SLD_GRN_X|
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( DDRB ,RESERVED |RESERVED |REV_RGT_O|FWD_RGT_O|IR1_TXD_O|SPD_RGT_O|SPD_LFT_O|SLD_GRN_O);
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( PORTB ,RESERVED |RESERVED |REV_RGT_H|FWD_RGT_H|IR1_TXD_L|SPD_RGT_L|SPD_LFT_L|SLD_GRN_L);
//+-------------------------------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------------+
//| DDRC = Data Direction Register port C |
//| |
//| VPL_SNS = V+ Sense |
//| SWI_JNC = Switch Junction |
//| TRS_LFT = Tracksensor Left |
//| TRS_RGT = Tracksensor Right |
//| BOD_LFT = Break and Odometer Left |
//| BOD_RGT = Break and Odometer Right |
//| |
//+-------------------------------------------------------------------------------------------+
//| supply voltage measurement enable, switch detection by interrupt enable, |
//| left/right track sensors enable, left/right break leds enable |
//+-------------------------------------------------------------------------------------------+
//| |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|port name | PC7 | PC6 | PC5 | PC4 | PC3 | PC2 | PC1 | PC0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|pin number | - | 1 | 28 | 27 | 26 | 25 | 24 | 23 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|signal name| - | RESET |VPL_SNS |SWI_JNC |TRS_LFT |TRS_RGT |BOD_LFT |BOD_RGT |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( DDRC ,RESERVED |RESERVED |VPL_SNS_I|SWI_JNC_I|TRS_LFT_I|TRS_RGT_I|BOD_LFT_O|BOD_RGT_O);
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( PORTC ,RESERVED |RESERVED |VPL_SNS_N|SWI_JNC_N|TRS_LFT_N|TRS_RGT_N|BOD_LFT_L|BOD_RGT_L);
//+-------------------------------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------------+
//| DDRD = Data Direction Register port D |
//| |
//| BOD_COM = Breaks and Odoleds Common connection |
//| TRK_LED = Track Led |
//| FWD_LFT = Forward Left engine |
//| REV_LFT = Reverse Left engine |
//| SWI_IAC = Switches Interrupt And Control |
//| SLD_RED = System Led Red |
//| IR2_TXD = InfraRed Transmit data (connection2, connected to D10) modulation input |
//| IR_RXD = InfraRed Receive data |
//| |
//+-------------------------------------------------------------------------------------------+
//| enable breakleds, trackled off, left engine off, switch sensor enable, |
//| red system led off, tx-ir modulator off, rx-ir enable |
//+-------------------------------------------------------------------------------------------+
//| |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|port name | PD7 | PD6 | PD5 | PD4 | PD3 | PD2 | PD1 | PD0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|pin number | 13 | 12 | 11 | 6 | 5 | 4 | 3 | 2 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|signal name|BOD_COM_X|TRK_LED_X|REV_LFT_X|FWD_LFT_X|SWI_IAC_X|SLD_RED_X|IR2_TXD_X|IR_RXD_X |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( DDRD ,BOD_COM_O|TRK_LED_O|REV_LFT_O|FWD_LFT_O|SWI_IAC_I|SLD_RED_O|IR2_TXD_O|IR_RXD_I );
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( PORTD ,BOD_COM_L|TRK_LED_L|REV_LFT_H|FWD_LFT_H|SWI_IAC_N|SLD_RED_L|IR2_TXD_H|IR_RXD_N );
//+-------------------------------------------------------------------------------------------+
}
//================================================================================
// INIT TIMER COUNTER 0
//================================================================================
void vInitTimerCounter0(void){
//+-------------------------------------------------------------------------------------------+
//| TCCR0 = Timer/Counter Control Register |
//+-------------------------------------------------------------------------------------------+
//| |
//| CSnn = Clock Source |
//| 000 = no clock source, timer/counter stopped |
//| 001 = 8MHz/ 1 = 8.000.000Hz => /256 = 31250.00Hz = 32us |
//| 010 = 8MHz/ 8 = 1.000.000Hz => /256 = 3906.25Hz = 256us |
//| 011 = 8MHz/ 64 = 125.000Hz => /256 = 488.28Hz = 2.048us |
//| 100 = 8MHz/ 256 = 31.250Hz => /256 = 122.07Hz = 8.192us |
//| 101 = 8MHz/1024 = 7.813Hz => /256 = 30.52Hz = 32.768us |
//| 110 = External clock source on T0 pin. Clock on falling edge |
//| 111 = External clock source on T0 pin. Clock on rising edge |
//| |
//+-------------------------------------------------------------------------------------------+
//| use clkio/1024 that makes freerunning frequency of 30.52Hz |
//+-------------------------------------------------------------------------------------------+
//| |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//| | - | - | - | - | - | Timer0 | Timer0 | Timer0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|signal name|RESERVED |RESERVED |RESERVED |RESERVED |RESERVED | CS02_X | CS01_X | CS00_X |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( TCCR0 ,RESERVED |RESERVED |RESERVED |RESERVED |RESERVED | CS02_L | CS01_H | CS00_H );
//+-------------------------------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------------+
//| TIFR = Timer/Counter Interrupt Flag Register |
//+-------------------------------------------------------------------------------------------+
//| |
//| OCF2 = output compare flag 2 (set if timer/counter2 = OCR2) |
//| TOV2 = timer/counter2 overflow flag |
//| ICF1 = Timer/Counter1, Input Capture Flag (if capture event on pin ICP1) |
//| OCF1A = Timer/Counter1, Output Compare A Match Flag (if TCNT1 = OCR1A) |
//| OCF1B = Timer/Counter1, Output Compare B Match Flag (if TCNT1 = OCR1B) |
//| TOV1 = Timer/Counter1, Overflow Flag (cleared by interrupthandler or manual writing 1)|
//| RESERVED = reserved |
//| TOV0 = Timer/Counter0, Overflow Flag (cleared by interrupthandler or manual writing 1)|
//| |
//| |
//+-------------------------------------------------------------------------------------------+
//| eventually use register for overflow detection |
//+-------------------------------------------------------------------------------------------+
//| |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//| | Timer2 | Timer2 | Timer1 | Timer1 | Timer1 | Timer1 | - | Timer0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|signal name| OCF2_X | TOV2_X | ICF1_X | OCF1A_X | OCF1B_X | TOV1_X |RESERVED | TOV0_X |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//SFRX ( TIFR , OCF2_X | TOV2_X | ICF1_X | OCF1A_X | OCF1B_X | TOV1_X |RESERVED | TOV0_X );
//+-------------------------------------------------------------------------------------------+
//+-------------------------------------------------------------------------------------------+
//| TIMSK = Timer/Counter Interrupt Mask Register |
//+-------------------------------------------------------------------------------------------+
//| |
//| OCIE2 = timer/counter2, output-compare-match interrupt enable |
//| TOIE2 = timer/counter2, overflow interrupt enable |
//| TICIE1 = timer/counter1, input-capture interrupt enable |
//| OCIE1A = timer/counter1, equal to output-compare-A-match register, interrupt enable |
//| OCIE1B = timer/counter1, equal to output-compare-B-match register, interrupt enable |
//| TOIE1 = timer/counter1 overflow interrupt enable |
//| RESERVED = unused |
//| TOIE0 = timer/counter0 overflow interrupt enable |
//| |
//+-------------------------------------------------------------------------------------------+
//| enable timer/counter0 interrupt |
//+-------------------------------------------------------------------------------------------+
//| |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//| | Timer2 | Timer2 | Timer1 | Timer1 | Timer1 | Timer1 | - | Timer0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|bit number | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
//|signal name| OCIE2_X | TOIE2_X |TICIE1_X |OCIE1A_X |OCIE1B_X | TOIE1_X |RESERVED | TOIE0_X |
//+-----------+---------+---------+---------+---------+---------+---------+---------+---------+
SFRX ( TIMSK , TOIE0_L );
//+--------------------------------------------
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -