1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108
|
#include <mega8535.h>
#include <delay.h>
#include <stdio.h>
#define okp PIND.3
#define voie1p PORTB.0
#define voie2p PINB.1
#define rd_b PORTD.2 // rd_barre
#define wr PORTD.4
#define txe PIND.5
#define rxf_b PIND.0 // rxf_barre : si =0 alors données à lire dans UM245
#define test PORTD.7
#define tempo 10
unsigned char cpt_interrupt,data,voie,adresse1,adresse2;
unsigned char tab[6];
// External Interrupt 1 service routine
interrupt [EXT_INT1] void ext_int1_isr(void)
{
// Reception d'une donnée du projet 3 (front montant)
//test=1;
if (PINA==255) {cpt_interrupt=1;} else {tab[cpt_interrupt]=PINA; cpt_interrupt++;}
if (cpt_interrupt==5) {DDRC=0xFF;
PORTC=255; wr=1;wr=0;
PORTC=tab[1];wr=1;wr=0;
PORTC=tab[2];wr=1;wr=0;
PORTC=tab[3];wr=1;wr=0;
PORTC=tab[4];wr=1;wr=0;
}
//test=0;
}
void main(void)
{
// Port A : en entrée
PORTA=0x00;DDRA=0x00;
// Port B initialization
// Func7=Out Func6=Out Func5=Out Func4=Out Func3=Out Func2=In Func1=In Func0=Out
PORTB=0x00; DDRB=0xF9; // ob11111001
// Port C en entrée
PORTC=0x00; DDRC=0x00;
// Port D initialization
// Func7=Out Func6=In Func5=In Func4=Out Func3=In Func2=Out Func1=Out Func0=In
// State7=T State6=T State5=T State4=0 State3=T State2=0 State1=0 State0=T
PORTD=0x00;
DDRD=0x96; // 0b01100000
// External Interrupt(s) initialization
// INT0: Off - // INT1: On - // INT1 Mode: Rising Edge - // INT2: Off
GICR|=0x80; MCUCR=0x0C;MCUCSR=0x00;GIFR=0x80;
// USART Communication Parameters: 8 Data, 1 Stop, No Parity
// USART Receiver: Off - // USART Transmitter: On
// USART Mode: Asynchronous - // USART Baud rate: 2400
UCSRA=0x00; UCSRB=0x08; UCSRC=0x86; UBRRH=0x01; UBRRL=0xA0;
// Global enable interrupts
#asm("sei")
// Initialiasations
rd_b=1;
wr=0;
adresse1=0;
adresse2=15;
delay_ms(1000);
cpt_interrupt=0;
test=0;
while (1)
{
// Reception des données du PC vers Projet
if (rxf_b==0)
{ // if rxf==0
#asm("cli")
DDRC=0x00;
rd_b=0; rd_b=0; data=PINC; delay_us(10); rd_b=1;delay_us(10); // Reception entete = 170
if (data==170)
{ // if 170
rd_b=0; rd_b=0; voie=PINC; delay_us(10); rd_b=1;delay_us(10);
rd_b=0; rd_b=0; adresse1=PINC; delay_us(10); rd_b=1;delay_us(10);
rd_b=0; rd_b=0; adresse2=PINC; delay_us(10); rd_b=1;delay_us(10);
rd_b=0; rd_b=0; data=PINC; delay_us(10); rd_b=1;delay_us(10);
if (data==225)
{ // if data==225
// Ecriture vers Projet 1
UDR=170; // envoi entete
delay_ms(tempo);
UDR=voie; // envoi N° de la voie (voie N°1)
delay_ms(tempo);
UDR=adresse1; // envoi adresse N°1
delay_ms(tempo);
UDR=adresse2; // envoi adresse N°2
delay_ms(tempo);
UDR=225; // envoi fin de trame
delay_ms(tempo);
#asm("sei")
} // if data==225
} // if 170
} // if rxf==0
}; // while(1)
} // end final |
Partager