uldemir писал(а): Можно ли в выражении LATEbits.RE1 = 1 единицу в "RE1" заменить определением DISP_RW ?
Код: Выделить всё
#define DISP_RW LATEbits.RE1
...
DISP_RW = 1;uldemir писал(а): Можно ли в выражении LATEbits.RE1 = 1 единицу в "RE1" заменить определением DISP_RW ?
Код: Выделить всё
#define DISP_RW LATEbits.RE1
...
DISP_RW = 1;uldemir писал(а):Нет, я хочу всего и много. Чтобы этот DISP_RW можно было использовать и в контексте LATE = (1<<DISP_RW); и LATEbits.DISP_RW = 1;
Код: Выделить всё
#define RS LA5
#define EN LA4
#define LCD_DAT LATA
#define LCD_DAT_IN PORTA
Код: Выделить всё
#define strob_EN EN=1;__delay_us(5);EN=0;
void lcd_send(unsigned char com,unsigned char dat)
{
if(com)RS=1;
else RS=0;
LCD_DAT= (LCD_DAT & 0xF0)|((dat>>4)& 0x0F);
strob_EN
LCD_DAT=(LCD_DAT & 0xF0)|(dat & 0x0F);
strob_EN
__delay_ms(1);
}Код: Выделить всё
movlw (1 << GIE) | (1<<T0IE)
movwf intconКод: Выделить всё
bsf intcon, T0IE
bsf intcon, GIEКод: Выделить всё
P1DIR = P0 | P1 | P2 | P3 | P5 ;Код: Выделить всё
P1DIR_bits.P0 = 1;uldemir писал(а):Поэтому микрочиповская система меня немного ввела в ступор и хочется понять, какие соглашения тут приняты.
Код: Выделить всё
extern volatile near unsigned char PORTB;
extern volatile near union {
struct {
unsigned RB0:1;
unsigned RB1:1;
unsigned RB2:1;
unsigned RB3:1;
unsigned RB4:1;
unsigned RB5:1;
unsigned RB6:1;
unsigned RB7:1;
};
struct {
unsigned INT0:1;
unsigned INT1:1;
unsigned INT2:1;
unsigned CCP2:1;
unsigned KBI0:1;
unsigned KBI1:1;
unsigned KBI2:1;
unsigned KBI3:1;
};
struct {
unsigned AN12:1;
unsigned AN10:1;
unsigned AN8:1;
unsigned AN9:1;
unsigned AN11:1;
unsigned PGM:1;
unsigned PGC:1;
unsigned PGD:1;
};
struct {
unsigned FLT0:1;
unsigned C12IN3M:1;
unsigned :1;
unsigned C12IN2M:1;
};
struct {
unsigned :1;
unsigned C12IN3N:1;
unsigned :1;
unsigned C12IN2N:1;
};
} PORTBbits;Код: Выделить всё
extern volatile near unsigned char LATB;
extern volatile near struct {
unsigned LATB0:1;
unsigned LATB1:1;
unsigned LATB2:1;
unsigned LATB3:1;
unsigned LATB4:1;
unsigned LATB5:1;
unsigned LATB6:1;
unsigned LATB7:1;
} LATBbits;Chettuser писал(а): код распухает и ещё несколько неудобств...
Chettuser писал(а):Пожалуй снизойду до ответа "злому коту":
1. Распухает и еще как. До 40% (это из реальной жизни, не моей, на всякий случай предупрежу Вашу иронию).


Код: Выделить всё
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D4_Direction at TRISD4_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D7_Direction at TRISD7_bit;
int ms,sec;
char st[5];
void interrupt (void);
void IT (void);
void IMST (void);
void UTC (void);
void main() {
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"sec=");
Lcd_Out(2,1,"1234567890");
IMST();
while(1)
{
if (ms == 0)
{
inttostr(sec,st);
Lcd_Out(1,5,st);
}
UTC ();
}
}
void interrupt (void)
{
if (T0IF)
{
TMR0 = 0x08;
T0IF_bit = 0;
ms++;
}
}
void IT(void)
{
Option_reg = 0xc1;
T0IE_bit = 1;
GIE_bit = 1;
}
void IMST (void)
{
IT();
}
void UTC (void)
{
if (ms == 1000)
{
sec++;
ms = 0;
}
}
Код: Выделить всё
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D7_Direction at TRISD7_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD4_bit;
void main (void)
{
unsigned long cp,x1,x2;
unsigned char st[8];
unsigned char i,j,lcd[7];
TRISC = 0xFF;
TRISA = 0xFF;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Out(1,1,"Pulse");
Lcd_Out(2,1,"Counter");
Delay_ms(100);
TMR1H = 0x00;
TMR1L = 0x00;
T1CON = 0b00110011;
while(1)
{
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
x1 = TMR1L ;
x2 = TMR1H;
cp = x1 + (x2*256);
intToStr(cp,st);
Lcd_Out(1,1,st);
}
}
Код: Выделить всё
sbit LCD_RS at RD2_bit;
sbit LCD_EN at RD3_bit;
sbit LCD_D7 at RD7_bit;
sbit LCD_D6 at RD6_bit;
sbit LCD_D5 at RD5_bit;
sbit LCD_D4 at RD4_bit;
sbit LCD_RS_Direction at TRISD2_bit;
sbit LCD_EN_Direction at TRISD3_bit;
sbit LCD_D7_Direction at TRISD7_bit;
sbit LCD_D6_Direction at TRISD6_bit;
sbit LCD_D5_Direction at TRISD5_bit;
sbit LCD_D4_Direction at TRISD4_bit;
int ms,sec;
void inter (void);
void IT (void);
void IMST (void);
void UTC (void);
void main (void)
{
int cp,x1,x2,i,j;
char st[4],ss[5],lcd[5];
TRISC = 0xFF;
TRISA = 0xFF;
TRISB = 0;
PORTB = 0x00;
Lcd_Init();
Lcd_Cmd(_LCD_CLEAR);
Lcd_Cmd(_LCD_CURSOR_OFF);
Lcd_Out(1,1,"1234567890");
Delay_ms(500);
IMST();
TMR1H = 0x00;
TMR1L = 0x00;
T1CON = 0b00110011;
while(1)
{
if (ms == 0)
{
intToStr(sec,st);
j=0;
for (i=0; i<=11; i++)
{if (st[i] != ' ')
{lcd[j] = st[i];
j++;
}
}
Lcd_Out(2,6,st);
}
UTC();
x1 = TMR1L;
x2 = TMR1H;
cp = x1 + (x2*256);
intToStr(cp,ss);
Lcd_Out(2,0,ss);
}
}
void inter (void)
{
if (T0IF)
{
TMR0=0x08;
T0IF_bit =0 ;
ms++;
}
}
void IT (void)
{
Option_reg = 0xc1;
T0IE_bit = 1;
GIE_bit = 1;
}
void IMST (void)
{
IT();
}
void UTC (void)
{
if (ms == 1000)
{
sec++;
ms = 0;
}
}