Воскресенье, 05.05.2024, 23:16
Приветствую Вас Гость | RSS

POZDPAK.RU малая ветроэнергетика по региону Удмуртия (РФ)

Меню сайта
Statistics

Онлайн всего: 1
Гостей: 1
Пользователей: 0
Форма входа

Текст программы прошивки

 
Измерение температуры. (версия 1)

 //*********************ПРОЕКТ УМНЫЙ САД для MSP430G2553********************//
#include "io430.h"                        // подключение библиотеки
#include "stdio.h"                        // подключение библиотеки
//*******************Переменные********************************************//
unsigned int zakhvat = 1;                 // переменная для захвата при задержке
unsigned int izm_temp = 0x0000;           // переменная измеренной температуры
unsigned int ThTl = 0x0000;               // переменная критической темп
unsigned int config_temp = 0x007F;        // конфигурация датчика температуры

//*************************************************************************************************************//
// команды темп. датчика: ССh-пропуск RОМ, 44h-конвертировать темп, 4Eh-запись Th,Tl,config в ОЗУ датч.(3байта),
//  BEh-чтение памяти(4бата), 48h-копирование ОЗУ в ПЗУ датч., B8h-повторная загрузка из ПЗУ в ОЗУ датч.
//*************************************************************************************************************//

//********прерывание Timer0************************************************//
#pragma vector = TIMER0_A0_VECTOR         // вектор прерывания таймера ТА0
__interrupt void Timer (void)             // прерывание ТА0
{
TA0CTL = TACLR;                           // Выключаем таймерА0
zakhvat = 0;                              // обнуление переменной для выхода из задержки
}
//***********************подпрограмма задержки*****************************//
//реализация самой подпрограммы занимает время около 2мкс
void delay (int time)
{
TA0CCTL0 = CCIE;                          // разрешение прерывания ТА0
TA0CCR0 = time;                           // переменная времени, мкс
TA0CTL = MC0+TASSEL1+ID0+ID1;             // Включаем и конфигурируем таймерА0
while (zakhvat);                          // цикл для захвата контроллера
zakhvat = 1;                              // возврат переменной захвата
}
//***********************подпрограмма управления реле*********************//
void K1 (int SOST)                        // объявление подпрограммы реле К1
{
if (SOST == 1){P1OUT |= 0x0020;}          // если SOST=1 реле К1 вкл
else {P1OUT &= ~0x0020;}                  // если же нет реле К1 выкл
}
void K23 (int SOST)                       // объявление подпрограммы реле К23
{
if (SOST == 1){P1OUT |= 0x0040;}          // если SOST=1 реле К23 вкл
else {P1OUT &= ~0x0040;}                  // если же нет реле К23 выкл
}
void K4 (int SOST)                        // объявление подпрограммы реле К4
{
if (SOST == 1){P1OUT |= 0x0080;}          // если SOST=1 реле К4 вкл
else {P1OUT &= ~0x0080;}                  // если же нет реле К4 выкл
}
//**************подпрограмма отправки команд в датчик*********************//
void write_TBute (int imp_sr, int data)
{
unsigned int nBit = 8;                    // переменная цикла отправки
unsigned int nSdvig = 0;                  // переменная выборки бита
//unsigned int otv_ImPR = 0;                  // переменная
if (imp_sr == 1)                          // если нужно отправить импульс сброса
{
P1DIR |= 0x0010;                          // порт датчика на выход
P1OUT &= ~0x0010;                         // ноль в порт датчика
delay(480);                               // задержка 480мкс
P1OUT |= 0x0010;                          // единица в порт датчика
P1DIR &= ~0x0010;                         // порт датчика на вход
delay(200);                               // задержка 200мкс
//if((P1IN & 0x0010) == 0x0010){otv_IPR = 1;}// если был импульс присутствия
delay(280);                               // задержка 280мкс
}
//if(){}
P1DIR |= 0x0010;                          // порт датчика на выход
while (nBit)                              // цикл записи команды
{
P1OUT &= ~0x0010;                         // ноль в порт датчика
delay(2);                                 // задержка 2мкс
if ((data&(0x0001<<nSdvig))==(0x0001<<nSdvig)){P1OUT |= 0x0010;}// если передаем единицу то на порт датчика единица
delay(58);                                // задержка 58мкс
P1OUT |= 0x0010;                          // окончание слота записи(единица в порт датчика)
nSdvig++;                                 // инкремент выборки бита команды
nBit--;                                   // декремент цикла отправки команды
delay(2);                                 // время восстановления датчика
}
P1DIR &= ~0x0010;                         // порт датчика на вход
}
//*************Считать регистры памяти датчика темп***********************//
void read_mem (void)
{
unsigned int nBit;                        // переменная цикла отправки
unsigned int nSdvig;                      // переменная выборки бита
write_TBute(1,0xCC);                      // запись команды
write_TBute(0,0xBE);                      // запись команды
// чтение данных (4байта)
nBit = 32;                                // переменная цикла приема
nSdvig = 0;                               // переменная выборки бита
P1DIR |= 0x0010;                          // порт датчика на выход
while (nBit)                              // цикл записи команды 0хBE
{
P1OUT &= ~0x0010;                         // ноль в порт датчика
delay(2);                                 // задержка 2мкс
P1DIR &= ~0x0010;                         // порт датчика на вход
delay(15);                                // задержка 15мкс
if (nBit>=17) {izm_temp |= (((P1IN&0x10)>>4)<<nSdvig);}// опрос порта датчика
if (nBit<=16) {ThTl |= (((P1IN&0x10)>>4)<<nSdvig);}// опрос порта датчика
delay(45);                                // задержка 45мкс
P1OUT |= 0x0010;                          // единица в порт датчика
P1DIR |= 0x0010;                          // порт датчика на выход
nBit--;                                   // декремент цикла приема
nSdvig++;                                 // инкремент выборки бита
delay(2);                                 // задержка 2мкс
}
// импульс сброса
P1OUT &= ~0x0010;                         // ноль в порт датчика
delay(480);                               // задержка 480мкс
P1OUT |= 0x0010;                          // единица в порт датчикa
P1DIR &= ~0x0010;                         // порт датчика на вход
}
//****************основная программа***************************************//
int main (void)
{
//********конфигцрация процессора******************************************//  
WDTCTL = WDTPW + WDTHOLD;                 // остановка сторожевого таймера
BCSCTL1 = CALBC1_8MHZ;                    // установка тактовой частоты 8МГц
DCOCTL = CALDCO_8MHZ;                     // установка тактовой частоты 8МГц
__enable_interrupt();                     // Включенеие прерываний
//TA1CCR0 = 0x0030;                         // период совпадения ТА1(шим)
TA1CTL = MC1+TASSEL1;                     // вкл и конфигурация ТА1(необходима дополнительная конфигурация регистров сравнения и модуля вывода)
P2DIR &= ~0x0007;                         // Установка пинов клавиатуры на вход
P2OUT |= 0x0007;                          // тип подтяжки пинов клавиатуры VCC
P2REN |= 0x0007;                          // Включение подтяжки пинов клавиатуры
ADC10AE0 = 0x000F;                        // включаем А0-3 в Р1.0-1.3
P1OUT &= ~0x00E0;                         // обнуление пинов реле
P1DIR |= 0x00E0;                          // установка пинов реле на выход
P2SEL |= 0x0008;                          // установка на Р2.3 таймера ТА1
P2DIR |= 0x0008;                          // модуль совпадения ТА1 на Р2.3
P1OUT |= 0x0010;                          // пин 1Wire на плюс (предустановка)
P1DIR &= ~0x0010;                         // пин 1Wire на вход (на пине подтяжка на +) (предустановка)(FFEF)
//****************основной цикл********************************************//

while (1)
{


}
}
//*************************************************************************//

  • Яндекс.Метрика
    Дочерние сайты
  • POZDPAK.RU
  • POZDPAK-GOOGLE 2010
  • POZDPAK-UCOZ.COM
  • Cайты партнеры