Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Микроси и жки: непонятный момент
Форум разработчиков электроники ELECTRONIX.ru > Микроконтроллеры (MCs) > Все остальные микроконтроллеры > PIC
monos
Вот текст программки обработки механического энкодера, с последующим выводом результата на 2-строчный жки:
Код
#include "RUS_TEXT.h"

#define Tok_max     (!PORTB.B1 && PORTB.B2)
#define Tok_min     (!PORTB.B2 && PORTB.B1)
#define Big_butt    (!PORTB.B3)

// LCD module connections
sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_D4 at RC4_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D7 at RC7_bit;

sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// End LCD module connections

char *x = "0000",  *y =",";

const int Zmin = 2;       // Константа значения минимального задания тока.
const int Zmax = 40;       // Константа значения максимального задания тока.
const double k=(229/(Zmax-Zmin)); // Коэффициент для масштабирования  задания тока.

unsigned char ust;
bit flag;
////////////////////////////////////////////////////////////////////////////////
void ust_tok (){

   }
////////////////////////////////////////////////////////////////////////////////

void interrupt(){
}
////////////////////////////////////////////////////////////////////////////////
void main() {
  TRISC = 0;
  TRISB1_bit=1;
  TRISB2_bit=1;
  TRISB3_bit=1;
  
  ANSELH = 0;
  ANSEL = 0;
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;
  
  OPTION_REG = 0;
  WPUB1_bit = 1;
  WPUB2_bit = 1;
  WPUB3_bit = 1;
  
  IOCB1_bit = 1;
  IOCB2_bit = 1;
  IOCB3_bit = 1;
  
  GIE_bit = 0;
  INTE_bit = 0;
  RBIE_bit = 0;
  RBIF_bit = 0;

  Lcd_init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
  ust = Eeprom_Read(0); // читаем уставку из EEPROM
  
  flag = 0;
  Delay_ms(1000);
  
///////////////////////////////////////////////////////////////////////////////
  while(1){
  
   Delay_us(10);
   if (Tok_max && ust < 255) ust++;
   else if (Tok_min && ust > 2) ust--;
   else if (Big_butt) Eeprom_Write(0,ust);

   x[0] = (ust/100)+48;
   x[1] = (ust/10)%10+48;
   x[2] = *y;
   x[3] = ust%10+48;

   LCD_Out_Rus(1,2,"Установка тока");
   Lcd_Out(2,7,x);
   Lcd_Out(2,5,"=");
   Lcd_Out(2,12,"A");
   }

}

Загвоздка в след.: приведенный код- работает, но, если зацикленные строки переношу в функцию void ust_tok () и вызываю ее из бесконечного цикла- не работает: жки пустой....
Попытался методом научного тыка разобраться: в итоге в функции ust_tok оставил только эти строки
Код
void ust_tok (){
while(1){

Delay_us(100);

Lcd_Out(2,7,"123");
Lcd_Out(2,5,"=");
Lcd_Out(2,12,"A");

}
}

ЖКИ пустой... В чем ошибка?
пс. мк- пик16ф886.
Kolia
А вы функцию вызываете в main? И ввобще выдайте нерабочий код полностью а не куски...
monos
Верхняя "простыня" это код полностью. Проблема в том, что если зацикленные, while(1), строки переношу в функцию void ust_tok () и вызываю ее (функцию) из main - не работает: жки пустой.... Пробовал и так и эдак, в итоге в ust_tok остались только строки вывода на жки: результат тот же...
monos
...нерабочий код полностью:
Код
// LCD module connections
sbit LCD_RS at RB7_bit;
sbit LCD_EN at RB6_bit;
sbit LCD_D4 at RC4_bit;
sbit LCD_D5 at RC5_bit;
sbit LCD_D6 at RC6_bit;
sbit LCD_D7 at RC7_bit;

sbit LCD_RS_Direction at TRISB7_bit;
sbit LCD_EN_Direction at TRISB6_bit;
sbit LCD_D4_Direction at TRISC4_bit;
sbit LCD_D5_Direction at TRISC5_bit;
sbit LCD_D6_Direction at TRISC6_bit;
sbit LCD_D7_Direction at TRISC7_bit;
// End LCD module connections


////////////////////////////////////////////////////////////////////////////////
void ust_tok (){

while(1){
  Delay_us(100);
  Lcd_Out(2,7,"123");
  }
}
////////////////////////////////////////////////////////////////////////////////

void interrupt(){
}
////////////////////////////////////////////////////////////////////////////////
void main() {
  TRISC = 0;
  TRISB1_bit=1;
  TRISB2_bit=1;
  TRISB3_bit=1;
  
  ANSELH = 0;
  ANSEL = 0;
  C1ON_bit = 0;                      // Disable comparators
  C2ON_bit = 0;
      
  GIE_bit = 0;
  
  Lcd_init();
  Lcd_Cmd(_LCD_CLEAR);
  Lcd_Cmd(_LCD_CURSOR_OFF);
    
  Delay_ms(1000);
  
///////////////////////////////////////////////////////////////////////////////
  ust_tok ();

}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.