Étape 5: Circuit de régulateur
Le scénario du code suivant :
1-activation de la RX/TX de ATMEGA16 MCU.
2-envoyer le code ASCII de la PC ou tablette.
3-traduire le code ASCII de la MCU à une sortie spécifique au port A et port C.
Le fusible bit pour résonateur de 16 Mhz fréquence externe doit être défini sur : haut : 0xC9, basse : 0xFF, comme le montre la photo ci-jointe.
Code :
/*
Résonateur de ATmega16 16MHz fréquence externe
Vitesse de transmission 9600 non parité, 1 Bit d’arrêt, contrôle de flux : aucun
*/
#include < avr/io.h >
#include < inttypes.h >
#include < util/delay.h >
Sub USARTInit(uint16_t ubrr_value)
{
Régler le débit en bauds
UBRRL = ubrr_value ;
UBRRH = (ubrr_value >> 8) ;
UCSRC = (1 << URSEL) | (3 << UCSZ0) ; Définissez le mode asynchrone, sans parité, 1 StopBit
UCSRB = (1 << RXEN) | (1 << TXEN) ; Activer le récepteur et l’émetteur
}
char USARTReadChar()
{
tandis que (! () UCSRA & (1 << RXC)))
{
ne rien faire
}
retourner l’UDR ;
}
Sub USARTWriteChar(char data)
{
tandis que (! () UCSRA & (1 << UDRE)))
{
ne rien faire
}
UDR = données ;
}
Sub main()
{
DDRC = 0XFF ;
DDRA = 0XFF ;
données char ;
USARTInit(103) ; pour 16Mhz et bauds 9600 UBRR = 103 et pour baud 19200 UBRR = 51
while(1)
{
Data=USARTReadChar() ;
Si (données == 0x71) {PORTC = 0b10000000 ; USARTWriteChar('Q');} q en ascii
Si (données == 0x77) {PORTC = 0b00001001 ; USARTWriteChar('w');} w en ascii vers l’avant
Si (données == 0 x 65) {PORTC = 0b01000000 ; USARTWriteChar('e');} e en ascii
Si (données == 0x61) {PORTC = 0b00000011 ; USARTWriteChar('A');} un ascii à gauche
Si (données == 0x73) {PORTC = 0b00000000 ; USARTWriteChar('s');} Cesser de s en ascii
Si (données == 0 x 64) {PORTC = 0b00001100 ; USARTWriteChar('d');} d en ascii à droite
Si (données == 0x7A) {PORTC = 0b00100000 ; USARTWriteChar('z');} z en ascii
Si (données == 0 x 78) {PORTC = 0b10000110 ; USARTWriteChar('x');} x en ascii vers l’arrière
Si (données == 0x99) {PORTC = 0b11110000 ; USARTWriteChar('c');} c en ascii
Si (data==0x69){PORTC=0b00001001;_delay_ms(200) ; PORTC = 0b00000000;} J’ai en ascii vers l’avant
Si (data==0x6A){PORTC=0b00000011;_delay_ms(200) ; PORTC = 0b00000000;} j en ascii à gauche
Si (data==0x6C){PORTC=0b00001100;_delay_ms(200) ; PORTC = 0b00000000;} l en ascii à droite
Si (data==0x6B){PORTC=0b00000110;_delay_ms(200) ; PORTC = 0b00000000;} k en ascii retour
Si (données == 0 x 31) {PORTA = 0b00000001 ; USARTWriteChar('1');} 1 en ascii //2 LED sur
Si (données == 0 x 32) {PORTA = 0b00000010 ; USARTWriteChar('2');} 2 en ascii //4 LED sur
Si (données == 0 x 33) {PORTA = 0b00000111 ; USARTWriteChar('3');} 3 en ascii //6 del
Si (données == 0 x 34) {PORTA = 0b00001000 ; USARTWriteChar('4');} 4 en ascii //Red LED sur
Si (données == 0 x 35) {PORTA = 0b00010000 ; USARTWriteChar('5');} 5 en ascii
Si (données == 0 x 36) {PORTA = 0b00100000 ; USARTWriteChar('6');} 6 en code ascii
Si (données == 0 x 37) {PORTA = 0b01000000 ; USARTWriteChar('7');} 7 en ascii
Si (données == 0 x 38) {PORTA = 0b10000000 ; USARTWriteChar('8');} 8 en ascii
Si (données == 0 x 39) {PORTA = 0b00000000 ; USARTWriteChar('9');} 9 en ascii //All Off
else {}
}
}