Allumage des led
haqdan
-
haqdan -
haqdan -
Bonjour à tous,
Voici quelques temps déjà que je traine sur un petit bout de code pour faire allumer des LED grâce à un micro MSP430, selon la valeur que je reçois après avoir envoyer une commande à un autre module.
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; /* Stop watchdog timer to prevent time out reset*/
P3SEL |= 0x30; // P3.4,5 = USART TXD/RXD
P3DIR |=0x10; /* URXD0 en entrée et toutes les autres pattes de port en sortie*/
P1SEL |= 0x00; // UTILISATION DU PORT1
P1DIR |= 0xFF; //UTILISATION DU PORT1 EN SORTIE
//P1OUT &= 0x00;
P6SEL |= 0x00; //SELECTION DU PORT
P6DIR |= 0x01; //UTILISATION DE P1.O EN SORTIE
P6OUT &=0x00;
ME1 |= UTXE0 + URXE0; /* Enable USART0 TXD/RXD*/
UCTL0 |= CHAR; /* 8-bit character*/
UTCTL0 |= SSEL0; /* UCLK = ACLK = 32.768kHz*/
UBR00 = 0x03; /*32.768kHz/9600 - 3.41*/
UBR10 = 0x00;
UMCTL0 = 0x4A; /* Modulation(4a)*/
UCTL0 &=~SWRST; /*Initialize USART state machine*/
IE1 |= URXIE0; /* Enable USART0 TX interrupt*/
UART_Transmition();
}
void UART_Transmition(void) //boucle de transmission
{
while (!(IFG1 & UTXIFG0)); //Test si le drapeau de l'oscillateur est initialisé
__enable_interrupt(); //Activation de l'interruption
TXBUF0 = 0x01; //Commande de simulation d'appui sur le bonton, dans ce cas les LED vont s'allumés
delay(100); //attente
TXBUF0 = 0x17; //Transmission du caractère "h" en hexa pour une reception du même ordre
delay(10000); //temps d'attente pour laisser à la batterie le temps de répondre
}
#pragma vector=UART0RX_VECTOR //Interruption activer lorsqu'on a quelque chose dans RX
__interrupt void usart0_rx (void)
{
datain = RXBUF0; //Récupération de la réponse dans une variable suceptible d'être utilisé plus tard
if (datain == 0x01){
P1OUT |=BIT5;
P1OUT |=BIT6;}
if (datain == 0x17){ //test qui nous permettra de savoir qu'on a bien envoyer la donnée à la batterie
int k=10;
while(k!=0){
k--;
P6OUT |=BIT0;
delay(1000);
P6OUT &=~BIT0;
delay(1000);
P1OUT|=BIT6;
P1OUT |= 0x1F;
delay(2000);
P1OUT |= BIT5;
delay(2000);
P1OUT&=~BIT6;
P1OUT &=~0x1F;
delay(2000);
P1OUT&=~BIT5;
delay(1000);
}
}
else{ Reception(datain);}
}
void Reception (unsigned int datain)
{
int m=500;
while(m!=0){
m--;
P6OUT |=BIT0;
delay(1000);
P6OUT &=~BIT0;
delay(1000);
}
int Val_pin,k=0; // initialisation des variables à utiliser en locale
while(k<1){
Val_pin = datain && 0x01;
if (Val_pin == 0x01){
P1OUT|= BIT0;
}
else{
P1OUT&=~BIT0;
}
k=k+1;
}
while(k<2){
Val_pin = datain && 0x02;
if (Val_pin == 0x02) {
P1OUT|= BIT1 ;
}
else {
P1OUT &=~BIT1;
}
k=k+1;
}
while(k<3){
Val_pin = datain && 0x04;
if (Val_pin == 0x04) {
P1OUT|= 0x04;
}
else {
P1OUT &=~0x04;
}
k=k+1;
}
while(k<4){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x08);
if (Val_pin ==0x08 ){
P1OUT|= 0x08;
}
else {
P1OUT &=~0x08;
}
k=k+1;
}
while(k<5){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x10);
if (Val_pin == 0x10){
P1OUT|=0x10;
}
else {
P1OUT &=~0x10;
}
k=k+1;
}
while(k<6){
Val_pin = Val_pin || (datain && 0x20);
if (Val_pin == 0x20){
P1OUT &=~0x20;
}
else {
P1OUT |=0x20;
}
k=k+1;
}
while(k<7){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x40);
if (Val_pin == 0x40){
P1OUT &=~0x40;
}
else
{
P1OUT |=0x40;
}
k=k+1;
}
}
le problème c'est que les led ne s'alluments pas si quelqu'un me comprends malgré le gros bordel merci de me répondre
Voici quelques temps déjà que je traine sur un petit bout de code pour faire allumer des LED grâce à un micro MSP430, selon la valeur que je reçois après avoir envoyer une commande à un autre module.
void main( void )
{
WDTCTL = WDTPW + WDTHOLD; /* Stop watchdog timer to prevent time out reset*/
P3SEL |= 0x30; // P3.4,5 = USART TXD/RXD
P3DIR |=0x10; /* URXD0 en entrée et toutes les autres pattes de port en sortie*/
P1SEL |= 0x00; // UTILISATION DU PORT1
P1DIR |= 0xFF; //UTILISATION DU PORT1 EN SORTIE
//P1OUT &= 0x00;
P6SEL |= 0x00; //SELECTION DU PORT
P6DIR |= 0x01; //UTILISATION DE P1.O EN SORTIE
P6OUT &=0x00;
ME1 |= UTXE0 + URXE0; /* Enable USART0 TXD/RXD*/
UCTL0 |= CHAR; /* 8-bit character*/
UTCTL0 |= SSEL0; /* UCLK = ACLK = 32.768kHz*/
UBR00 = 0x03; /*32.768kHz/9600 - 3.41*/
UBR10 = 0x00;
UMCTL0 = 0x4A; /* Modulation(4a)*/
UCTL0 &=~SWRST; /*Initialize USART state machine*/
IE1 |= URXIE0; /* Enable USART0 TX interrupt*/
UART_Transmition();
}
void UART_Transmition(void) //boucle de transmission
{
while (!(IFG1 & UTXIFG0)); //Test si le drapeau de l'oscillateur est initialisé
__enable_interrupt(); //Activation de l'interruption
TXBUF0 = 0x01; //Commande de simulation d'appui sur le bonton, dans ce cas les LED vont s'allumés
delay(100); //attente
TXBUF0 = 0x17; //Transmission du caractère "h" en hexa pour une reception du même ordre
delay(10000); //temps d'attente pour laisser à la batterie le temps de répondre
}
#pragma vector=UART0RX_VECTOR //Interruption activer lorsqu'on a quelque chose dans RX
__interrupt void usart0_rx (void)
{
datain = RXBUF0; //Récupération de la réponse dans une variable suceptible d'être utilisé plus tard
if (datain == 0x01){
P1OUT |=BIT5;
P1OUT |=BIT6;}
if (datain == 0x17){ //test qui nous permettra de savoir qu'on a bien envoyer la donnée à la batterie
int k=10;
while(k!=0){
k--;
P6OUT |=BIT0;
delay(1000);
P6OUT &=~BIT0;
delay(1000);
P1OUT|=BIT6;
P1OUT |= 0x1F;
delay(2000);
P1OUT |= BIT5;
delay(2000);
P1OUT&=~BIT6;
P1OUT &=~0x1F;
delay(2000);
P1OUT&=~BIT5;
delay(1000);
}
}
else{ Reception(datain);}
}
void Reception (unsigned int datain)
{
int m=500;
while(m!=0){
m--;
P6OUT |=BIT0;
delay(1000);
P6OUT &=~BIT0;
delay(1000);
}
int Val_pin,k=0; // initialisation des variables à utiliser en locale
while(k<1){
Val_pin = datain && 0x01;
if (Val_pin == 0x01){
P1OUT|= BIT0;
}
else{
P1OUT&=~BIT0;
}
k=k+1;
}
while(k<2){
Val_pin = datain && 0x02;
if (Val_pin == 0x02) {
P1OUT|= BIT1 ;
}
else {
P1OUT &=~BIT1;
}
k=k+1;
}
while(k<3){
Val_pin = datain && 0x04;
if (Val_pin == 0x04) {
P1OUT|= 0x04;
}
else {
P1OUT &=~0x04;
}
k=k+1;
}
while(k<4){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x08);
if (Val_pin ==0x08 ){
P1OUT|= 0x08;
}
else {
P1OUT &=~0x08;
}
k=k+1;
}
while(k<5){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x10);
if (Val_pin == 0x10){
P1OUT|=0x10;
}
else {
P1OUT &=~0x10;
}
k=k+1;
}
while(k<6){
Val_pin = Val_pin || (datain && 0x20);
if (Val_pin == 0x20){
P1OUT &=~0x20;
}
else {
P1OUT |=0x20;
}
k=k+1;
}
while(k<7){
Val_pin = Val_pin && 0x00;
Val_pin = Val_pin || (datain && 0x40);
if (Val_pin == 0x40){
P1OUT &=~0x40;
}
else
{
P1OUT |=0x40;
}
k=k+1;
}
}
le problème c'est que les led ne s'alluments pas si quelqu'un me comprends malgré le gros bordel merci de me répondre
A voir également:
- Allumage des led
- Ecran noir allumage pc - Guide
- Led vga carte mere - Forum Matériel & Système
- Dram led rouge - Forum Matériel & Système
- Prix réparation rétroéclairage tv led ✓ - Forum Téléviseurs
- Forcer allumage pc - Guide