AS7ti6K

Обработка Нажатия Кнопки

34 сообщения в этой теме

AS7ti6K    2

Есть МК PIC16F630 на одной ноге у нее кнопка без фиксации. Нужно в программе отслеживать ее нажатия по такому алгоритму:

нажатие (и ее удержание в нажатом состоянии) менее 200 мс игнорировать.

нажатие до ~1300 - короткое нажатие

нажали и удержали на 1300 и более удержание кнопки (долгое нажатие).

Как-то вот так я это сделал:

......
Label WaitReleaseButton;
procedure Proc;
var N: Byte;
begin
 for N:= 1 to 3 do begin
   Func;
   Delay_ms(3000);
 end;
end;
//--------------------- Main -------------------------
var N: Word;
begin
while True do begin
 .........
  if Button(PORTA, 0, 200, 0) then begin
    ..........                                             //Тут код при кратковременном нажатии
    for N:= 1 to 1500 do
      if not Button(PORTA, 0, 1, 0) then Break;

    if Button(PORTA, 0, 1, 0) then begin
      Proc;                                           // Это вызывается при удержании кнопки на ~1,5 сек
      goto WaitReleaseButton;
    end;
   ..........
    WaitReleaseButton:
    while not PORTA.B0 do nop;
  end; // if Button
 end; // while True do begin
end.

При долгом удержании вызывается подпрограмма Proc; которая может и должна выполнятся долгое время

ВОПРОС: Как мне это переделать или доделать или предложите свои вариант

А нужно чтобы во время выполнения Proc обработка кнопки на короткое нажатие осталась.

Т.е. если выполняется Proc а мы во время ее выполнения нажимаем кнопку и удерживаем более 200 мс и тогда нужно

сразу прервать код Proc; и вернуться в главный цикл программы.

Не судите строго, только начинаю изучать МК, а микропаскаль потому что с Delphi знаком.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Быстрый заказ печатных плат

Полный цикл производства PCB по низким ценам!

  • x
    мм
Заказать Получить купон на $5.00
Alex    547

Завести таймер, сделать обработку прерываний от него, и в обработчике опрашивать кнопки, устанавливая соответствующие флаги. А в подпрограммах эти флаги уже проверять. Тем самым, обработка нажатий кнопки будет фоновым, независимо от основного цикла.

И если Вы только начали изучать МК, то советую сразу перейти на нормальный язык, например Си. Он не сложнее того-же Delphi. И примеров в сети найдёте больше на нём.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Ок. Спасибо.

Переделал на вот так:

program MyProject;
var NS, NL : Word;
   FL, IsButtonDown, ShortButtonDown, LongButtonDown: Boolean;

{ Declarations section }
procedure Interrupt();
begin
 if INTCON.TMR0IF=1 then begin
  if PORTC.B5 <> IsButtonDown then begin
   if PORTC.B5 then begin
 if not IsButtonDown then begin
  INC(NS);
  if NS>=50  then begin
   NS:=0;
   IsButtonDown:=True;
   ShortButtonDown:=True;
   FL:=True;
  end;
 end else begin
  if not LongButtonDown and FL then begin
   INC(NL);
   if NL>=90 then begin
    LongButtonDown:=True;
    NL:=0;
    FL:=False;
   end;
  end;
 end;
   end else begin
 IsButtonDown:=False;
 ShortButtonDown:=False;
 LongButtonDown:=False;
 NS:=0;
 NL:=0;
 FL:=False;
   end;
  end;
  TMR0   := 200;
  INTCON.TMR0IF:=0;
 end;
end;

begin
 CMCON  := CMCON or 7;
 PORTC := 0;
 TRISC := %11110000;
 T0CS_bit:=0;
 PSA_bit:=0;

 INTCON.GIE:=1;
 INTCON.PEIE:=1;
 INTCON.TMR0IE:=1;
 TMR0  := 200;
 NS:=0;
 NL:=0;
 FL:=False;
 IsButtonDown:=False;
 ShortButtonDown:=False;
 LongButtonDown:=False;

 while True do begin
  if ShortButtonDown then begin
   PORTC.B0:=not PORTC.B0;
   ShortButtonDown:=False;
  end;
  if LongButtonDown then begin
   PORTC.B1:=not PORTC.B1;
   LongButtonDown:=False;
  end;
  PORTC.B2 := PORTC.B5;
 end;
end.

Это просто пример, не конечный вариант, да и с таймером я еле разобрался, но еще далеко не совсем.

В протеусе на портах(B0,B1,B2) лампочки(светодиоды) и кнопка(B5)

Насколько верно я пошел?

А по поводу на чем писать СИ или Паскаль или ассемблер - это по моему без разницы, все от компилятора зависит....

Посмотрим на что способен microPascal от MikroElektronika

А с таймером труба, так и не соображу как он у меня тикает.... т.е. как его правильно настраивать....

Но думаю разберусь....

В интернете информации больше чем много, но все равно как-то тяжело идут МК :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547
СИ или Паскаль или ассемблер - это по моему без разницы
Конечно без разницы, но только вероятности получения помощи на форуме разные :) По этому лучше изначально начинать с языка, которым пользутеся большинство.

Я тоже, когда начинал, знал бейсик и писал на нем программы под ПК, но для МК выбрал именно Си. Оказалось не зря :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547
с паскалем тут никто не дружит
Я такого не говорил :)

Не знаю, сколько тут людей "дружат" с паскалем, но с Си явно больше всех :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Пытаюсь изучить Си... но скажите код в #3 в нужном направлении?

И, если кто может, можно этот код тут переделать на Си, а я изучу свой же код)

Изменено пользователем AS7ti6K

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

...кто может, можно этот код тут переделать на Си...

Ну вот вроде сам и переделал:

unsigned  NS, NL;
char FL, IsButtonDown, ShortButtonDown, LongButtonDown;

void interrupt() iv 0x0004 ics ICS_AUTO {
 if (INTCON.TMR0IF == 1) {
  if (PORTC.B5 != IsButtonDown) {
    if (PORTC.B5) {
	 if (!IsButtonDown) {
	  NS++;
	  if (NS>=50)  {
	   NS = 0;
	   IsButtonDown=1;
	   ShortButtonDown=1;
	   FL=1;
	  };
	 } else {
	  if (!LongButtonDown && FL) {
	   NL++;
	   if (NL >= 90) {
		    LongButtonDown = 1;
		    NL = 0;
		    FL = 0;
	   };
	  };
	 };
    } else {
	 IsButtonDown = 0;
	 ShortButtonDown = 0;
	 LongButtonDown = 0;
	 NS = 0;
	 NL = 0;
	 FL = 0;
    };
  };
  TMR0   = 200;
  INTCON.TMR0IF =0;
 };
}

void main() {
 CMCON  = CMCON || 7;
 PORTC = 0;
 TRISC = 0b11110000;
 T0CS_bit =0;
 PSA_bit =0;
 INTCON.GIE =1;
 INTCON.PEIE =1;
 INTCON.TMR0IE =1;
 TMR0   = 200;
 NS = 0;
 NL = 0;
 FL = 0;
 IsButtonDown = 0;
 ShortButtonDown = 0;
 LongButtonDown = 0;
 while (1) {
  if (ShortButtonDown) {
    PORTC.B0 = !PORTC.B0;
    ShortButtonDown = 0;
  };
  if (LongButtonDown) {
    PORTC.B1 = !PORTC.B1;
    LongButtonDown = 0;
  };
  PORTC.B2 = PORTC.B5;
 };
}

Только почему-то LongButtonDown не срабатывает. В чем ошибся?

Изменено пользователем AS7ti6K

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Ничего не пойму, открыл переделанный мной код в MPLAB X , так там вообще одни ошибки все красным отмечено.... ну и есно ничего не компилится....

Что не хватает? изначально код переделывал в microC PRO for PIC ver 6.0.1. там скомпилировалось, но что-то не работает как надо....

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547

Потому что компилятор компилятору рознь. Они все отличаются синтаксисом. Это раз.

Во вторых. MPLAB X - это не Си-компилятор, а IDE.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 172

