День недели по дате: алгоритм Си
- Информация о материале
- Родительская категория: Заметки
- Категория: Программирование
- Просмотров: 5667
Быстрый алгоритм определения дня недели по дате:
Учтите, что месяц задаётся от 0 (январь) до 11 (декабрь).
Получаемый день недели - от 0 (воскресенье) до 6 (суббота).
unsigned short dayofweek(unsigned short year, unsigned short month, unsigned short day)
{
unsigned short t1, t2, t2r, t3;
const unsigned short m[12] = {0, 3, 3, 6, 1, 4, 6, 2, 5, 0, 3, 5};
t1 = year - 2000;
t2 = t1 / 100;
t2r = t1 % 100;
t3 = t1 + (t1 >> 2) - t2 + (t2 >> 2) - 1;
if ( ((t1 & 0x0003 == 0) && ((t2r != 0) || (t2 & 0x0003 == 0))) && (month < 2) ) t3--;
return (t3 + m[month] + day) % 7;
}
Алгоритм неоднократно проверялся
STM32L051 инициализация для низкого энергопотребления
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 5525
+Сниппеты (примеры) на С для L0 серии от самих ST:
Пример инициализации:
| #include "stm32l0xx.h" |
| /* |
| * Stop mode/LSE/RTC: 1.28uA |
| * Stop mode without RTC: 0.4uA |
| **/ |
| //#define RTC_ENABLE |
| int main(void) |
| { |
| /** */ |
| RCC->APB1ENR |= (RCC_APB1ENR_PWREN); |
| PWR->CR = (PWR->CR & ~(PWR_CR_VOS)) | PWR_CR_VOS_0; |
| while(PWR->CSR & PWR_CSR_VOSF); |
| /** DBP enable */ |
| PWR->CR |= PWR_CR_DBP; |
| /* Disable PWR clock */ |
| RCC->APB1ENR &= (uint32_t)(~RCC_APB1ENR_PWREN); |
| /* Enable HSI, wait until ready */ |
| RCC->CR |= RCC_CR_HSION | RCC_CR_HSIDIVEN; |
| while ((RCC->CR & (RCC_CR_HSIRDY |RCC_CR_HSIDIVF)) != (RCC_CR_HSIRDY |RCC_CR_HSIDIVF)); |
| /* Enable PLL, set HSI as PLL source, wait until PLL is ready */ |
| RCC->CFGR |= RCC_CFGR_PLLSRC_HSI | RCC_CFGR_PLLMUL8 | RCC_CFGR_PLLDIV2; |
| RCC->CR |= RCC_CR_PLLON; |
| while ((RCC->CR & RCC_CR_PLLRDY) == 0); |
| /* Choose PLL as System clock */ |
| RCC->CFGR |= RCC_CFGR_SW_PLL; |
| while ((RCC->CFGR & RCC_CFGR_SWS_PLL) == 0); |
| /* Enable all GPIO clock */ |
| RCC->IOPENR |= RCC_IOPENR_GPIOAEN | RCC_IOPENR_GPIOBEN | RCC_IOPENR_GPIOCEN | \ |
| RCC_IOPENR_GPIODEN | RCC_IOPENR_GPIOHEN; |
| /* Take care of PA4, set to Analog input */ |
| // PA4 is set as input by default, this cause current leakage(~4uA) |
| GPIOA->MODER |= (0x03 << 4*2); |
| /* Disable GPIO clock for stop mode */ |
| RCC->IOPENR &= (uint32_t)~(RCC_IOPENR_GPIOAEN | RCC_IOPENR_GPIOBEN | RCC_IOPENR_GPIOCEN | \ |
| RCC_IOPENR_GPIODEN | RCC_IOPENR_GPIOHEN); |
| #ifdef RTC_ENABLE |
| /** reset RTC */ |
| RCC->CSR |= RCC_CSR_RTCRST; |
| RCC->CSR &= ~RCC_CSR_RTCRST; |
| /** enable LSE */ |
| RCC->CSR |= RCC_CSR_LSEON; |
| while((RCC->CSR & RCC_CSR_LSERDY)!=RCC_CSR_LSERDY); |
| /** Enable RTC, use LSE as clock */ |
| RCC->CSR = (RCC->CSR & ~RCC_CSR_RTCSEL) | RCC_CSR_RTCEN | RCC_CSR_RTCSEL_0; |
| /* Enable Alarm interrupt */ |
| RTC->WPR = 0xCA; |
| RTC->WPR = 0x53; |
| RTC->CR &=~ RTC_CR_ALRAE; |
| while((RTC->ISR & RTC_ISR_ALRAWF) != RTC_ISR_ALRAWF) |
| { |
| /* add time out here for a robust application */ |
| } |
| RTC->ALRMAR = 0; |
| RTC->CR = RTC_CR_ALRAIE | RTC_CR_ALRAE; |
| RTC->WPR = 0xFE; |
| RTC->WPR = 0x64; |
| /** */ |
| EXTI->IMR |= EXTI_IMR_IM17; |
| EXTI->RTSR |= EXTI_RTSR_TR17; |
| NVIC_SetPriority(RTC_IRQn, 0); |
| NVIC_EnableIRQ(RTC_IRQn); |
| RTC->WPR = 0xCA; |
| RTC->WPR = 0x53; |
| RTC->ISR |= RTC_ISR_INIT; |
| while((RTC->ISR & RTC_ISR_INITF)!=RTC_ISR_INITF) |
| { |
| /* add time out here for a robust application */ |
| } |
| RTC->PRER = 0x00010001; |
| RTC->TR = 0; /* (5) */ |
| RTC->DR = 0x00002101; |
| RTC->CR = (RTC->CR & ~RTC_CR_FMT); |
| RTC->ISR &=~ RTC_ISR_INIT; |
| RTC->WPR = 0xFE; |
| RTC->WPR = 0x64; |
| #endif |
| while (1) /* Infinite loop */ |
| { |
| /* Set SLEEPDEEP bit of Cortex System Control Register */ |
| SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; |
| /* Enable PWR clock */ |
| RCC->APB1ENR |= RCC_APB1ENR_PWREN; |
| /* Disable the Power Voltage Detector */ |
| PWR->CR &= (uint32_t)(~PWR_CR_PVDE); |
| PWR->CR = ( PWR->CR & (uint32_t)(~PWR_CR_PLS) )| PWR_CR_PLS_LEV4; |
| /* Set MCU in ULP (Ultra Low Power) */ |
| PWR->CR |= PWR_CR_ULP; |
| /*Enable fast wakeUp*/ |
| PWR->CR |= (uint32_t)(PWR_CR_FWU); |
| /* Enter Stop mode(not standby mode) when mcu enters deepsleep */ |
| PWR->CR &= (uint32_t)(~PWR_CR_PDDS); |
| /* Regulator is in low power mode */ |
| PWR->CR |= PWR_CR_LPSDSR; |
| /* WeakUp flag must be cleared before enter sleep again */ |
| PWR->CR |= (uint32_t)(PWR_CR_CWUF); |
| while( (PWR->CSR & PWR_CSR_WUF) == PWR_CSR_WUF ); |
| /* Disable PWR clock */ |
| RCC->APB1ENR &= (uint32_t)(~RCC_APB1ENR_PWREN); |
| __WFI(); |
| } |
| } |
Ждёт ли "жижу" дно?
- Информация о материале
- Автор: Super User
- Категория: Новости
- Просмотров: 3231
C одного известного форума:
За два дня 13 и 14 сентября объем ставок на падение цен на нефть, сделанных на Московской бирже, вырос почти в три раза. Это следует из данных самой биржи. 14 сентября всего за четыре часа кто-то поставил на падение цен на нефть более трех млрд рублей. Так как речь идет о срочных финансовых инструментах, кто-то сделал противоположную ставку. Согласно данным биржи, падения цен ждут крупные игроки (юридические лица), которые продали «свою» нефть массе физлиц. Интерес представляет тот факт, что сделанная ставка на падение цен на нефть должна быть реализована до 3 октября. Получается, что большие деньги поставлены с очень большим риском и ограничены весьма коротким сроком. С учетом того, что московская биржа не является основной торговой площадкой для определения мировых цен на нефть, возможно, кто-то обладает неизвестной широкой публике информацией. Это может представлять интерес в условиях грядущей встречи стран-экспортеров нефти в Алжире в конце месяца. Возможно, один из ключевых игроков на рынке нефти, которым, в том числе, является наша страна, не собирается ни о чем договариваться.
SRU-12VDC-SD-C
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Электроника / cхемотехника
- Просмотров: 2237
Аналоги реле JZC-22F-S-C-15-D-12VDC
Реле имп.. Мин. заказ (mpq): 25. Аналоги: RUUH-Sx-112D GOODSKY, G5LE-1-E-12VDC OMRON, TRU-12VDC-SC-CD-R TTI, HJR-21FF-12VDC-S-Z TIANBO, SRU-SH-112D SANYOU RELAY, SRU-12VDC-SD-C SONGLE
Расшифровка ошибок CAN
- Информация о материале
- Автор: Super User
- Родительская категория: Заметки
- Категория: Программирование микроконтроллеров
- Просмотров: 2682
Stuff Error, CRC Error, Form Error, Bit Error, Acknowledgment Error ...
Схема для тестирования CAN без интерфейсных внешних CAN трансмиттеров:

Страница 142 из 196
