Bonjour à tous,
J'aimerais apprendre à manipuler l'interface série du microcontrôleur AT89S2051 pour faire communiquer mes montages avec mon PC.
Dans un premier temps, j'aimerais simplement envoyer une donnée à mon microcontrôleur par le biais du PC, puis renvoyer cette donnée vers le PC...à partir du microcontrôleur (concept de l'echo ) avec les paramètres suivants : Mode 1, 9600bds(avec générateur interne), pas de parité, 1 bit d'arrêt.
Sauriez-vous comment faire ?
J'ai cherché dans la doc du microcontrôleur, il y a des infos, dont certaines nous renvoient sur un document "UART programming examples". J'ai tenté de compiler un exemple (en C) à partir duquel je pourrais partir, mais certains registres ne sont pas définis, et introuvables dans la doc du micro...
Et voici les erreurs que j'obtiens :Code:/** * @file $RCSfile: uart_int_brg.c,v $ * Copyright (c) 2004 Atmel. * Please read file license.txt for copyright notice. * @brief This file is an example to use uart with internal baud rate * generator. * UART will echo a received data. * This file can be parsed by Doxygen for automatic documentation * generation. * Put here the functional description of this file within the software * architecture of your program. * @version $Revision: 1.0 $ $Name: $ */ /* @section I N C L U D E S */ #include <AT892051.H> char uart_data; /** * FUNCTION_PURPOSE: This file set up uart in mode 1 (8 bits uart) with * internal baud rate generator. * FUNCTION_INPUTS: void * FUNCTION_OUTPUTS: void */ void main (void) { CKCON0 = 0x7F; SCON = 0x54; /* uart in mode 1 (8 bit), REN=1 */ BDRCON &=0xEE; /* BRR=0; SRC=0; */ BDRCON |=0x0E; /* TBCK=1;RBCK=1; SPD=1 */ BRL=0xFD; /* 9600 Bds at 11.059MHz */ ES = 1; /* Enable serial interrupt*/ EA = 1; /* Enable global interrupt */ BDRCON |=0x10; /* Baud rate generator run*/ while(1); /* endless */ } /** * FUNCTION_PURPOSE: serial interrupt, echo received data. * FUNCTION_INPUTS: P3.0(RXD) serial input * FUNCTION_OUTPUTS: P3.1(TXD) serial output */ void serial_IT(void) interrupt 4 { if (RI == 1) { /* if reception occur */ RI = 0; /* clear reception flag for next reception */ uart_data = SBUF; /* Read receive data */ SBUF = uart_data; /* Send back same data on uart*/ } else TI = 0; /* if emission occur */ /* clear emission flag for next emission*/ }
Build target 'Target 1'
compiling serie.c...
SERIE.C(27): error C202: 'CKCON0': undefined identifier
SERIE.C(29): error C202: 'BDRCON': undefined identifier
SERIE.C(30): error C202: 'BDRCON': undefined identifier
SERIE.C(31): error C202: 'BRL': undefined identifier
SERIE.C(34): error C202: 'BDRCON': undefined identifier
Target not created
Je pense que le code a été fait pour un autre microcontrôleur. Ces registres ont-ils leurs équivalents sur le 89C2051 ?
Merci,
Tony
-----