unsigned NS, NL;
char FL, IsButtonDown, ShortButtonDown, LongButtonDown;
.......
.......
if (INTCON.TMR0IF == 1) {
if (PORTC.B5 != IsButtonDown) {
 if (PORTC.B5) {
	 if (!IsButtonDown) {

Только почему-то LongButtonDown не срабатывает. В чем ошибся?

а что вы хотели... что просили, то и получили....

1.вот здесь

if (INTCON.TMR0IF == 1)

проверка на равенство единице зачем????

2.с трудом могу себе представить как компилятор здесь

if (PORTC.B5 != IsButtonDown)

интерпретировал попытку сравнивать бит с байтом....

3.что произойдет если между этими проверками

if (PORTC.B5 != IsButtonDown) {
 if (PORTC.B5) {

изменится состояние порта....

4.

	 if (!IsButtonDown) {

какой результат ожидаем?

IsButtonDown=1 -> IsButtonDown=0b00000001->!IsButtonDown=0b11111110 -> (!IsButtonDown)=true

IsButtonDown=0 -> IsButtonDown=0b00000000->!IsButtonDown=0b11111111 -> (!IsButtonDown)=true

PS может структуру надо создать или нет?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Во вторых. MPLAB X - это не Си-компилятор, а IDE.

Ну это я знаю. Я в MPLAB X установил с ихого же сайта компилятор якобы СИшный с их слов, для 8 битных пиков, то что мне и нужно собс-но.

Си получается какой-то разный весь.... вот с паскалем такого вроде не наблюдается... Я после Делфи в микропаскале особых изменений не увидел.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547

Си не разный, стандартный синтаксис (операторы, переменные и т.д..) у всех одинаковый, отличаются они небольшим диалектом - описание конфигов, побитовая работа с портами, объявление обработчика прерываний, и т.д..., всё что касается именно МК.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Это первый мой код на Си. Я так думаю что на Си.... А если честно то я не совсем понял на чем я написал...

1.вот здесь

if (INTCON.TMR0IF == 1)

проверка на равенство единице зачем????

Верно. На паскале я бы написал так:

if INTCON.TMR0IF then ......

И это было бы правильно, в Си подозреваю, что так же можно:

if INTCON.TMR0IF {......

Но мне пока не до оптимизации кода.... и это:

3.что произойдет если между этими проверками

if (PORTC.B5 != IsButtonDown) {

if (PORTC.B5) {

изменится состояние порта....

тоже из этой же оперы. Согласен на все 100 что тут допустил оплох, но это я оставлю на потом.

Мне сейчас нужно быстро въехать в Си, а с оптимизацией потом.

2.с трудом могу себе представить как компилятор здесь

if (PORTC.B5 != IsButtonDown)

интерпретировал попытку сравнивать бит с байтом....

По сути тут не вижу ошибки.... пока не вижу... Т.е. в паскале это нормально.

Тут сравниваются не бит с байтом, а выражения. Я так думаю...

т.е. если на порту есть единица (байт (PORTC.B5) установлен который я проверяю) - первое выражение и второе

через знак не равенства != сравнивается с.... ну нет же в Си Boolевых переменных вот и сравнивается с байтом который 0 - ложь, а все остальное правда.

Другими словами разве в Си нет неявных приведений типов?

4.

if (!IsButtonDown) {

какой результат ожидаем?

А тут разве не это:

if IsButtonDown=0 тогда

?

А тут:

IsButtonDown=1 -> IsButtonDown=0b00000001->!IsButtonDown=0b11111110 -> (!IsButtonDown)=true

IsButtonDown=0 -> IsButtonDown=0b00000000->!IsButtonDown=0b11111111 -> (!IsButtonDown)=true

PS может структуру надо создать или нет?

не совсем понял...

В любом случае Спасибо за ответ, немного въезжаю в как переделать....

Си не разный, стандартный синтаксис (операторы, переменные и т.д..) у всех одинаковый, отличаются они небольшим диалектом - описание конфигов, побитовая работа с портами, объявление обработчика прерываний, и т.д..., всё что касается именно МК.

Ясно, спасибо. Тогда может есть совет на чем остановится?

Сейчас у меня выбор MPLAB X и microC PRO for PIC. У МПЛАБа компилятор с ихого же сайта - XС8. У микроСи вроде как свой.

Мне микроСи чем понравился, тем что некоторые опции устанавливаются в IDE...

а в МПЛАБе я так понял нужно писать руками в коде....

Изменено пользователем AS7ti6K

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547

Как совет - XC. Это тот-же hi-tech, только новее.

Сам я MicroC не пользовался, но в сети его хают, что он очень сильно код разворачивает. С оптимизацией, короче у него проблемы...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 172
4.

if (!IsButtonDown) {

какой результат ожидаем?

А тут разве не это:

if IsButtonDown=0 тогда

?

А тут:

IsButtonDown=1 -> IsButtonDown=0b00000001->!IsButtonDown=0b11111110 -> (!IsButtonDown)=true

IsButtonDown=0 -> IsButtonDown=0b00000000->!IsButtonDown=0b11111111 -> (!IsButtonDown)=true

IsButtonDown у вас описан как байт , и компилятор выполнит именно то что вы от него требуете... те выполнит инверсию , а затем полученный результат проверит на истина или ложь

есть два выхода: или

if (IsButtonDown==0)

или IsButtonDown описать как битовое поле через структуру

typedef union {
struct {
	 unsigned IsButtonDown :1;
	 unsigned ShortButtonDown :1;
	 unsigned  LongButtonDown :1;
	 unsigned bit3 :1;
	 unsigned bit4 :1;
	 unsigned bit5 :1;
	 unsigned bit6 :1;
	 unsigned bit7 :1;
};
} counterbits_t;
static volatile counterbits_t Flag @ 0x030;

тогда

if (!Flag.IsButtonDown) будет корректна

PS как по мне то лучше старый добрый хайтек стандарт, чем ХС8 , тот даже биты понимал http://forum.cxem.ne...00#comment-1626750

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Как совет - XC. Это тот-же hi-tech, только новее.

Ок. Спасибо. Буду пробовать заставить проглотить МПЛАБ сей код)

или IsButtonDown описать как битовое поле через структуру

.....

тогда

if (!Flag.IsButtonDown) будет корректна

Ок. Принял во внимание. Спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547
тот даже биты понимал
Этот тоже понимает :) Это он и есть, один в один. Только добавили ещё туда немного вкусностей типа delay_us/ms.

Библиотечка обработки кнопок - http://forum.chipmk....работка-кнопок/ Может чем поможет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 172
Этот тоже понимает :) Это он и есть, один в один.
Ага, сЧаз...

они не понемам.... достаточно сравнить хедеры на любимоненависный 628-ой описание регистра СТАТУС выделил красным.... хайтек биты понимает без проблем, в ХС8 уже структуры и понимание бит через дефайны....

хайтек:

#ifndef _HTC_H_

#warning Header file pic16f62xa.h included directly. Use #include instead.

#endif

/* header file for the MICROCHIP PIC microcontrollers

PIC16F627A

PIC16F628A

PIC16F648A

*/

#ifndef __PIC16F62XA_H

#define __PIC16F62XA_H

// Special function register definitions

static volatile unsigned char INDF @ 0x00;

static volatile unsigned char TMR0 @ 0x01;

static volatile unsigned char PCL @ 0x02;

static volatile unsigned char STATUS @ 0x03;

static unsigned char FSR @ 0x04;

static volatile unsigned char PORTA @ 0x05;

static volatile unsigned char PORTB @ 0x06;

static volatile unsigned char PCLATH @ 0x0A;

static volatile unsigned char INTCON @ 0x0B;

static volatile unsigned char PIR1 @ 0x0C;

static volatile unsigned char TMR1L @ 0x0E;

static volatile unsigned char TMR1H @ 0x0F;

static volatile unsigned char T1CON @ 0x10;

static volatile unsigned char TMR2 @ 0x11;

static volatile unsigned char T2CON @ 0x12;

static volatile unsigned char CCPR1L @ 0x15;

static volatile unsigned char CCPR1H @ 0x16;

static volatile unsigned char CCP1CON @ 0x17;

static volatile unsigned char RCSTA @ 0x18;

static volatile unsigned char TXREG @ 0x19;

static volatile unsigned char RCREG @ 0x1A;

static volatile unsigned char CMCON @ 0x1F;

static bank1 unsigned char OPTION @ 0x81;

static volatile bank1 unsigned char TRISA @ 0x85;

static volatile bank1 unsigned char TRISB @ 0x86;

static bank1 unsigned char PIE1 @ 0x8C;

static volatile bank1 unsigned char PCON @ 0x8E;

static bank1 unsigned char PR2 @ 0x92;

static volatile bank1 unsigned char TXSTA @ 0x98;

static bank1 unsigned char SPBRG @ 0x99;

static volatile bank1 unsigned char EEDATA @ 0x9A;

static bank1 unsigned char EEADR @ 0x9B;

static volatile bank1 unsigned char EECON1 @ 0x9C;

static volatile bank1 unsigned char EECON2 @ 0x9D;

static bank1 unsigned char VRCON @ 0x9F;

/* Definitions for STATUS register */

static volatile bit CARRY @((unsigned)&STATUS*8)+0;

static volatile bit DC @((unsigned)&STATUS*8)+1;

static volatile bit ZERO @((unsigned)&STATUS*8)+2;

static volatile bit PD @((unsigned)&STATUS*8)+3;

static volatile bit TO @((unsigned)&STATUS*8)+4;

static bit RP0 @((unsigned)&STATUS*8)+5;

static bit RP1 @((unsigned)&STATUS*8)+6;

static bit IRP @((unsigned)&STATUS*8)+7;

/* Definitions for PORTA register */

static volatile bit RA0 @((unsigned)&PORTA*8)+0;

static volatile bit RA1 @((unsigned)&PORTA*8)+1;

static volatile bit RA2 @((unsigned)&PORTA*8)+2;

static volatile bit RA3 @((unsigned)&PORTA*8)+3;

static volatile bit RA4 @((unsigned)&PORTA*8)+4;

static volatile bit RA5 @((unsigned)&PORTA*8)+5;

static volatile bit RA6 @((unsigned)&PORTA*8)+6;

static volatile bit RA7 @((unsigned)&PORTA*8)+7;

/* Definitions for PORTB register */

static volatile bit RB0 @((unsigned)&PORTB*8)+0;

static volatile bit RB1 @((unsigned)&PORTB*8)+1;

static volatile bit RB2 @((unsigned)&PORTB*8)+2;

static volatile bit RB3 @((unsigned)&PORTB*8)+3;

static volatile bit RB4 @((unsigned)&PORTB*8)+4;

static volatile bit RB5 @((unsigned)&PORTB*8)+5;

static volatile bit RB6 @((unsigned)&PORTB*8)+6;

static volatile bit RB7 @((unsigned)&PORTB*8)+7;

/* Definitions for INTCON register */

static volatile bit RBIF @((unsigned)&INTCON*8)+0;

static volatile bit INTF @((unsigned)&INTCON*8)+1;

static volatile bit T0IF @((unsigned)&INTCON*8)+2;

static bit RBIE @((unsigned)&INTCON*8)+3;

static bit INTE @((unsigned)&INTCON*8)+4;

static bit T0IE @((unsigned)&INTCON*8)+5;

static bit PEIE @((unsigned)&INTCON*8)+6;

static bit GIE @((unsigned)&INTCON*8)+7;

/* Definitions for PIR1 register */

static volatile bit TMR1IF @((unsigned)&PIR1*8)+0;

static volatile bit TMR2IF @((unsigned)&PIR1*8)+1;

static volatile bit CCP1IF @((unsigned)&PIR1*8)+2;

static volatile bit TXIF @((unsigned)&PIR1*8)+4;

static volatile bit RCIF @((unsigned)&PIR1*8)+5;

static volatile bit CMIF @((unsigned)&PIR1*8)+6;

static volatile bit EEIF @((unsigned)&PIR1*8)+7;

/* Definitions for T1CON register */

static bit TMR1ON @((unsigned)&T1CON*8)+0;

static bit TMR1CS @((unsigned)&T1CON*8)+1;

static bit T1SYNC @((unsigned)&T1CON*8)+2;

static bit T1OSCEN @((unsigned)&T1CON*8)+3;

static bit T1CKPS0 @((unsigned)&T1CON*8)+4;

static bit T1CKPS1 @((unsigned)&T1CON*8)+5;

/* Definitions for T2CON register */

static bit T2CKPS0 @((unsigned)&T2CON*8)+0;

static bit T2CKPS1 @((unsigned)&T2CON*8)+1;

static bit TMR2ON @((unsigned)&T2CON*8)+2;

static bit TOUTPS0 @((unsigned)&T2CON*8)+3;

static bit TOUTPS1 @((unsigned)&T2CON*8)+4;

static bit TOUTPS2 @((unsigned)&T2CON*8)+5;

static bit TOUTPS3 @((unsigned)&T2CON*8)+6;

/* Definitions for CCP1CON register */

static bit CCP1M0 @((unsigned)&CCP1CON*8)+0;

static bit CCP1M1 @((unsigned)&CCP1CON*8)+1;

static bit CCP1M2 @((unsigned)&CCP1CON*8)+2;

static bit CCP1M3 @((unsigned)&CCP1CON*8)+3;

static volatile bit CCP1Y @((unsigned)&CCP1CON*8)+4;

static volatile bit CCP1X @((unsigned)&CCP1CON*8)+5;

/* Definitions for RCSTA register */

static volatile bit RX9D @((unsigned)&RCSTA*8)+0;

static volatile bit OERR @((unsigned)&RCSTA*8)+1;

static volatile bit FERR @((unsigned)&RCSTA*8)+2;

static bit ADEN @((unsigned)&RCSTA*8)+3;

static bit CREN @((unsigned)&RCSTA*8)+4;

static bit SREN @((unsigned)&RCSTA*8)+5;

static bit RX9 @((unsigned)&RCSTA*8)+6;

static bit SPEN @((unsigned)&RCSTA*8)+7;

/* Definitions for CMCON register */

static bit CM0 @((unsigned)&CMCON*8)+0;

static bit CM1 @((unsigned)&CMCON*8)+1;

static bit CM2 @((unsigned)&CMCON*8)+2;

static bit CIS @((unsigned)&CMCON*8)+3;

static bit C1INV @((unsigned)&CMCON*8)+4;

static bit C2INV @((unsigned)&CMCON*8)+5;

static volatile bit C1OUT @((unsigned)&CMCON*8)+6;

static volatile bit C2OUT @((unsigned)&CMCON*8)+7;

/* Definitions for OPTION register */

static bank1 bit PS0 @((unsigned)&OPTION*8)+0;

static bank1 bit PS1 @((unsigned)&OPTION*8)+1;

static bank1 bit PS2 @((unsigned)&OPTION*8)+2;

static bank1 bit PSA @((unsigned)&OPTION*8)+3;

static bank1 bit T0SE @((unsigned)&OPTION*8)+4;

static bank1 bit T0CS @((unsigned)&OPTION*8)+5;

static bank1 bit INTEDG @((unsigned)&OPTION*8)+6;

static bank1 bit RBPU @((unsigned)&OPTION*8)+7;

/* Definitions for TRISA register */

static volatile bank1 bit TRISA0 @((unsigned)&TRISA*8)+0;

static volatile bank1 bit TRISA1 @((unsigned)&TRISA*8)+1;

static volatile bank1 bit TRISA2 @((unsigned)&TRISA*8)+2;

static volatile bank1 bit TRISA3 @((unsigned)&TRISA*8)+3;

static volatile bank1 bit TRISA4 @((unsigned)&TRISA*8)+4;

static volatile bank1 bit TRISA5 @((unsigned)&TRISA*8)+5;

static volatile bank1 bit TRISA6 @((unsigned)&TRISA*8)+6;

static volatile bank1 bit TRISA7 @((unsigned)&TRISA*8)+7;

/* Definitions for TRISB register */

static volatile bank1 bit TRISB0 @((unsigned)&TRISB*8)+0;

static volatile bank1 bit TRISB1 @((unsigned)&TRISB*8)+1;

static volatile bank1 bit TRISB2 @((unsigned)&TRISB*8)+2;

static volatile bank1 bit TRISB3 @((unsigned)&TRISB*8)+3;

static volatile bank1 bit TRISB4 @((unsigned)&TRISB*8)+4;

static volatile bank1 bit TRISB5 @((unsigned)&TRISB*8)+5;

static volatile bank1 bit TRISB6 @((unsigned)&TRISB*8)+6;

static volatile bank1 bit TRISB7 @((unsigned)&TRISB*8)+7;

/* Definitions for PIE1 register */

static bank1 bit TMR1IE @((unsigned)&PIE1*8)+0;

static bank1 bit TMR2IE @((unsigned)&PIE1*8)+1;

static bank1 bit CCP1IE @((unsigned)&PIE1*8)+2;

static bank1 bit TXIE @((unsigned)&PIE1*8)+4;

static bank1 bit RCIE @((unsigned)&PIE1*8)+5;

static bank1 bit CMIE @((unsigned)&PIE1*8)+6;

static bank1 bit EEIE @((unsigned)&PIE1*8)+7;

/* Definitions for PCON register */

static volatile bank1 bit BOR @((unsigned)&PCON*8)+0;

static volatile bank1 bit POR @((unsigned)&PCON*8)+1;

static bank1 bit OSCF @((unsigned)&PCON*8)+3;

/* Definitions for TXSTA register */

static volatile bank1 bit TX9D @((unsigned)&TXSTA*8)+0;

static volatile bank1 bit TRMT @((unsigned)&TXSTA*8)+1;

static bank1 bit BRGH @((unsigned)&TXSTA*8)+2;

static bank1 bit SYNC @((unsigned)&TXSTA*8)+4;

static bank1 bit TXEN @((unsigned)&TXSTA*8)+5;

static bank1 bit TX9 @((unsigned)&TXSTA*8)+6;

static bank1 bit CSRC @((unsigned)&TXSTA*8)+7;

/* Definitions for EECON1 register */

static volatile bank1 bit RD @((unsigned)&EECON1*8)+0;

static volatile bank1 bit WR @((unsigned)&EECON1*8)+1;

static bank1 bit WREN @((unsigned)&EECON1*8)+2;

static volatile bank1 bit WRERR @((unsigned)&EECON1*8)+3;

/* Definitions for VRCON register */

static bank1 bit VR0 @((unsigned)&VRCON*8)+0;

static bank1 bit VR1 @((unsigned)&VRCON*8)+1;

static bank1 bit VR2 @((unsigned)&VRCON*8)+2;

static bank1 bit VR3 @((unsigned)&VRCON*8)+3;

static bank1 bit VRR @((unsigned)&VRCON*8)+5;

static bank1 bit VROE @((unsigned)&VRCON*8)+6;

static bank1 bit VREN @((unsigned)&VRCON*8)+7;

#define CONFIG_ADDR 0x2007

// Configuration Mask Definitions

#define CONFIG_ADDR 0x2007

// Protection of flash memory

#define PROTECT 0x1FFF

#define UNPROTECT 0x3FFF

// Protection of EEPROM data memory

#define CPD 0x3EFF

#define UNPROTECT 0x3FFF

// Low voltage programming enable

#define LVPEN 0x3FFF

#define LVPDIS 0x3F7F

// Brown out detection enable

#define BOREN 0x3FFF

#define BORDIS 0x3FBF

// Master clear reset pin function

#define MCLREN 0x3FFF

#define MCLRDIS 0x3FDF

// Power up timer enable

#define PWRTEN 0x3FF7

#define PWRTDIS 0x3FFF

// Watchdog timer enable

#define WDTEN 0x3FFF

#define WDTDIS 0x3FFB

// Oscillator configurations

#define RCCLK 0x3FFF

#define RCIO 0x3FFE

#define INTCLK 0x3FFD

#define INTIO 0x3FFC

#define EC 0x3FEF

#define HS 0x3FEE

#define XT 0x3FED

#define LP 0x3FEC

#endif

ХС8:

/*

* This software is developed by Microchip Technology Inc. and its subsidiaries ("Microchip").

*

* Redistribution and use in source and binary forms, with or without modification, are

* permitted provided that the following conditions are met:

*

* 1. Redistributions of source code must retain the above copyright notice, this list of

* conditions and the following disclaimer.

* 2. Redistributions in binary form must reproduce the above copyright notice, this list

* of conditions and the following disclaimer in the documentation and/or other

* materials provided with the distribution.

* 3. All advertising materials mentioning features or use of this software must display

* the following acknowledgement: "This product includes software developed by

* Microchip Technology Inc. and its subsidiaries."

* 4. Microchip's name may not be used to endorse or promote products derived from this

* software without specific prior written permission.

*

* THIS SOFTWARE IS PROVIDED BY MICROCHIP "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES,

* INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR

* PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MICROCHIP BE LIABLE FOR ANY DIRECT, INDIRECT,

* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING BUT NOT LIMITED TO

* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA OR PROFITS; OR BUSINESS

* INTERRUPTION) HOWSOEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT

* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF

* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

*/

#ifndef _PIC16F628A_H_

#define _PIC16F628A_H_

/*

* C Header file for the Microchip PIC Microcontroller

* PIC16F628A

*/

#ifndef __XC8

#warning Header file pic16f628a.h included directly. Use #include instead.

#endif

/*

* Register Definitions

*/

// Register: INDF

extern volatile unsigned char INDF @ 0x000;

#ifndef _LIB_BUILD

asm("INDF equ 00h");

#endif

// Register: TMR0

extern volatile unsigned char TMR0 @ 0x001;

#ifndef _LIB_BUILD

asm("TMR0 equ 01h");

#endif

// Register: PCL

extern volatile unsigned char PCL @ 0x002;

#ifndef _LIB_BUILD

asm("PCL equ 02h");

#endif

// Register: STATUS

extern volatile unsigned char STATUS @ 0x003;

#ifndef _LIB_BUILD

asm("STATUS equ 03h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned C :1;

unsigned DC :1;

unsigned Z :1;

unsigned nPD :1;

unsigned nTO :1;

unsigned RP :2;

unsigned IRP :1;

};

struct {

unsigned :5;

unsigned RP0 :1;

unsigned RP1 :1;

};

struct {

unsigned CARRY :1;

};

struct {

unsigned :2;

unsigned ZERO :1;

};

} STATUSbits_t;

extern volatile STATUSbits_t STATUSbits @ 0x003;

// bitfield macros

#define _STATUS_C_POSN 0x0

#define _STATUS_C_POSITION 0x0

#define _STATUS_C_SIZE 0x1

#define _STATUS_C_LENGTH 0x1

#define _STATUS_C_MASK 0x1

#define _STATUS_DC_POSN 0x1

#define _STATUS_DC_POSITION 0x1

#define _STATUS_DC_SIZE 0x1

#define _STATUS_DC_LENGTH 0x1

#define _STATUS_DC_MASK 0x2

#define _STATUS_Z_POSN 0x2

#define _STATUS_Z_POSITION 0x2

#define _STATUS_Z_SIZE 0x1

#define _STATUS_Z_LENGTH 0x1

#define _STATUS_Z_MASK 0x4

#define _STATUS_nPD_POSN 0x3

#define _STATUS_nPD_POSITION 0x3

#define _STATUS_nPD_SIZE 0x1

#define _STATUS_nPD_LENGTH 0x1

#define _STATUS_nPD_MASK 0x8

#define _STATUS_nTO_POSN 0x4

#define _STATUS_nTO_POSITION 0x4

#define _STATUS_nTO_SIZE 0x1

#define _STATUS_nTO_LENGTH 0x1

#define _STATUS_nTO_MASK 0x10

#define _STATUS_RP_POSN 0x5

#define _STATUS_RP_POSITION 0x5

#define _STATUS_RP_SIZE 0x2

#define _STATUS_RP_LENGTH 0x2

#define _STATUS_RP_MASK 0x60

#define _STATUS_IRP_POSN 0x7

#define _STATUS_IRP_POSITION 0x7

#define _STATUS_IRP_SIZE 0x1

#define _STATUS_IRP_LENGTH 0x1

#define _STATUS_IRP_MASK 0x80

#define _STATUS_RP0_POSN 0x5

#define _STATUS_RP0_POSITION 0x5

#define _STATUS_RP0_SIZE 0x1

#define _STATUS_RP0_LENGTH 0x1

#define _STATUS_RP0_MASK 0x20

#define _STATUS_RP1_POSN 0x6

#define _STATUS_RP1_POSITION 0x6

#define _STATUS_RP1_SIZE 0x1

#define _STATUS_RP1_LENGTH 0x1

#define _STATUS_RP1_MASK 0x40

#define _STATUS_CARRY_POSN 0x0

#define _STATUS_CARRY_POSITION 0x0

#define _STATUS_CARRY_SIZE 0x1

#define _STATUS_CARRY_LENGTH 0x1

#define _STATUS_CARRY_MASK 0x1

#define _STATUS_ZERO_POSN 0x2

#define _STATUS_ZERO_POSITION 0x2

#define _STATUS_ZERO_SIZE 0x1

#define _STATUS_ZERO_LENGTH 0x1

#define _STATUS_ZERO_MASK 0x4

// Register: FSR

extern volatile unsigned char FSR @ 0x004;

#ifndef _LIB_BUILD

asm("FSR equ 04h");

#endif

// Register: PORTA

extern volatile unsigned char PORTA @ 0x005;

#ifndef _LIB_BUILD

asm("PORTA equ 05h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned RA0 :1;

unsigned RA1 :1;

unsigned RA2 :1;

unsigned RA3 :1;

unsigned RA4 :1;

unsigned RA5 :1;

unsigned RA6 :1;

unsigned RA7 :1;

};

} PORTAbits_t;

extern volatile PORTAbits_t PORTAbits @ 0x005;

// bitfield macros

#define _PORTA_RA0_POSN 0x0

#define _PORTA_RA0_POSITION 0x0

#define _PORTA_RA0_SIZE 0x1

#define _PORTA_RA0_LENGTH 0x1

#define _PORTA_RA0_MASK 0x1

#define _PORTA_RA1_POSN 0x1

#define _PORTA_RA1_POSITION 0x1

#define _PORTA_RA1_SIZE 0x1

#define _PORTA_RA1_LENGTH 0x1

#define _PORTA_RA1_MASK 0x2

#define _PORTA_RA2_POSN 0x2

#define _PORTA_RA2_POSITION 0x2

#define _PORTA_RA2_SIZE 0x1

#define _PORTA_RA2_LENGTH 0x1

#define _PORTA_RA2_MASK 0x4

#define _PORTA_RA3_POSN 0x3

#define _PORTA_RA3_POSITION 0x3

#define _PORTA_RA3_SIZE 0x1

#define _PORTA_RA3_LENGTH 0x1

#define _PORTA_RA3_MASK 0x8

#define _PORTA_RA4_POSN 0x4

#define _PORTA_RA4_POSITION 0x4

#define _PORTA_RA4_SIZE 0x1

#define _PORTA_RA4_LENGTH 0x1

#define _PORTA_RA4_MASK 0x10

#define _PORTA_RA5_POSN 0x5

#define _PORTA_RA5_POSITION 0x5

#define _PORTA_RA5_SIZE 0x1

#define _PORTA_RA5_LENGTH 0x1

#define _PORTA_RA5_MASK 0x20

#define _PORTA_RA6_POSN 0x6

#define _PORTA_RA6_POSITION 0x6

#define _PORTA_RA6_SIZE 0x1

#define _PORTA_RA6_LENGTH 0x1

#define _PORTA_RA6_MASK 0x40

#define _PORTA_RA7_POSN 0x7

#define _PORTA_RA7_POSITION 0x7

#define _PORTA_RA7_SIZE 0x1

#define _PORTA_RA7_LENGTH 0x1

#define _PORTA_RA7_MASK 0x80

// Register: PORTB

extern volatile unsigned char PORTB @ 0x006;

#ifndef _LIB_BUILD

asm("PORTB equ 06h");

#endif

// bitfield definitions

typedef 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;

};

} PORTBbits_t;

extern volatile PORTBbits_t PORTBbits @ 0x006;

// bitfield macros

#define _PORTB_RB0_POSN 0x0

#define _PORTB_RB0_POSITION 0x0

#define _PORTB_RB0_SIZE 0x1

#define _PORTB_RB0_LENGTH 0x1

#define _PORTB_RB0_MASK 0x1

#define _PORTB_RB1_POSN 0x1

#define _PORTB_RB1_POSITION 0x1

#define _PORTB_RB1_SIZE 0x1

#define _PORTB_RB1_LENGTH 0x1

#define _PORTB_RB1_MASK 0x2

#define _PORTB_RB2_POSN 0x2

#define _PORTB_RB2_POSITION 0x2

#define _PORTB_RB2_SIZE 0x1

#define _PORTB_RB2_LENGTH 0x1

#define _PORTB_RB2_MASK 0x4

#define _PORTB_RB3_POSN 0x3

#define _PORTB_RB3_POSITION 0x3

#define _PORTB_RB3_SIZE 0x1

#define _PORTB_RB3_LENGTH 0x1

#define _PORTB_RB3_MASK 0x8

#define _PORTB_RB4_POSN 0x4

#define _PORTB_RB4_POSITION 0x4

#define _PORTB_RB4_SIZE 0x1

#define _PORTB_RB4_LENGTH 0x1

#define _PORTB_RB4_MASK 0x10

#define _PORTB_RB5_POSN 0x5

#define _PORTB_RB5_POSITION 0x5

#define _PORTB_RB5_SIZE 0x1

#define _PORTB_RB5_LENGTH 0x1

#define _PORTB_RB5_MASK 0x20

#define _PORTB_RB6_POSN 0x6

#define _PORTB_RB6_POSITION 0x6

#define _PORTB_RB6_SIZE 0x1

#define _PORTB_RB6_LENGTH 0x1

#define _PORTB_RB6_MASK 0x40

#define _PORTB_RB7_POSN 0x7

#define _PORTB_RB7_POSITION 0x7

#define _PORTB_RB7_SIZE 0x1

#define _PORTB_RB7_LENGTH 0x1

#define _PORTB_RB7_MASK 0x80

// Register: PCLATH

extern volatile unsigned char PCLATH @ 0x00A;

#ifndef _LIB_BUILD

asm("PCLATH equ 0Ah");

#endif

// bitfield definitions

typedef union {

struct {

unsigned PCLATH :5;

};

} PCLATHbits_t;

extern volatile PCLATHbits_t PCLATHbits @ 0x00A;

// bitfield macros

#define _PCLATH_PCLATH_POSN 0x0

#define _PCLATH_PCLATH_POSITION 0x0

#define _PCLATH_PCLATH_SIZE 0x5

#define _PCLATH_PCLATH_LENGTH 0x5

#define _PCLATH_PCLATH_MASK 0x1F

// Register: INTCON

extern volatile unsigned char INTCON @ 0x00B;

#ifndef _LIB_BUILD

asm("INTCON equ 0Bh");

#endif

// bitfield definitions

typedef union {

struct {

unsigned RBIF :1;

unsigned INTF :1;

unsigned T0IF :1;

unsigned RBIE :1;

unsigned INTE :1;

unsigned T0IE :1;

unsigned PEIE :1;

unsigned GIE :1;

};

struct {

unsigned :2;

unsigned TMR0IF :1;

unsigned :2;

unsigned TMR0IE :1;

};

} INTCONbits_t;

extern volatile INTCONbits_t INTCONbits @ 0x00B;

// bitfield macros

#define _INTCON_RBIF_POSN 0x0

#define _INTCON_RBIF_POSITION 0x0

#define _INTCON_RBIF_SIZE 0x1

#define _INTCON_RBIF_LENGTH 0x1

#define _INTCON_RBIF_MASK 0x1

#define _INTCON_INTF_POSN 0x1

#define _INTCON_INTF_POSITION 0x1

#define _INTCON_INTF_SIZE 0x1

#define _INTCON_INTF_LENGTH 0x1

#define _INTCON_INTF_MASK 0x2

#define _INTCON_T0IF_POSN 0x2

#define _INTCON_T0IF_POSITION 0x2

#define _INTCON_T0IF_SIZE 0x1

#define _INTCON_T0IF_LENGTH 0x1

#define _INTCON_T0IF_MASK 0x4

#define _INTCON_RBIE_POSN 0x3

#define _INTCON_RBIE_POSITION 0x3

#define _INTCON_RBIE_SIZE 0x1

#define _INTCON_RBIE_LENGTH 0x1

#define _INTCON_RBIE_MASK 0x8

#define _INTCON_INTE_POSN 0x4

#define _INTCON_INTE_POSITION 0x4

#define _INTCON_INTE_SIZE 0x1

#define _INTCON_INTE_LENGTH 0x1

#define _INTCON_INTE_MASK 0x10

#define _INTCON_T0IE_POSN 0x5

#define _INTCON_T0IE_POSITION 0x5

#define _INTCON_T0IE_SIZE 0x1

#define _INTCON_T0IE_LENGTH 0x1

#define _INTCON_T0IE_MASK 0x20

#define _INTCON_PEIE_POSN 0x6

#define _INTCON_PEIE_POSITION 0x6

#define _INTCON_PEIE_SIZE 0x1

#define _INTCON_PEIE_LENGTH 0x1

#define _INTCON_PEIE_MASK 0x40

#define _INTCON_GIE_POSN 0x7

#define _INTCON_GIE_POSITION 0x7

#define _INTCON_GIE_SIZE 0x1

#define _INTCON_GIE_LENGTH 0x1

#define _INTCON_GIE_MASK 0x80

#define _INTCON_TMR0IF_POSN 0x2

#define _INTCON_TMR0IF_POSITION 0x2

#define _INTCON_TMR0IF_SIZE 0x1

#define _INTCON_TMR0IF_LENGTH 0x1

#define _INTCON_TMR0IF_MASK 0x4

#define _INTCON_TMR0IE_POSN 0x5

#define _INTCON_TMR0IE_POSITION 0x5

#define _INTCON_TMR0IE_SIZE 0x1

#define _INTCON_TMR0IE_LENGTH 0x1

#define _INTCON_TMR0IE_MASK 0x20

// Register: PIR1

extern volatile unsigned char PIR1 @ 0x00C;

#ifndef _LIB_BUILD

asm("PIR1 equ 0Ch");

#endif

// bitfield definitions

typedef union {

struct {

unsigned TMR1IF :1;

unsigned TMR2IF :1;

unsigned CCP1IF :1;

unsigned :1;

unsigned TXIF :1;

unsigned RCIF :1;

unsigned CMIF :1;

unsigned EEIF :1;

};

} PIR1bits_t;

extern volatile PIR1bits_t PIR1bits @ 0x00C;

// bitfield macros

#define _PIR1_TMR1IF_POSN 0x0

#define _PIR1_TMR1IF_POSITION 0x0

#define _PIR1_TMR1IF_SIZE 0x1

#define _PIR1_TMR1IF_LENGTH 0x1

#define _PIR1_TMR1IF_MASK 0x1

#define _PIR1_TMR2IF_POSN 0x1

#define _PIR1_TMR2IF_POSITION 0x1

#define _PIR1_TMR2IF_SIZE 0x1

#define _PIR1_TMR2IF_LENGTH 0x1

#define _PIR1_TMR2IF_MASK 0x2

#define _PIR1_CCP1IF_POSN 0x2

#define _PIR1_CCP1IF_POSITION 0x2

#define _PIR1_CCP1IF_SIZE 0x1

#define _PIR1_CCP1IF_LENGTH 0x1

#define _PIR1_CCP1IF_MASK 0x4

#define _PIR1_TXIF_POSN 0x4

#define _PIR1_TXIF_POSITION 0x4

#define _PIR1_TXIF_SIZE 0x1

#define _PIR1_TXIF_LENGTH 0x1

#define _PIR1_TXIF_MASK 0x10

#define _PIR1_RCIF_POSN 0x5

#define _PIR1_RCIF_POSITION 0x5

#define _PIR1_RCIF_SIZE 0x1

#define _PIR1_RCIF_LENGTH 0x1

#define _PIR1_RCIF_MASK 0x20

#define _PIR1_CMIF_POSN 0x6

#define _PIR1_CMIF_POSITION 0x6

#define _PIR1_CMIF_SIZE 0x1

#define _PIR1_CMIF_LENGTH 0x1

#define _PIR1_CMIF_MASK 0x40

#define _PIR1_EEIF_POSN 0x7

#define _PIR1_EEIF_POSITION 0x7

#define _PIR1_EEIF_SIZE 0x1

#define _PIR1_EEIF_LENGTH 0x1

#define _PIR1_EEIF_MASK 0x80

// Register: TMR1

extern volatile unsigned short TMR1 @ 0x00E;

#ifndef _LIB_BUILD

asm("TMR1 equ 0Eh");

#endif

// Register: TMR1L

extern volatile unsigned char TMR1L @ 0x00E;

#ifndef _LIB_BUILD

asm("TMR1L equ 0Eh");

#endif

// Register: TMR1H

extern volatile unsigned char TMR1H @ 0x00F;

#ifndef _LIB_BUILD

asm("TMR1H equ 0Fh");

#endif

// Register: T1CON

extern volatile unsigned char T1CON @ 0x010;

#ifndef _LIB_BUILD

asm("T1CON equ 010h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned TMR1ON :1;

unsigned TMR1CS :1;

unsigned nT1SYNC :1;

unsigned T1OSCEN :1;

unsigned T1CKPS :2;

};

struct {

unsigned :4;

unsigned T1CKPS0 :1;

unsigned T1CKPS1 :1;

};

} T1CONbits_t;

extern volatile T1CONbits_t T1CONbits @ 0x010;

// bitfield macros

#define _T1CON_TMR1ON_POSN 0x0

#define _T1CON_TMR1ON_POSITION 0x0

#define _T1CON_TMR1ON_SIZE 0x1

#define _T1CON_TMR1ON_LENGTH 0x1

#define _T1CON_TMR1ON_MASK 0x1

#define _T1CON_TMR1CS_POSN 0x1

#define _T1CON_TMR1CS_POSITION 0x1

#define _T1CON_TMR1CS_SIZE 0x1

#define _T1CON_TMR1CS_LENGTH 0x1

#define _T1CON_TMR1CS_MASK 0x2

#define _T1CON_nT1SYNC_POSN 0x2

#define _T1CON_nT1SYNC_POSITION 0x2

#define _T1CON_nT1SYNC_SIZE 0x1

#define _T1CON_nT1SYNC_LENGTH 0x1

#define _T1CON_nT1SYNC_MASK 0x4

#define _T1CON_T1OSCEN_POSN 0x3

#define _T1CON_T1OSCEN_POSITION 0x3

#define _T1CON_T1OSCEN_SIZE 0x1

#define _T1CON_T1OSCEN_LENGTH 0x1

#define _T1CON_T1OSCEN_MASK 0x8

#define _T1CON_T1CKPS_POSN 0x4

#define _T1CON_T1CKPS_POSITION 0x4

#define _T1CON_T1CKPS_SIZE 0x2

#define _T1CON_T1CKPS_LENGTH 0x2

#define _T1CON_T1CKPS_MASK 0x30

#define _T1CON_T1CKPS0_POSN 0x4

#define _T1CON_T1CKPS0_POSITION 0x4

#define _T1CON_T1CKPS0_SIZE 0x1

#define _T1CON_T1CKPS0_LENGTH 0x1

#define _T1CON_T1CKPS0_MASK 0x10

#define _T1CON_T1CKPS1_POSN 0x5

#define _T1CON_T1CKPS1_POSITION 0x5

#define _T1CON_T1CKPS1_SIZE 0x1

#define _T1CON_T1CKPS1_LENGTH 0x1

#define _T1CON_T1CKPS1_MASK 0x20

// Register: TMR2

extern volatile unsigned char TMR2 @ 0x011;

#ifndef _LIB_BUILD

asm("TMR2 equ 011h");

#endif

// Register: T2CON

extern volatile unsigned char T2CON @ 0x012;

#ifndef _LIB_BUILD

asm("T2CON equ 012h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned T2CKPS :2;

unsigned TMR2ON :1;

unsigned TOUTPS :4;

};

struct {

unsigned T2CKPS0 :1;

unsigned T2CKPS1 :1;

unsigned :1;

unsigned TOUTPS0 :1;

unsigned TOUTPS1 :1;

unsigned TOUTPS2 :1;

unsigned TOUTPS3 :1;

};

} T2CONbits_t;

extern volatile T2CONbits_t T2CONbits @ 0x012;

// bitfield macros

#define _T2CON_T2CKPS_POSN 0x0

#define _T2CON_T2CKPS_POSITION 0x0

#define _T2CON_T2CKPS_SIZE 0x2

#define _T2CON_T2CKPS_LENGTH 0x2

#define _T2CON_T2CKPS_MASK 0x3

#define _T2CON_TMR2ON_POSN 0x2

#define _T2CON_TMR2ON_POSITION 0x2

#define _T2CON_TMR2ON_SIZE 0x1

#define _T2CON_TMR2ON_LENGTH 0x1

#define _T2CON_TMR2ON_MASK 0x4

#define _T2CON_TOUTPS_POSN 0x3

#define _T2CON_TOUTPS_POSITION 0x3

#define _T2CON_TOUTPS_SIZE 0x4

#define _T2CON_TOUTPS_LENGTH 0x4

#define _T2CON_TOUTPS_MASK 0x78

#define _T2CON_T2CKPS0_POSN 0x0

#define _T2CON_T2CKPS0_POSITION 0x0

#define _T2CON_T2CKPS0_SIZE 0x1

#define _T2CON_T2CKPS0_LENGTH 0x1

#define _T2CON_T2CKPS0_MASK 0x1

#define _T2CON_T2CKPS1_POSN 0x1

#define _T2CON_T2CKPS1_POSITION 0x1

#define _T2CON_T2CKPS1_SIZE 0x1

#define _T2CON_T2CKPS1_LENGTH 0x1

#define _T2CON_T2CKPS1_MASK 0x2

#define _T2CON_TOUTPS0_POSN 0x3

#define _T2CON_TOUTPS0_POSITION 0x3

#define _T2CON_TOUTPS0_SIZE 0x1

#define _T2CON_TOUTPS0_LENGTH 0x1

#define _T2CON_TOUTPS0_MASK 0x8

#define _T2CON_TOUTPS1_POSN 0x4

#define _T2CON_TOUTPS1_POSITION 0x4

#define _T2CON_TOUTPS1_SIZE 0x1

#define _T2CON_TOUTPS1_LENGTH 0x1

#define _T2CON_TOUTPS1_MASK 0x10

#define _T2CON_TOUTPS2_POSN 0x5

#define _T2CON_TOUTPS2_POSITION 0x5

#define _T2CON_TOUTPS2_SIZE 0x1

#define _T2CON_TOUTPS2_LENGTH 0x1

#define _T2CON_TOUTPS2_MASK 0x20

#define _T2CON_TOUTPS3_POSN 0x6

#define _T2CON_TOUTPS3_POSITION 0x6

#define _T2CON_TOUTPS3_SIZE 0x1

#define _T2CON_TOUTPS3_LENGTH 0x1

#define _T2CON_TOUTPS3_MASK 0x40

// Register: CCPR1

extern volatile unsigned short CCPR1 @ 0x015;

#ifndef _LIB_BUILD

asm("CCPR1 equ 015h");

#endif

// Register: CCPR1L

extern volatile unsigned char CCPR1L @ 0x015;

#ifndef _LIB_BUILD

asm("CCPR1L equ 015h");

#endif

// Register: CCPR1H

extern volatile unsigned char CCPR1H @ 0x016;

#ifndef _LIB_BUILD

asm("CCPR1H equ 016h");

#endif

// Register: CCP1CON

extern volatile unsigned char CCP1CON @ 0x017;

#ifndef _LIB_BUILD

asm("CCP1CON equ 017h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned CCP1M :4;

unsigned CCP1Y :1;

unsigned CCP1X :1;

};

struct {

unsigned CCP1M0 :1;

unsigned CCP1M1 :1;

unsigned CCP1M2 :1;

unsigned CCP1M3 :1;

};

} CCP1CONbits_t;

extern volatile CCP1CONbits_t CCP1CONbits @ 0x017;

// bitfield macros

#define _CCP1CON_CCP1M_POSN 0x0

#define _CCP1CON_CCP1M_POSITION 0x0

#define _CCP1CON_CCP1M_SIZE 0x4

#define _CCP1CON_CCP1M_LENGTH 0x4

#define _CCP1CON_CCP1M_MASK 0xF

#define _CCP1CON_CCP1Y_POSN 0x4

#define _CCP1CON_CCP1Y_POSITION 0x4

#define _CCP1CON_CCP1Y_SIZE 0x1

#define _CCP1CON_CCP1Y_LENGTH 0x1

#define _CCP1CON_CCP1Y_MASK 0x10

#define _CCP1CON_CCP1X_POSN 0x5

#define _CCP1CON_CCP1X_POSITION 0x5

#define _CCP1CON_CCP1X_SIZE 0x1

#define _CCP1CON_CCP1X_LENGTH 0x1

#define _CCP1CON_CCP1X_MASK 0x20

#define _CCP1CON_CCP1M0_POSN 0x0

#define _CCP1CON_CCP1M0_POSITION 0x0

#define _CCP1CON_CCP1M0_SIZE 0x1

#define _CCP1CON_CCP1M0_LENGTH 0x1

#define _CCP1CON_CCP1M0_MASK 0x1

#define _CCP1CON_CCP1M1_POSN 0x1

#define _CCP1CON_CCP1M1_POSITION 0x1

#define _CCP1CON_CCP1M1_SIZE 0x1

#define _CCP1CON_CCP1M1_LENGTH 0x1

#define _CCP1CON_CCP1M1_MASK 0x2

#define _CCP1CON_CCP1M2_POSN 0x2

#define _CCP1CON_CCP1M2_POSITION 0x2

#define _CCP1CON_CCP1M2_SIZE 0x1

#define _CCP1CON_CCP1M2_LENGTH 0x1

#define _CCP1CON_CCP1M2_MASK 0x4

#define _CCP1CON_CCP1M3_POSN 0x3

#define _CCP1CON_CCP1M3_POSITION 0x3

#define _CCP1CON_CCP1M3_SIZE 0x1

#define _CCP1CON_CCP1M3_LENGTH 0x1

#define _CCP1CON_CCP1M3_MASK 0x8

// Register: RCSTA

extern volatile unsigned char RCSTA @ 0x018;

#ifndef _LIB_BUILD

asm("RCSTA equ 018h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned RX9D :1;

unsigned OERR :1;

unsigned FERR :1;

unsigned ADEN :1;

unsigned CREN :1;

unsigned SREN :1;

unsigned RX9 :1;

unsigned SPEN :1;

};

struct {

unsigned :3;

unsigned ADDEN :1;

};

} RCSTAbits_t;

extern volatile RCSTAbits_t RCSTAbits @ 0x018;

// bitfield macros

#define _RCSTA_RX9D_POSN 0x0

#define _RCSTA_RX9D_POSITION 0x0

#define _RCSTA_RX9D_SIZE 0x1

#define _RCSTA_RX9D_LENGTH 0x1

#define _RCSTA_RX9D_MASK 0x1

#define _RCSTA_OERR_POSN 0x1

#define _RCSTA_OERR_POSITION 0x1

#define _RCSTA_OERR_SIZE 0x1

#define _RCSTA_OERR_LENGTH 0x1

#define _RCSTA_OERR_MASK 0x2

#define _RCSTA_FERR_POSN 0x2

#define _RCSTA_FERR_POSITION 0x2

#define _RCSTA_FERR_SIZE 0x1

#define _RCSTA_FERR_LENGTH 0x1

#define _RCSTA_FERR_MASK 0x4

#define _RCSTA_ADEN_POSN 0x3

#define _RCSTA_ADEN_POSITION 0x3

#define _RCSTA_ADEN_SIZE 0x1

#define _RCSTA_ADEN_LENGTH 0x1

#define _RCSTA_ADEN_MASK 0x8

#define _RCSTA_CREN_POSN 0x4

#define _RCSTA_CREN_POSITION 0x4

#define _RCSTA_CREN_SIZE 0x1

#define _RCSTA_CREN_LENGTH 0x1

#define _RCSTA_CREN_MASK 0x10

#define _RCSTA_SREN_POSN 0x5

#define _RCSTA_SREN_POSITION 0x5

#define _RCSTA_SREN_SIZE 0x1

#define _RCSTA_SREN_LENGTH 0x1

#define _RCSTA_SREN_MASK 0x20

#define _RCSTA_RX9_POSN 0x6

#define _RCSTA_RX9_POSITION 0x6

#define _RCSTA_RX9_SIZE 0x1

#define _RCSTA_RX9_LENGTH 0x1

#define _RCSTA_RX9_MASK 0x40

#define _RCSTA_SPEN_POSN 0x7

#define _RCSTA_SPEN_POSITION 0x7

#define _RCSTA_SPEN_SIZE 0x1

#define _RCSTA_SPEN_LENGTH 0x1

#define _RCSTA_SPEN_MASK 0x80

#define _RCSTA_ADDEN_POSN 0x3

#define _RCSTA_ADDEN_POSITION 0x3

#define _RCSTA_ADDEN_SIZE 0x1

#define _RCSTA_ADDEN_LENGTH 0x1

#define _RCSTA_ADDEN_MASK 0x8

// Register: TXREG

extern volatile unsigned char TXREG @ 0x019;

#ifndef _LIB_BUILD

asm("TXREG equ 019h");

#endif

// Register: RCREG

extern volatile unsigned char RCREG @ 0x01A;

#ifndef _LIB_BUILD

asm("RCREG equ 01Ah");

#endif

// Register: CMCON

extern volatile unsigned char CMCON @ 0x01F;

#ifndef _LIB_BUILD

asm("CMCON equ 01Fh");

#endif

// bitfield definitions

typedef union {

struct {

unsigned CM :3;

unsigned CIS :1;

unsigned C1INV :1;

unsigned C2INV :1;

unsigned C1OUT :1;

unsigned C2OUT :1;

};

struct {

unsigned CM0 :1;

unsigned CM1 :1;

unsigned CM2 :1;

};

} CMCONbits_t;

extern volatile CMCONbits_t CMCONbits @ 0x01F;

// bitfield macros

#define _CMCON_CM_POSN 0x0

#define _CMCON_CM_POSITION 0x0

#define _CMCON_CM_SIZE 0x3

#define _CMCON_CM_LENGTH 0x3

#define _CMCON_CM_MASK 0x7

#define _CMCON_CIS_POSN 0x3

#define _CMCON_CIS_POSITION 0x3

#define _CMCON_CIS_SIZE 0x1

#define _CMCON_CIS_LENGTH 0x1

#define _CMCON_CIS_MASK 0x8

#define _CMCON_C1INV_POSN 0x4

#define _CMCON_C1INV_POSITION 0x4

#define _CMCON_C1INV_SIZE 0x1

#define _CMCON_C1INV_LENGTH 0x1

#define _CMCON_C1INV_MASK 0x10

#define _CMCON_C2INV_POSN 0x5

#define _CMCON_C2INV_POSITION 0x5

#define _CMCON_C2INV_SIZE 0x1

#define _CMCON_C2INV_LENGTH 0x1

#define _CMCON_C2INV_MASK 0x20

#define _CMCON_C1OUT_POSN 0x6

#define _CMCON_C1OUT_POSITION 0x6

#define _CMCON_C1OUT_SIZE 0x1

#define _CMCON_C1OUT_LENGTH 0x1

#define _CMCON_C1OUT_MASK 0x40

#define _CMCON_C2OUT_POSN 0x7

#define _CMCON_C2OUT_POSITION 0x7

#define _CMCON_C2OUT_SIZE 0x1

#define _CMCON_C2OUT_LENGTH 0x1

#define _CMCON_C2OUT_MASK 0x80

#define _CMCON_CM0_POSN 0x0

#define _CMCON_CM0_POSITION 0x0

#define _CMCON_CM0_SIZE 0x1

#define _CMCON_CM0_LENGTH 0x1

#define _CMCON_CM0_MASK 0x1

#define _CMCON_CM1_POSN 0x1

#define _CMCON_CM1_POSITION 0x1

#define _CMCON_CM1_SIZE 0x1

#define _CMCON_CM1_LENGTH 0x1

#define _CMCON_CM1_MASK 0x2

#define _CMCON_CM2_POSN 0x2

#define _CMCON_CM2_POSITION 0x2

#define _CMCON_CM2_SIZE 0x1

#define _CMCON_CM2_LENGTH 0x1

#define _CMCON_CM2_MASK 0x4

// Register: OPTION_REG

extern volatile unsigned char OPTION_REG @ 0x081;

#ifndef _LIB_BUILD

asm("OPTION_REG equ 081h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned PS :3;

unsigned PSA :1;

unsigned T0SE :1;

unsigned T0CS :1;

unsigned INTEDG :1;

unsigned nRBPU :1;

};

struct {

unsigned PS0 :1;

unsigned PS1 :1;

unsigned PS2 :1;

};

} OPTION_REGbits_t;

