#include "lcd_acm1602.h"
#include "power.h"
#include "menu.h"
+#include "backlight.h"
/*
* Detect reset condition.
#endif
rcon.byte = RCON;
stkptr.byte = STKPTR;
- RCON |= 0b01010011; // SBOREN,*RI,*POR,*BOR = '1'.
- if((rcon.b.POR ==0) && (rcon.b.BOR == 0)) {
+ if(rcon.b.POR ==0) {
+ RCONbits.POR = 1;
return RESET_POR;
}
- if(rcon.b.BOR == 0) return RESET_BOR;
- if(rcon.b.RI == 0) return RESET_SOFTWARE;
+ if(rcon.b.BOR == 0) {
+ RCONbits.BOR = 1;
+ return RESET_BOR;
+ }
+ if(rcon.b.RI == 0) {
+ RCONbits.RI = 1;
+ return RESET_SOFTWARE;
+ }
if(rcon.b.TO == 0) return RESET_WDT;
if(rcon.b.PD == 0) return RESET_POWERDOWN;
if(stkptr.b.STKOVF) return RESET_STACK_FULL;
{
IOCB = 0x00;
- IOCB |= 0x10; // IOCB4 ONLY.
-#ifdef __SDCC
-// INTCON &= ~(_RBIF | _RBIE);
-// INTCON |= _GIE;
-// INTCON |= (_GIE | _PEIE);
+// IOCBbits.IOCB4 = 1;
INTCONbits.RBIE = 0;
- INTCONbits.RBIF = 0;
INTCONbits.GIE = 1;
INTCONbits.PEIE = 1;
-
-#else
- INTCON &= ~(_INTCON_RBIF_MASK | _INTCON_RBIE_MASK);
-// INTCON |= _GIE;
- INTCON |= (_INTCON_GIE_MASK | _INTCON_PEIE_MASK);
-#endif
}
void power_on(unsigned char f)
{
if(f == 0x00){
- set_examp_mute(1);
+ set_examp_mute(0xff);
idle_time_ms(200);
- set_radiopower(0);
+ set_radiopower(0x00);
} else {
- set_examp_mute(0);
+ set_examp_mute(0x00);
idle_time_ms(100);
- set_radiopower(1);
+ set_radiopower(0xff);
}
}
{
unsigned char count = 0;
char i;
- for(i = 0; i < 24; i++) { // 10*24=240ms.
+
+ TRISBbits.RB4 = 1; // Set Input
+ for(i = 0; i < 24; i++) { // 2*24=48ms.
if(PORTBbits.RB4) count++;
_POWER_DELAY();
ClrWdt();
}
- if(count <= 12) { // 120ms
+ if(count <= 12) { // 24ms
return 0xff; // Pressed
}
return 0; // Not pressed
void shutdown(unsigned char save)
{
- _CLS();
- _LOCATE(0,0);
-// printstr("Bye...");
- idle_time_ms(1500); // 1.5Sec
- lcd_setbacklight(0, 0);
- set_powerlamp(0);
- _AM_STATLAMP = 0;
- _FM_STATLAMP = 0;
-// _CLS();
+ rfamp_power(RFAMP_OFF);
acm1602_suspend(LCD_I2CADDR);
power_off(save);
}
void power_off(unsigned char save)
{
unsigned char sts;
- if(save != 0) save_eeprom();
+
+ if(save != 0) {
+ save_eeprom();
+// save_frequencies();
+ }
+ lcd_setbacklight(0, 0);
+ set_powerlamp(0);
+ _AM_STATLAMP = 0;
+ _FM_STATLAMP = 0;
+ power_on(0);
+
WDTCONbits.SWDTEN = 0; // Lame WDT OFF.
sts = 0;
do {
- IOCB = 0x00;
- IOCBbits.IOCB4 = 1; // IOCB4 ONLY.
+ RCONbits.IPEN = 1;
+ IOCB = 0x10; // IOCB4 ONLY.
OSCCONbits.IDLEN = 0; // Not Idle.
INTCON2bits.RBIP = 1; // Priority = HIGH;
- INTCONbits.RBIF = 0;
- INTCONbits.GIE = 0;
- INTCONbits.PEIE = 0;
- INTCONbits.RBIE = 1;
- power_on(0);
+ INTCON = 0b00001000;
+ T0CONbits.TMR0ON = 0;
Sleep();
// Wake up
if(INTCONbits.RBIF) {
+ INTCONbits.RBIF = 0;
+ idle_init();
sts = chk_powerbutton();
+ // sts = 0xff;
}
} while(sts == 0);
- INTCONbits.RBIF = 0;
INTCONbits.RBIE = 0;
-
- INTCONbits.GIE = 1;
- INTCONbits.PEIE = 1;
-
+ INTCONbits.RBIF = 0;
// Button pressed, software reset.
Reset();
}
\ No newline at end of file