S
saeed_pk
Guest
Jeg va forsøgt BitBang fremgangsmåden i prøver af PICC om PIC16F877A, da jeg forsøgte at udnyttede det til PIC18F452 det ikke virkerCompiler Brugt:
Hi-Tech PICC for 16F877A
Hi-Tech PICC-18 for 18F452
Please help ..
Code:/ *
* Serial port driver (bruger bit-slå)
* For 16Cxx række dele.
*
* VIGTIGT: Compile denne fil med Fuld optimering
*
* Copyright (C) 1996 Hi-Tech Software.
* Let udloddes.
* /
# include <pic.h>
/ *
* Tunable parametre
* // * Sende og modtage havn bits * /
# define SERIAL_PORT PORTC
# define SERIAL_TRIS TRISC
# define TX_PIN 6
# define RX_PIN 7/ * Xtal frekvens * /
# define XTAL 4000000/ * Baudhastighed * /
# define BRATE 9600/ * Du må ikke ændre noget som helst andet * /
# define Scaler 10000000
# define ITIME 4 * Scaler / XTAL / * Instruction cyklustid * /
# hvis BRATE> 1200
# define DLY 3 / * cyklusser pr null loop * /
# define TX_OHEAD 13 / * overhead cyklusser pr loop * /
# ellers
# define DLY 9 / * cyklusser pr null loop * /
# define TX_OHEAD 14
# endif
# define RX_OHEAD 12 / * Modtagers overhead pr loop * /# define DELAY (ohead) (((Scaler / BRATE) - (ohead * ITIME)) / (DLY * ITIME))statisk bit TxData @ (usignerede) & SERIAL_PORT * 8 TX_PIN; / * Kort TxData til bens * /
statisk bit RxData @ (usignerede) & SERIAL_PORT * 8 RX_PIN; / * Kort RxData til bens * /
# define INIT_PORT SERIAL_TRIS = 1 <<RX_PIN / * oprettet I / O retning * /void
kup (char c)
(
usignerede CHAR bitno;
# hvis BRATE> 1200
usignerede CHAR dly;
# ellers
usignerede int dly;
# endifINIT_PORT;
TxData = 0; / * start bit * /
bitno = 12;
do (
dly = forsinkelse (TX_OHEAD); / * vente en smule tid * /
gøre
/ * Venter i forsinkelse loop * /;
mens (- dly);
if (c & 1)
TxData = 1;
if (! (C & 1))
TxData = 0;
c = (c>> 1) | 0x80;
) Mens (- bitno);
NOP ();
)CHAR
getch (void)
(
usignerede char c, bitno;
# hvis BRATE> 1200
usignerede CHAR dly;
# ellers
usignerede int dly;
# endiffor (; (
while (RxData)
fortsætte; / * vente for start bit * /
dly = DELAY (3) / 2;
gøre
/ * Venter i forsinkelse loop * /;
mens (- dly);
if (RxData)
fortsætte; / * twas bare støj * /
bitno = 8;
c = 0;
do (
dly = forsinkelse (RX_OHEAD);
gøre
/ * Venter i forsinkelse loop * /;
mens (- dly);
c = (c>> 1) | (RxData <<7);
) Mens (- bitno);
tilbagevenden c;
)
)CHAR
getche (void)
(
char c;kup (c = getch ());
tilbagevenden c;
)
Hi-Tech PICC for 16F877A
Hi-Tech PICC-18 for 18F452
Please help ..
Code:/ *
* Serial port driver (bruger bit-slå)
* For 16Cxx række dele.
*
* VIGTIGT: Compile denne fil med Fuld optimering
*
* Copyright (C) 1996 Hi-Tech Software.
* Let udloddes.
* /
# include <pic.h>
/ *
* Tunable parametre
* // * Sende og modtage havn bits * /
# define SERIAL_PORT PORTC
# define SERIAL_TRIS TRISC
# define TX_PIN 6
# define RX_PIN 7/ * Xtal frekvens * /
# define XTAL 4000000/ * Baudhastighed * /
# define BRATE 9600/ * Du må ikke ændre noget som helst andet * /
# define Scaler 10000000
# define ITIME 4 * Scaler / XTAL / * Instruction cyklustid * /
# hvis BRATE> 1200
# define DLY 3 / * cyklusser pr null loop * /
# define TX_OHEAD 13 / * overhead cyklusser pr loop * /
# ellers
# define DLY 9 / * cyklusser pr null loop * /
# define TX_OHEAD 14
# endif
# define RX_OHEAD 12 / * Modtagers overhead pr loop * /# define DELAY (ohead) (((Scaler / BRATE) - (ohead * ITIME)) / (DLY * ITIME))statisk bit TxData @ (usignerede) & SERIAL_PORT * 8 TX_PIN; / * Kort TxData til bens * /
statisk bit RxData @ (usignerede) & SERIAL_PORT * 8 RX_PIN; / * Kort RxData til bens * /
# define INIT_PORT SERIAL_TRIS = 1 <<RX_PIN / * oprettet I / O retning * /void
kup (char c)
(
usignerede CHAR bitno;
# hvis BRATE> 1200
usignerede CHAR dly;
# ellers
usignerede int dly;
# endifINIT_PORT;
TxData = 0; / * start bit * /
bitno = 12;
do (
dly = forsinkelse (TX_OHEAD); / * vente en smule tid * /
gøre
/ * Venter i forsinkelse loop * /;
mens (- dly);
if (c & 1)
TxData = 1;
if (! (C & 1))
TxData = 0;
c = (c>> 1) | 0x80;
) Mens (- bitno);
NOP ();
)CHAR
getch (void)
(
usignerede char c, bitno;
# hvis BRATE> 1200
usignerede CHAR dly;
# ellers
usignerede int dly;
# endiffor (; (
while (RxData)
fortsætte; / * vente for start bit * /
dly = DELAY (3) / 2;
gøre
/ * Venter i forsinkelse loop * /;
mens (- dly);
if (RxData)
fortsætte; / * twas bare støj * /
bitno = 8;
c = 0;
do (
dly = forsinkelse (RX_OHEAD);
gøre
/ * Venter i forsinkelse loop * /;
mens (- dly);
c = (c>> 1) | (RxData <<7);
) Mens (- bitno);
tilbagevenden c;
)
)CHAR
getche (void)
(
char c;kup (c = getch ());
tilbagevenden c;
)