extern volatile OPTION_REGbits_t OPTION_REGbits @ 0x081;

// bitfield macros

#define _OPTION_REG_PS_POSN 0x0

#define _OPTION_REG_PS_POSITION 0x0

#define _OPTION_REG_PS_SIZE 0x3

#define _OPTION_REG_PS_LENGTH 0x3

#define _OPTION_REG_PS_MASK 0x7

#define _OPTION_REG_PSA_POSN 0x3

#define _OPTION_REG_PSA_POSITION 0x3

#define _OPTION_REG_PSA_SIZE 0x1

#define _OPTION_REG_PSA_LENGTH 0x1

#define _OPTION_REG_PSA_MASK 0x8

#define _OPTION_REG_T0SE_POSN 0x4

#define _OPTION_REG_T0SE_POSITION 0x4

#define _OPTION_REG_T0SE_SIZE 0x1

#define _OPTION_REG_T0SE_LENGTH 0x1

#define _OPTION_REG_T0SE_MASK 0x10

#define _OPTION_REG_T0CS_POSN 0x5

#define _OPTION_REG_T0CS_POSITION 0x5

#define _OPTION_REG_T0CS_SIZE 0x1

#define _OPTION_REG_T0CS_LENGTH 0x1

#define _OPTION_REG_T0CS_MASK 0x20

#define _OPTION_REG_INTEDG_POSN 0x6

#define _OPTION_REG_INTEDG_POSITION 0x6

#define _OPTION_REG_INTEDG_SIZE 0x1

#define _OPTION_REG_INTEDG_LENGTH 0x1

#define _OPTION_REG_INTEDG_MASK 0x40

#define _OPTION_REG_nRBPU_POSN 0x7

#define _OPTION_REG_nRBPU_POSITION 0x7

#define _OPTION_REG_nRBPU_SIZE 0x1

#define _OPTION_REG_nRBPU_LENGTH 0x1

#define _OPTION_REG_nRBPU_MASK 0x80

#define _OPTION_REG_PS0_POSN 0x0

#define _OPTION_REG_PS0_POSITION 0x0

#define _OPTION_REG_PS0_SIZE 0x1

#define _OPTION_REG_PS0_LENGTH 0x1

#define _OPTION_REG_PS0_MASK 0x1

#define _OPTION_REG_PS1_POSN 0x1

#define _OPTION_REG_PS1_POSITION 0x1

#define _OPTION_REG_PS1_SIZE 0x1

#define _OPTION_REG_PS1_LENGTH 0x1

#define _OPTION_REG_PS1_MASK 0x2

#define _OPTION_REG_PS2_POSN 0x2

#define _OPTION_REG_PS2_POSITION 0x2

#define _OPTION_REG_PS2_SIZE 0x1

#define _OPTION_REG_PS2_LENGTH 0x1

#define _OPTION_REG_PS2_MASK 0x4

// Register: TRISA

extern volatile unsigned char TRISA @ 0x085;

#ifndef _LIB_BUILD

asm("TRISA equ 085h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned TRISA0 :1;

unsigned TRISA1 :1;

unsigned TRISA2 :1;

unsigned TRISA3 :1;

unsigned TRISA4 :1;

unsigned TRISA5 :1;

unsigned TRISA6 :1;

unsigned TRISA7 :1;

};

} TRISAbits_t;

extern volatile TRISAbits_t TRISAbits @ 0x085;

// bitfield macros

#define _TRISA_TRISA0_POSN 0x0

#define _TRISA_TRISA0_POSITION 0x0

#define _TRISA_TRISA0_SIZE 0x1

#define _TRISA_TRISA0_LENGTH 0x1

#define _TRISA_TRISA0_MASK 0x1

#define _TRISA_TRISA1_POSN 0x1

#define _TRISA_TRISA1_POSITION 0x1

#define _TRISA_TRISA1_SIZE 0x1

#define _TRISA_TRISA1_LENGTH 0x1

#define _TRISA_TRISA1_MASK 0x2

#define _TRISA_TRISA2_POSN 0x2

#define _TRISA_TRISA2_POSITION 0x2

#define _TRISA_TRISA2_SIZE 0x1

#define _TRISA_TRISA2_LENGTH 0x1

#define _TRISA_TRISA2_MASK 0x4

#define _TRISA_TRISA3_POSN 0x3

#define _TRISA_TRISA3_POSITION 0x3

#define _TRISA_TRISA3_SIZE 0x1

#define _TRISA_TRISA3_LENGTH 0x1

#define _TRISA_TRISA3_MASK 0x8

#define _TRISA_TRISA4_POSN 0x4

#define _TRISA_TRISA4_POSITION 0x4

#define _TRISA_TRISA4_SIZE 0x1

#define _TRISA_TRISA4_LENGTH 0x1

#define _TRISA_TRISA4_MASK 0x10

#define _TRISA_TRISA5_POSN 0x5

#define _TRISA_TRISA5_POSITION 0x5

#define _TRISA_TRISA5_SIZE 0x1

#define _TRISA_TRISA5_LENGTH 0x1

#define _TRISA_TRISA5_MASK 0x20

#define _TRISA_TRISA6_POSN 0x6

#define _TRISA_TRISA6_POSITION 0x6

#define _TRISA_TRISA6_SIZE 0x1

#define _TRISA_TRISA6_LENGTH 0x1

#define _TRISA_TRISA6_MASK 0x40

#define _TRISA_TRISA7_POSN 0x7

#define _TRISA_TRISA7_POSITION 0x7

#define _TRISA_TRISA7_SIZE 0x1

#define _TRISA_TRISA7_LENGTH 0x1

#define _TRISA_TRISA7_MASK 0x80

// Register: TRISB

extern volatile unsigned char TRISB @ 0x086;

#ifndef _LIB_BUILD

asm("TRISB equ 086h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned TRISB0 :1;

unsigned TRISB1 :1;

unsigned TRISB2 :1;

unsigned TRISB3 :1;

unsigned TRISB4 :1;

unsigned TRISB5 :1;

unsigned TRISB6 :1;

unsigned TRISB7 :1;

};

} TRISBbits_t;

extern volatile TRISBbits_t TRISBbits @ 0x086;

// bitfield macros

#define _TRISB_TRISB0_POSN 0x0

#define _TRISB_TRISB0_POSITION 0x0

#define _TRISB_TRISB0_SIZE 0x1

#define _TRISB_TRISB0_LENGTH 0x1

#define _TRISB_TRISB0_MASK 0x1

#define _TRISB_TRISB1_POSN 0x1

#define _TRISB_TRISB1_POSITION 0x1

#define _TRISB_TRISB1_SIZE 0x1

#define _TRISB_TRISB1_LENGTH 0x1

#define _TRISB_TRISB1_MASK 0x2

#define _TRISB_TRISB2_POSN 0x2

#define _TRISB_TRISB2_POSITION 0x2

#define _TRISB_TRISB2_SIZE 0x1

#define _TRISB_TRISB2_LENGTH 0x1

#define _TRISB_TRISB2_MASK 0x4

#define _TRISB_TRISB3_POSN 0x3

#define _TRISB_TRISB3_POSITION 0x3

#define _TRISB_TRISB3_SIZE 0x1

#define _TRISB_TRISB3_LENGTH 0x1

#define _TRISB_TRISB3_MASK 0x8

#define _TRISB_TRISB4_POSN 0x4

#define _TRISB_TRISB4_POSITION 0x4

#define _TRISB_TRISB4_SIZE 0x1

#define _TRISB_TRISB4_LENGTH 0x1

#define _TRISB_TRISB4_MASK 0x10

#define _TRISB_TRISB5_POSN 0x5

#define _TRISB_TRISB5_POSITION 0x5

#define _TRISB_TRISB5_SIZE 0x1

#define _TRISB_TRISB5_LENGTH 0x1

#define _TRISB_TRISB5_MASK 0x20

#define _TRISB_TRISB6_POSN 0x6

#define _TRISB_TRISB6_POSITION 0x6

#define _TRISB_TRISB6_SIZE 0x1

#define _TRISB_TRISB6_LENGTH 0x1

#define _TRISB_TRISB6_MASK 0x40

#define _TRISB_TRISB7_POSN 0x7

#define _TRISB_TRISB7_POSITION 0x7

#define _TRISB_TRISB7_SIZE 0x1

#define _TRISB_TRISB7_LENGTH 0x1

#define _TRISB_TRISB7_MASK 0x80

// Register: PIE1

extern volatile unsigned char PIE1 @ 0x08C;

#ifndef _LIB_BUILD

asm("PIE1 equ 08Ch");

#endif

// bitfield definitions

typedef union {

struct {

unsigned TMR1IE :1;

unsigned TMR2IE :1;

unsigned CCP1IE :1;

unsigned :1;

unsigned TXIE :1;

unsigned RCIE :1;

unsigned CMIE :1;

unsigned EEIE :1;

};

} PIE1bits_t;

extern volatile PIE1bits_t PIE1bits @ 0x08C;

// bitfield macros

#define _PIE1_TMR1IE_POSN 0x0

#define _PIE1_TMR1IE_POSITION 0x0

#define _PIE1_TMR1IE_SIZE 0x1

#define _PIE1_TMR1IE_LENGTH 0x1

#define _PIE1_TMR1IE_MASK 0x1

#define _PIE1_TMR2IE_POSN 0x1

#define _PIE1_TMR2IE_POSITION 0x1

#define _PIE1_TMR2IE_SIZE 0x1

#define _PIE1_TMR2IE_LENGTH 0x1

#define _PIE1_TMR2IE_MASK 0x2

#define _PIE1_CCP1IE_POSN 0x2

#define _PIE1_CCP1IE_POSITION 0x2

#define _PIE1_CCP1IE_SIZE 0x1

#define _PIE1_CCP1IE_LENGTH 0x1

#define _PIE1_CCP1IE_MASK 0x4

#define _PIE1_TXIE_POSN 0x4

#define _PIE1_TXIE_POSITION 0x4

#define _PIE1_TXIE_SIZE 0x1

#define _PIE1_TXIE_LENGTH 0x1

#define _PIE1_TXIE_MASK 0x10

#define _PIE1_RCIE_POSN 0x5

#define _PIE1_RCIE_POSITION 0x5

#define _PIE1_RCIE_SIZE 0x1

#define _PIE1_RCIE_LENGTH 0x1

#define _PIE1_RCIE_MASK 0x20

#define _PIE1_CMIE_POSN 0x6

#define _PIE1_CMIE_POSITION 0x6

#define _PIE1_CMIE_SIZE 0x1

#define _PIE1_CMIE_LENGTH 0x1

#define _PIE1_CMIE_MASK 0x40

#define _PIE1_EEIE_POSN 0x7

#define _PIE1_EEIE_POSITION 0x7

#define _PIE1_EEIE_SIZE 0x1

#define _PIE1_EEIE_LENGTH 0x1

#define _PIE1_EEIE_MASK 0x80

// Register: PCON

extern volatile unsigned char PCON @ 0x08E;

#ifndef _LIB_BUILD

asm("PCON equ 08Eh");

#endif

// bitfield definitions

typedef union {

struct {

unsigned nBOR :1;

unsigned nPOR :1;

unsigned :1;

unsigned OSCF :1;

};

struct {

unsigned nBO :1;

};

struct {

unsigned nBOD :1;

};

} PCONbits_t;

extern volatile PCONbits_t PCONbits @ 0x08E;

// bitfield macros

#define _PCON_nBOR_POSN 0x0

#define _PCON_nBOR_POSITION 0x0

#define _PCON_nBOR_SIZE 0x1

#define _PCON_nBOR_LENGTH 0x1

#define _PCON_nBOR_MASK 0x1

#define _PCON_nPOR_POSN 0x1

#define _PCON_nPOR_POSITION 0x1

#define _PCON_nPOR_SIZE 0x1

#define _PCON_nPOR_LENGTH 0x1

#define _PCON_nPOR_MASK 0x2

#define _PCON_OSCF_POSN 0x3

#define _PCON_OSCF_POSITION 0x3

#define _PCON_OSCF_SIZE 0x1

#define _PCON_OSCF_LENGTH 0x1

#define _PCON_OSCF_MASK 0x8

#define _PCON_nBO_POSN 0x0

#define _PCON_nBO_POSITION 0x0

#define _PCON_nBO_SIZE 0x1

#define _PCON_nBO_LENGTH 0x1

#define _PCON_nBO_MASK 0x1

#define _PCON_nBOD_POSN 0x0

#define _PCON_nBOD_POSITION 0x0

#define _PCON_nBOD_SIZE 0x1

#define _PCON_nBOD_LENGTH 0x1

#define _PCON_nBOD_MASK 0x1

// Register: PR2

extern volatile unsigned char PR2 @ 0x092;

#ifndef _LIB_BUILD

asm("PR2 equ 092h");

#endif

// Register: TXSTA

extern volatile unsigned char TXSTA @ 0x098;

#ifndef _LIB_BUILD

asm("TXSTA equ 098h");

#endif

// bitfield definitions

typedef union {

struct {

unsigned TX9D :1;

unsigned TRMT :1;

unsigned BRGH :1;

unsigned :1;

unsigned SYNC :1;

unsigned TXEN :1;

unsigned TX9 :1;

unsigned CSRC :1;

};

} TXSTAbits_t;

extern volatile TXSTAbits_t TXSTAbits @ 0x098;

// bitfield macros

#define _TXSTA_TX9D_POSN 0x0

#define _TXSTA_TX9D_POSITION 0x0

#define _TXSTA_TX9D_SIZE 0x1

#define _TXSTA_TX9D_LENGTH 0x1

#define _TXSTA_TX9D_MASK 0x1

#define _TXSTA_TRMT_POSN 0x1

#define _TXSTA_TRMT_POSITION 0x1

#define _TXSTA_TRMT_SIZE 0x1

#define _TXSTA_TRMT_LENGTH 0x1

#define _TXSTA_TRMT_MASK 0x2

#define _TXSTA_BRGH_POSN 0x2

#define _TXSTA_BRGH_POSITION 0x2

#define _TXSTA_BRGH_SIZE 0x1

#define _TXSTA_BRGH_LENGTH 0x1

#define _TXSTA_BRGH_MASK 0x4

#define _TXSTA_SYNC_POSN 0x4

#define _TXSTA_SYNC_POSITION 0x4

#define _TXSTA_SYNC_SIZE 0x1

#define _TXSTA_SYNC_LENGTH 0x1

#define _TXSTA_SYNC_MASK 0x10

#define _TXSTA_TXEN_POSN 0x5

#define _TXSTA_TXEN_POSITION 0x5

#define _TXSTA_TXEN_SIZE 0x1

#define _TXSTA_TXEN_LENGTH 0x1

#define _TXSTA_TXEN_MASK 0x20

#define _TXSTA_TX9_POSN 0x6

#define _TXSTA_TX9_POSITION 0x6

#define _TXSTA_TX9_SIZE 0x1

#define _TXSTA_TX9_LENGTH 0x1

#define _TXSTA_TX9_MASK 0x40

#define _TXSTA_CSRC_POSN 0x7

#define _TXSTA_CSRC_POSITION 0x7

#define _TXSTA_CSRC_SIZE 0x1

#define _TXSTA_CSRC_LENGTH 0x1

#define _TXSTA_CSRC_MASK 0x80

// Register: SPBRG

extern volatile unsigned char SPBRG @ 0x099;

#ifndef _LIB_BUILD

asm("SPBRG equ 099h");

#endif

// Register: EEDATA

extern volatile unsigned char EEDATA @ 0x09A;

#ifndef _LIB_BUILD

asm("EEDATA equ 09Ah");

#endif

// Register: EEADR

extern volatile unsigned char EEADR @ 0x09B;

#ifndef _LIB_BUILD

asm("EEADR equ 09Bh");

#endif

// Register: EECON1

extern volatile unsigned char EECON1 @ 0x09C;

#ifndef _LIB_BUILD

asm("EECON1 equ 09Ch");

#endif

// bitfield definitions

typedef union {

struct {

unsigned RD :1;

unsigned WR :1;

unsigned WREN :1;

unsigned WRERR :1;

};

} EECON1bits_t;

extern volatile EECON1bits_t EECON1bits @ 0x09C;

// bitfield macros

#define _EECON1_RD_POSN 0x0

#define _EECON1_RD_POSITION 0x0

#define _EECON1_RD_SIZE 0x1

#define _EECON1_RD_LENGTH 0x1

#define _EECON1_RD_MASK 0x1

#define _EECON1_WR_POSN 0x1

#define _EECON1_WR_POSITION 0x1

#define _EECON1_WR_SIZE 0x1

#define _EECON1_WR_LENGTH 0x1

#define _EECON1_WR_MASK 0x2

#define _EECON1_WREN_POSN 0x2

#define _EECON1_WREN_POSITION 0x2

#define _EECON1_WREN_SIZE 0x1

#define _EECON1_WREN_LENGTH 0x1

#define _EECON1_WREN_MASK 0x4

#define _EECON1_WRERR_POSN 0x3

#define _EECON1_WRERR_POSITION 0x3

#define _EECON1_WRERR_SIZE 0x1

#define _EECON1_WRERR_LENGTH 0x1

#define _EECON1_WRERR_MASK 0x8

// Register: EECON2

extern volatile unsigned char EECON2 @ 0x09D;

#ifndef _LIB_BUILD

asm("EECON2 equ 09Dh");

#endif

// Register: VRCON

extern volatile unsigned char VRCON @ 0x09F;

#ifndef _LIB_BUILD

asm("VRCON equ 09Fh");

#endif

// bitfield definitions

typedef union {

struct {

unsigned VR :4;

unsigned :1;

unsigned VRR :1;

unsigned VROE :1;

unsigned VREN :1;

};

struct {

unsigned VR0 :1;

unsigned VR1 :1;

unsigned VR2 :1;

unsigned VR3 :1;

};

} VRCONbits_t;

extern volatile VRCONbits_t VRCONbits @ 0x09F;

// bitfield macros

#define _VRCON_VR_POSN 0x0

#define _VRCON_VR_POSITION 0x0

#define _VRCON_VR_SIZE 0x4

#define _VRCON_VR_LENGTH 0x4

#define _VRCON_VR_MASK 0xF

#define _VRCON_VRR_POSN 0x5

#define _VRCON_VRR_POSITION 0x5

#define _VRCON_VRR_SIZE 0x1

#define _VRCON_VRR_LENGTH 0x1

#define _VRCON_VRR_MASK 0x20

#define _VRCON_VROE_POSN 0x6

#define _VRCON_VROE_POSITION 0x6

#define _VRCON_VROE_SIZE 0x1

#define _VRCON_VROE_LENGTH 0x1

#define _VRCON_VROE_MASK 0x40

#define _VRCON_VREN_POSN 0x7

#define _VRCON_VREN_POSITION 0x7

#define _VRCON_VREN_SIZE 0x1

#define _VRCON_VREN_LENGTH 0x1

#define _VRCON_VREN_MASK 0x80

#define _VRCON_VR0_POSN 0x0

#define _VRCON_VR0_POSITION 0x0

#define _VRCON_VR0_SIZE 0x1

#define _VRCON_VR0_LENGTH 0x1

#define _VRCON_VR0_MASK 0x1

#define _VRCON_VR1_POSN 0x1

#define _VRCON_VR1_POSITION 0x1

#define _VRCON_VR1_SIZE 0x1

#define _VRCON_VR1_LENGTH 0x1

#define _VRCON_VR1_MASK 0x2

#define _VRCON_VR2_POSN 0x2

#define _VRCON_VR2_POSITION 0x2

#define _VRCON_VR2_SIZE 0x1

#define _VRCON_VR2_LENGTH 0x1

#define _VRCON_VR2_MASK 0x4

#define _VRCON_VR3_POSN 0x3

#define _VRCON_VR3_POSITION 0x3

#define _VRCON_VR3_SIZE 0x1

#define _VRCON_VR3_LENGTH 0x1

#define _VRCON_VR3_MASK 0x8

/*

* Bit Definitions

*/

#define _DEPRECATED __attribute__((__deprecated__))

#ifndef BANKMASK

#define BANKMASK(addr) ((addr)&07Fh)

#endif

extern volatile __bit ADDEN @ (((unsigned) &RCSTA)*8) + 3;

#define ADDEN_bit BANKMASK(RCSTA), 3

extern volatile __bit ADEN @ (((unsigned) &RCSTA)*8) + 3;

#define ADEN_bit BANKMASK(RCSTA), 3

extern volatile __bit BRGH @ (((unsigned) &TXSTA)*8) + 2;

#define BRGH_bit BANKMASK(TXSTA), 2

extern volatile __bit C1INV @ (((unsigned) &CMCON)*8) + 4;

#define C1INV_bit BANKMASK(CMCON), 4

extern volatile __bit C1OUT @ (((unsigned) &CMCON)*8) + 6;

#define C1OUT_bit BANKMASK(CMCON), 6

extern volatile __bit C2INV @ (((unsigned) &CMCON)*8) + 5;

#define C2INV_bit BANKMASK(CMCON), 5

extern volatile __bit C2OUT @ (((unsigned) &CMCON)*8) + 7;

#define C2OUT_bit BANKMASK(CMCON), 7

extern volatile __bit CARRY @ (((unsigned) &STATUS)*8) + 0;

#define CARRY_bit BANKMASK(STATUS), 0

extern volatile __bit CCP1IE @ (((unsigned) &PIE1)*8) + 2;

#define CCP1IE_bit BANKMASK(PIE1), 2

extern volatile __bit CCP1IF @ (((unsigned) &PIR1)*8) + 2;

#define CCP1IF_bit BANKMASK(PIR1), 2

extern volatile __bit CCP1M0 @ (((unsigned) &CCP1CON)*8) + 0;

#define CCP1M0_bit BANKMASK(CCP1CON), 0

extern volatile __bit CCP1M1 @ (((unsigned) &CCP1CON)*8) + 1;

#define CCP1M1_bit BANKMASK(CCP1CON), 1

extern volatile __bit CCP1M2 @ (((unsigned) &CCP1CON)*8) + 2;

#define CCP1M2_bit BANKMASK(CCP1CON), 2

extern volatile __bit CCP1M3 @ (((unsigned) &CCP1CON)*8) + 3;

#define CCP1M3_bit BANKMASK(CCP1CON), 3

extern volatile __bit CCP1X @ (((unsigned) &CCP1CON)*8) + 5;

#define CCP1X_bit BANKMASK(CCP1CON), 5

extern volatile __bit CCP1Y @ (((unsigned) &CCP1CON)*8) + 4;

#define CCP1Y_bit BANKMASK(CCP1CON), 4

extern volatile __bit CIS @ (((unsigned) &CMCON)*8) + 3;

#define CIS_bit BANKMASK(CMCON), 3

extern volatile __bit CM0 @ (((unsigned) &CMCON)*8) + 0;

#define CM0_bit BANKMASK(CMCON), 0

extern volatile __bit CM1 @ (((unsigned) &CMCON)*8) + 1;

#define CM1_bit BANKMASK(CMCON), 1

extern volatile __bit CM2 @ (((unsigned) &CMCON)*8) + 2;

#define CM2_bit BANKMASK(CMCON), 2

extern volatile __bit CMIE @ (((unsigned) &PIE1)*8) + 6;

#define CMIE_bit BANKMASK(PIE1), 6

extern volatile __bit CMIF @ (((unsigned) &PIR1)*8) + 6;

#define CMIF_bit BANKMASK(PIR1), 6

extern volatile __bit CREN @ (((unsigned) &RCSTA)*8) + 4;

#define CREN_bit BANKMASK(RCSTA), 4

extern volatile __bit CSRC @ (((unsigned) &TXSTA)*8) + 7;

#define CSRC_bit BANKMASK(TXSTA), 7

extern volatile __bit DC @ (((unsigned) &STATUS)*8) + 1;

#define DC_bit BANKMASK(STATUS), 1

extern volatile __bit EEIE @ (((unsigned) &PIE1)*8) + 7;

#define EEIE_bit BANKMASK(PIE1), 7

extern volatile __bit EEIF @ (((unsigned) &PIR1)*8) + 7;

#define EEIF_bit BANKMASK(PIR1), 7

extern volatile __bit FERR @ (((unsigned) &RCSTA)*8) + 2;

#define FERR_bit BANKMASK(RCSTA), 2

extern volatile __bit GIE @ (((unsigned) &INTCON)*8) + 7;

#define GIE_bit BANKMASK(INTCON), 7

extern volatile __bit INTE @ (((unsigned) &INTCON)*8) + 4;

#define INTE_bit BANKMASK(INTCON), 4

extern volatile __bit INTEDG @ (((unsigned) &OPTION_REG)*8) + 6;

#define INTEDG_bit BANKMASK(OPTION_REG), 6

extern volatile __bit INTF @ (((unsigned) &INTCON)*8) + 1;

#define INTF_bit BANKMASK(INTCON), 1

extern volatile __bit IRP @ (((unsigned) &STATUS)*8) + 7;

#define IRP_bit BANKMASK(STATUS), 7

extern volatile __bit OERR @ (((unsigned) &RCSTA)*8) + 1;

#define OERR_bit BANKMASK(RCSTA), 1

extern volatile __bit OSCF @ (((unsigned) &PCON)*8) + 3;

#define OSCF_bit BANKMASK(PCON), 3

extern volatile __bit PEIE @ (((unsigned) &INTCON)*8) + 6;

#define PEIE_bit BANKMASK(INTCON), 6

extern volatile __bit PS0 @ (((unsigned) &OPTION_REG)*8) + 0;

#define PS0_bit BANKMASK(OPTION_REG), 0

extern volatile __bit PS1 @ (((unsigned) &OPTION_REG)*8) + 1;

#define PS1_bit BANKMASK(OPTION_REG), 1

extern volatile __bit PS2 @ (((unsigned) &OPTION_REG)*8) + 2;

#define PS2_bit BANKMASK(OPTION_REG), 2

extern volatile __bit PSA @ (((unsigned) &OPTION_REG)*8) + 3;

#define PSA_bit BANKMASK(OPTION_REG), 3

extern volatile __bit RA0 @ (((unsigned) &PORTA)*8) + 0;

#define RA0_bit BANKMASK(PORTA), 0

extern volatile __bit RA1 @ (((unsigned) &PORTA)*8) + 1;

#define RA1_bit BANKMASK(PORTA), 1

extern volatile __bit RA2 @ (((unsigned) &PORTA)*8) + 2;

#define RA2_bit BANKMASK(PORTA), 2

extern volatile __bit RA3 @ (((unsigned) &PORTA)*8) + 3;

#define RA3_bit BANKMASK(PORTA), 3

extern volatile __bit RA4 @ (((unsigned) &PORTA)*8) + 4;

#define RA4_bit BANKMASK(PORTA), 4

extern volatile __bit RA5 @ (((unsigned) &PORTA)*8) + 5;

#define RA5_bit BANKMASK(PORTA), 5

extern volatile __bit RA6 @ (((unsigned) &PORTA)*8) + 6;

#define RA6_bit BANKMASK(PORTA), 6

extern volatile __bit RA7 @ (((unsigned) &PORTA)*8) + 7;

#define RA7_bit BANKMASK(PORTA), 7

extern volatile __bit RB0 @ (((unsigned) &PORTB)*8) + 0;

#define RB0_bit BANKMASK(PORTB), 0

extern volatile __bit RB1 @ (((unsigned) &PORTB)*8) + 1;

#define RB1_bit BANKMASK(PORTB), 1

extern volatile __bit RB2 @ (((unsigned) &PORTB)*8) + 2;

#define RB2_bit BANKMASK(PORTB), 2

extern volatile __bit RB3 @ (((unsigned) &PORTB)*8) + 3;

#define RB3_bit BANKMASK(PORTB), 3

extern volatile __bit RB4 @ (((unsigned) &PORTB)*8) + 4;

#define RB4_bit BANKMASK(PORTB), 4

extern volatile __bit RB5 @ (((unsigned) &PORTB)*8) + 5;

#define RB5_bit BANKMASK(PORTB), 5

extern volatile __bit RB6 @ (((unsigned) &PORTB)*8) + 6;

#define RB6_bit BANKMASK(PORTB), 6

extern volatile __bit RB7 @ (((unsigned) &PORTB)*8) + 7;

#define RB7_bit BANKMASK(PORTB), 7

extern volatile __bit RBIE @ (((unsigned) &INTCON)*8) + 3;

#define RBIE_bit BANKMASK(INTCON), 3

extern volatile __bit RBIF @ (((unsigned) &INTCON)*8) + 0;

#define RBIF_bit BANKMASK(INTCON), 0

extern volatile __bit RCIE @ (((unsigned) &PIE1)*8) + 5;

#define RCIE_bit BANKMASK(PIE1), 5

extern volatile __bit RCIF @ (((unsigned) &PIR1)*8) + 5;

#define RCIF_bit BANKMASK(PIR1), 5

extern volatile __bit RD @ (((unsigned) &EECON1)*8) + 0;

#define RD_bit BANKMASK(EECON1), 0

extern volatile __bit RP0 @ (((unsigned) &STATUS)*8) + 5;

#define RP0_bit BANKMASK(STATUS), 5

extern volatile __bit RP1 @ (((unsigned) &STATUS)*8) + 6;

#define RP1_bit BANKMASK(STATUS), 6

extern volatile __bit RX9 @ (((unsigned) &RCSTA)*8) + 6;

#define RX9_bit BANKMASK(RCSTA), 6

extern volatile __bit RX9D @ (((unsigned) &RCSTA)*8) + 0;

#define RX9D_bit BANKMASK(RCSTA), 0

extern volatile __bit SPEN @ (((unsigned) &RCSTA)*8) + 7;

#define SPEN_bit BANKMASK(RCSTA), 7

extern volatile __bit SREN @ (((unsigned) &RCSTA)*8) + 5;

#define SREN_bit BANKMASK(RCSTA), 5

extern volatile __bit SYNC @ (((unsigned) &TXSTA)*8) + 4;

#define SYNC_bit BANKMASK(TXSTA), 4

extern volatile __bit T0CS @ (((unsigned) &OPTION_REG)*8) + 5;

#define T0CS_bit BANKMASK(OPTION_REG), 5

extern volatile __bit T0IE @ (((unsigned) &INTCON)*8) + 5;

#define T0IE_bit BANKMASK(INTCON), 5

extern volatile __bit T0IF @ (((unsigned) &INTCON)*8) + 2;

#define T0IF_bit BANKMASK(INTCON), 2

extern volatile __bit T0SE @ (((unsigned) &OPTION_REG)*8) + 4;

#define T0SE_bit BANKMASK(OPTION_REG), 4

extern volatile __bit T1CKPS0 @ (((unsigned) &T1CON)*8) + 4;

#define T1CKPS0_bit BANKMASK(T1CON), 4

extern volatile __bit T1CKPS1 @ (((unsigned) &T1CON)*8) + 5;

#define T1CKPS1_bit BANKMASK(T1CON), 5

extern volatile __bit T1OSCEN @ (((unsigned) &T1CON)*8) + 3;

#define T1OSCEN_bit BANKMASK(T1CON), 3

extern volatile __bit T2CKPS0 @ (((unsigned) &T2CON)*8) + 0;

#define T2CKPS0_bit BANKMASK(T2CON), 0

extern volatile __bit T2CKPS1 @ (((unsigned) &T2CON)*8) + 1;

#define T2CKPS1_bit BANKMASK(T2CON), 1

extern volatile __bit TMR0IE @ (((unsigned) &INTCON)*8) + 5;

#define TMR0IE_bit BANKMASK(INTCON), 5

extern volatile __bit TMR0IF @ (((unsigned) &INTCON)*8) + 2;

#define TMR0IF_bit BANKMASK(INTCON), 2

extern volatile __bit TMR1CS @ (((unsigned) &T1CON)*8) + 1;

#define TMR1CS_bit BANKMASK(T1CON), 1

extern volatile __bit TMR1IE @ (((unsigned) &PIE1)*8) + 0;

#define TMR1IE_bit BANKMASK(PIE1), 0

extern volatile __bit TMR1IF @ (((unsigned) &PIR1)*8) + 0;

#define TMR1IF_bit BANKMASK(PIR1), 0

extern volatile __bit TMR1ON @ (((unsigned) &T1CON)*8) + 0;

#define TMR1ON_bit BANKMASK(T1CON), 0

extern volatile __bit TMR2IE @ (((unsigned) &PIE1)*8) + 1;

#define TMR2IE_bit BANKMASK(PIE1), 1

extern volatile __bit TMR2IF @ (((unsigned) &PIR1)*8) + 1;

#define TMR2IF_bit BANKMASK(PIR1), 1

extern volatile __bit TMR2ON @ (((unsigned) &T2CON)*8) + 2;

#define TMR2ON_bit BANKMASK(T2CON), 2

extern volatile __bit TOUTPS0 @ (((unsigned) &T2CON)*8) + 3;

#define TOUTPS0_bit BANKMASK(T2CON), 3

extern volatile __bit TOUTPS1 @ (((unsigned) &T2CON)*8) + 4;

#define TOUTPS1_bit BANKMASK(T2CON), 4

extern volatile __bit TOUTPS2 @ (((unsigned) &T2CON)*8) + 5;

#define TOUTPS2_bit BANKMASK(T2CON), 5

extern volatile __bit TOUTPS3 @ (((unsigned) &T2CON)*8) + 6;

#define TOUTPS3_bit BANKMASK(T2CON), 6

extern volatile __bit TRISA0 @ (((unsigned) &TRISA)*8) + 0;

#define TRISA0_bit BANKMASK(TRISA), 0

extern volatile __bit TRISA1 @ (((unsigned) &TRISA)*8) + 1;

#define TRISA1_bit BANKMASK(TRISA), 1

extern volatile __bit TRISA2 @ (((unsigned) &TRISA)*8) + 2;

#define TRISA2_bit BANKMASK(TRISA), 2

extern volatile __bit TRISA3 @ (((unsigned) &TRISA)*8) + 3;

#define TRISA3_bit BANKMASK(TRISA), 3

extern volatile __bit TRISA4 @ (((unsigned) &TRISA)*8) + 4;

#define TRISA4_bit BANKMASK(TRISA), 4

extern volatile __bit TRISA5 @ (((unsigned) &TRISA)*8) + 5;

#define TRISA5_bit BANKMASK(TRISA), 5

extern volatile __bit TRISA6 @ (((unsigned) &TRISA)*8) + 6;

#define TRISA6_bit BANKMASK(TRISA), 6

extern volatile __bit TRISA7 @ (((unsigned) &TRISA)*8) + 7;

#define TRISA7_bit BANKMASK(TRISA), 7

extern volatile __bit TRISB0 @ (((unsigned) &TRISB)*8) + 0;

#define TRISB0_bit BANKMASK(TRISB), 0

extern volatile __bit TRISB1 @ (((unsigned) &TRISB)*8) + 1;

#define TRISB1_bit BANKMASK(TRISB), 1

extern volatile __bit TRISB2 @ (((unsigned) &TRISB)*8) + 2;

#define TRISB2_bit BANKMASK(TRISB), 2

extern volatile __bit TRISB3 @ (((unsigned) &TRISB)*8) + 3;

#define TRISB3_bit BANKMASK(TRISB), 3

extern volatile __bit TRISB4 @ (((unsigned) &TRISB)*8) + 4;

#define TRISB4_bit BANKMASK(TRISB), 4

extern volatile __bit TRISB5 @ (((unsigned) &TRISB)*8) + 5;

#define TRISB5_bit BANKMASK(TRISB), 5

extern volatile __bit TRISB6 @ (((unsigned) &TRISB)*8) + 6;

#define TRISB6_bit BANKMASK(TRISB), 6

extern volatile __bit TRISB7 @ (((unsigned) &TRISB)*8) + 7;

#define TRISB7_bit BANKMASK(TRISB), 7

extern volatile __bit TRMT @ (((unsigned) &TXSTA)*8) + 1;

#define TRMT_bit BANKMASK(TXSTA), 1

extern volatile __bit TX9 @ (((unsigned) &TXSTA)*8) + 6;

#define TX9_bit BANKMASK(TXSTA), 6

extern volatile __bit TX9D @ (((unsigned) &TXSTA)*8) + 0;

#define TX9D_bit BANKMASK(TXSTA), 0

extern volatile __bit TXEN @ (((unsigned) &TXSTA)*8) + 5;

#define TXEN_bit BANKMASK(TXSTA), 5

extern volatile __bit TXIE @ (((unsigned) &PIE1)*8) + 4;

#define TXIE_bit BANKMASK(PIE1), 4

extern volatile __bit TXIF @ (((unsigned) &PIR1)*8) + 4;

#define TXIF_bit BANKMASK(PIR1), 4

extern volatile __bit VR0 @ (((unsigned) &VRCON)*8) + 0;

#define VR0_bit BANKMASK(VRCON), 0

extern volatile __bit VR1 @ (((unsigned) &VRCON)*8) + 1;

#define VR1_bit BANKMASK(VRCON), 1

extern volatile __bit VR2 @ (((unsigned) &VRCON)*8) + 2;

#define VR2_bit BANKMASK(VRCON), 2

extern volatile __bit VR3 @ (((unsigned) &VRCON)*8) + 3;

#define VR3_bit BANKMASK(VRCON), 3

extern volatile __bit VREN @ (((unsigned) &VRCON)*8) + 7;

#define VREN_bit BANKMASK(VRCON), 7

extern volatile __bit VROE @ (((unsigned) &VRCON)*8) + 6;

#define VROE_bit BANKMASK(VRCON), 6

extern volatile __bit VRR @ (((unsigned) &VRCON)*8) + 5;

#define VRR_bit BANKMASK(VRCON), 5

extern volatile __bit WR @ (((unsigned) &EECON1)*8) + 1;

#define WR_bit BANKMASK(EECON1), 1

extern volatile __bit WREN @ (((unsigned) &EECON1)*8) + 2;

#define WREN_bit BANKMASK(EECON1), 2

extern volatile __bit WRERR @ (((unsigned) &EECON1)*8) + 3;

#define WRERR_bit BANKMASK(EECON1), 3

extern volatile __bit ZERO @ (((unsigned) &STATUS)*8) + 2;

#define ZERO_bit BANKMASK(STATUS), 2

extern volatile __bit nBO @ (((unsigned) &PCON)*8) + 0;

#define nBO_bit BANKMASK(PCON), 0

extern volatile __bit nBOD @ (((unsigned) &PCON)*8) + 0;

#define nBOD_bit BANKMASK(PCON), 0

extern volatile __bit nBOR @ (((unsigned) &PCON)*8) + 0;

#define nBOR_bit BANKMASK(PCON), 0

extern volatile __bit nPD @ (((unsigned) &STATUS)*8) + 3;

#define nPD_bit BANKMASK(STATUS), 3

extern volatile __bit nPOR @ (((unsigned) &PCON)*8) + 1;

#define nPOR_bit BANKMASK(PCON), 1

extern volatile __bit nRBPU @ (((unsigned) &OPTION_REG)*8) + 7;

#define nRBPU_bit BANKMASK(OPTION_REG), 7

extern volatile __bit nT1SYNC @ (((unsigned) &T1CON)*8) + 2;

#define nT1SYNC_bit BANKMASK(T1CON), 2

extern volatile __bit nTO @ (((unsigned) &STATUS)*8) + 4;

#define nTO_bit BANKMASK(STATUS), 4

#endif // _PIC16F628A_H_

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547

Сча проверим :)

#include "xc.h"

volatile unsigned char counter @ 0x30;
volatile bit counter_bit0 @ (unsigned)&counter*8+0;
volatile bit counter_bit1 @ (unsigned)&counter*8+1;
volatile bit counter_bit3 @ (unsigned)&counter*8+3;

//**************************************************
void main(void){
counter=0x12;
counter_bit0=1;
counter_bit1=0;
counter_bit3=1;
while(1);
}
//**************************************************

Дизасм:

1:				 #include "xc.h"
2:				
3:				
4:				 volatile unsigned char counter @ 0x30;
5:				 volatile bit counter_bit0 @ (unsigned)&counter*8+0;
6:				 volatile bit counter_bit1 @ (unsigned)&counter*8+1;
7:				 volatile bit counter_bit3 @ (unsigned)&counter*8+3;
8:				
9:				
10:			 //**************************************************
11:			 void main(void){
12:			
13:			 counter=0x12;
7FA 3012	 MOVLW 0x12
7FB 00B0	 MOVWF counter
14:			 counter_bit0=1;
7FC 1430	 BSF counter, 0
15:			 counter_bit1=0;
7FD 10B0	 BCF counter, 0x1
16:			 counter_bit3=1;
7FE 15B0	 BSF counter, 0x3
17:			
18:			 while(1);
7FF 2FFF	 GOTO 0x7ff
19:			 }
800 2FFF	 GOTO 0x7ff

Всё отлично :)

И хидеры хайтековские остались, они тоже подключаются автоматом вместе с ХС-шными.

TMR0IF=0;
TMR0IE=1;
GIE=PEIE=1;

18:			    TMR0IF=0;
  7F7    110B	 BCF INTCON, 0x2
19:			    TMR0IE=1;
  7F8    168B	 BSF INTCON, 0x5
20:			   
21:			    GIE=PEIE=1;
  7F9    170B	 BSF INTCON, 0x6
  7FA    1F0B	 BTFSS INTCON, 0x6
  7FB    2FFE	 GOTO 0x7fe
  7FC    178B	 BSF INTCON, 0x7
  7FD    2FFF	 GOTO 0x7ff
  7FE    138B	 BCF INTCON, 0x7

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
IMXO    1 172

Сча проверим :)

......

Всё отлично :)

у меня эта магия не заработала.... :( а внешний вид десятого мрлаба поверг в ступор, плюнул вернулся на 8.9 и хайтек 9.6стд

если не стоит задача юзать 16F1XXX смысла пересаживаться на хс8 вообще не вижу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Библиотечка обработки кнопок - http://forum.chipmk....работка-кнопок/ Может чем поможет.

Да вроде как раз то что нужно :) Спасибо....

Эх.... думаю с Си у меня будут проблемы. Попробовал разобраться в коде по ссылке, и понял, что Си и паскаль очень сильно отличаются.

Еще раз Спасибо! Пошел учить....)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547

Я на 7-ку не смог поставить хайтек, по этому поставил ХС. Смысла, впринципе нет, они одинаковые, за исключением мелочей.

Эх.... думаю с Си у меня будут проблемы
Не будут, я уверен. Вы только его начали изучать и уже такие успехи :i-m_so_happy:

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
AS7ti6K    2

Третий день бьюсь я с этим си и мплабом, что-то вообще никак :(

Если кому не сложно создайте проект для

MPLAB X IDE v1.90 и компилятора XC8 (v1.20) на основе моего кода из #8. для PIC16F630

Пусть будет как есть, не оптимизировано. Мне просто понять структуру, да и вообще как это все в Си и МПЛАБе делается

Сбивают очень сильно знания паскаля, т.н. Delphi...

Т.е. мне не алгоритм сейчас нужен, а вообще принцип организации проектов в си в частности в мплабе.

Никак не могу найти описание Си на русском в инете. Для чего нужны *.h файлы?

Впрочем о h файлах что-то нарыл, но как-то в тумане все пока.

Т.е. в них вроде как описание процедур, но тогда сам код(реализация процедуры) где находится? в одноименном файле *.c?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Alex    547

Вот ваш код из поста №8 под XC8

#include <xc.h>

unsigned NS, NL;
char FL, IsButtonDown, ShortButtonDown, LongButtonDown;
void interrupt _isr(){
if (TMR0IF == 1) {
if (PORTCbits.RC5 != IsButtonDown) {
		 if (PORTCbits.RC5) {
			 if (!IsButtonDown) {
			 NS++;
			 if (NS>=50) {
			 NS = 0;
			 IsButtonDown=1;
			 ShortButtonDown=1;
			 FL=1;
			 };
			 } else {
			 if (!LongButtonDown && FL) {
			 NL++;
			 if (NL >= 90) {
						 LongButtonDown = 1;
						 NL = 0;
						 FL = 0;
			 };
			 };
			 };
		 } else {
			 IsButtonDown = 0;
			 ShortButtonDown = 0;
			 LongButtonDown = 0;
			 NS = 0;
			 NL = 0;
			 FL = 0;
		 };
};
TMR0 = 200;
TMR0IF =0;
};
}
void main() {
CMCON = CMCON || 7;
PORTC = 0;
TRISC = 0b11110000;
T0CS =0;
PSA =0;
GIE =1;
PEIE =1;
TMR0IE =1;
TMR0 = 200;
NS = 0;
NL = 0;
FL = 0;
IsButtonDown = 0;
ShortButtonDown = 0;
LongButtonDown = 0;
while (1) {
if (ShortButtonDown) {
		 PORTCbits.RC0 = !PORTCbits.RC0;
		 ShortButtonDown = 0;
};
if (LongButtonDown) {
		 PORTCbits.RC1 = !PORTCbits.RC1;
		 LongButtonDown = 0;
};
PORTCbits.RC2 = PORTCbits.RC5;
};
}

Проект под МПЛАБ Х:

mplab_x+xc8.rar

PS: Поставьте обычный MPLAB, он намного проще. Этот очень уж слишком навороченный, в нём разбираться будете до усёру...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас