Download presentation
1
Advanced Microcontrollers A practical approach lesson 2 serial communication
2
Microcontrollers A practical approach
Topics Some about architecture Serial communication
3
Microcontrollers serial communication A practical approach
Morse code telegraphy RS-232 (low-speed, implemented by Serial Ports) RS485 Universal Serial Bus (moderate-speed, for connecting computers to peripherals) FireWire Fibre Channel (high-speed, for connecting computers to mass storage devices) InfiniBand (very high speed, broadly comparable in scope to PCI) Serial Attached SCSI Serial ATA PCI Express CAN
4
Microcontrollers serial communication A practical approach
Half duplex Full duplex 5,6,7,8 databits ASCII (0-127) Stop bit(s) Parity DCE (Data communication equipment) DTE(Data terminal Equipment (PC))
5
RS232 connectorA practical approach
(PC)) 9 Pin Connector on a DTE device (PC connection) Male RS232 DB9 Pin Number Direction of signal: 1 Carrier Detect (CD) (from DCE) Incoming signal from a modem 2 Received Data (RD) Incoming Data from a DCE 3 Transmitted Data (TD) Outgoing Data to a DCE 4 Data Terminal Ready (DTR) Outgoing handshaking signal 5 Signal Ground Common reference voltage 6 Data Set Ready (DSR) Incoming handshaking signal 7 Request To Send (RTS) Outgoing flow control signal 8 Clear To Send (CTS) Incoming flow control signal 9 Ring Indicator (RI) (from DCE) Incoming signal from a modem
6
RS232 voltagesA practical approach
Level Transmitter (V) Receiver (V) Space status (0) Mark status (1) Not defined - …
7
RS232 cablelenghtA practical approach
Baud rate Maximum cabellength(m) 19200 15 9600 150 4800 300 2400 900
8
Serial communiaction A practical approach
Topics PIC family Architecture PIC18F2580 Interrupts Serial communication LCD Assembly A very little microcontroller
9
PIC18 UARTpractical approach
• Asynchronous - Auto-wake-up - Auto baud calibration - 13-bit Break character • Synchronous – selectable clock clock polarity
10
Baud ratepractical approach
11
PIC18F2580 pinout
12
Programming Header Functions Main program Initialisation
… Main program Initialisation (function call) Program with function calls in infinite loop
13
Program header /*********************** pic18f2580 **********************************\ | Testprogram_ MPlab C18-compiler | | 11 sept 2012/21 juli J.S.D. Stokkink | | Gebruit van INT0 , TIMER0 , UART , High-iterrupt priority | | WERKING: | | RB0 via schakelaar naar GND geeft INT0 interrupt text to ser| | ial port TX pin | | TIMER0 is ingesteld op ca 1sec | | De Xtal frequentie is 20MHz | | After InitUART() ,putc(c,stdout) and puts("string") | | De op RB2 aangesloten LED zal knipperen met ca 1Hz | \**************************************************************************/
14
Main Program send serial
#include <p18F2580.h> #include <stdio.h> // t.b.v. puts() en putc() functies #pragma config OSC = HS // HS oscillator 20 Mhz #pragma config WDT = OFF // Watchdog Timer disabled #pragma config LVP = OFF // Low Voltage ICSP disabled #pragma config PBADEN = OFF // PortB<4:0> configured as digital I/O // Function-declarations: void InterruptHandlerHigh(void); void InitINT0(void); void InitUART(void); void InitTimer0(void); void EnableHighInterrupts(void); // Globale variabelen: char ch = '0'; //start with character '0' #pragma code void main (void) { TRISC=0; //led's output tx output InitINT0(); InitUART(); InitTimer0(); EnableHighInterrupts(); // run forever: while(1) { //do nothing} }
15
Iniatalisation RB0 #pragma code void InitINT0(void) {
PORTB = 0; // clear PORT B TRISB = 0x01; // RB0=input; RB1-7: output INTCON2bits.RBPU=0; // pull-ups portB enabled INTCON2bits.INTEDG0 =1; // interrupt on rising edge INTCONbits.PEIE = 1; // enable high priority interrupt INTCONbits.INT0IE = 1; // enable INT0 }
16
Initialisation UART void InitUART(void) { // setup UART:
SPBRGH=0; SPBRG=31; // interne clock Fosc=20MHz -> // Baud p error 0,16% TXSTAbits.SYNC = 0; // Enable asynchronous serial port RCSTAbits.SPEN = 1; // Enable asynchronous serial port TXSTAbits.TXEN = 1; // Enable transmission; als puts("\rUART initialised\r"); // To Pc OR BLUETOOTH } For initialisation timer see lesson 1
17
Initialisation interrupt
void EnableHighInterrupts(void) { RCONbits.IPEN = 1; // enable interrupt priority levels INTCONbits.GIEH = 1; // enable all high priority iterrupts } // High priority interrupt vextor: #pragma code high_vector = 0x08 void high_interrupt(void) _asm goto InterruptHandlerHigh _endasm
18
Interrupt Service Routine
#pragma interrupt InterruptHandlerHigh void InterruptHandlerHigh(void) { if(INTCONbits.TMR0IF) // check for TMR0 overflow INTCONbits.TMR0IF = 0; // clear interrupt flag TMR0H = 72; // reload timer TMR0L = 229; // reload timer PORTCbits.RC2 = !PORTCbits.RC2; // toggle LED on RC2 PORTBbits.RB3 = !PORTBbits.RB3; // toggle LED on RC2 ch++; //next character (see ASCII table) putc(ch,stdout); // ASCII-karakter naar PC } if(INTCONbits.INT0IF) // check for INT0 flag INTCONbits.INT0IF =0; // clear interrupt INT0 (RB0) flag puts("\n"); puts("\rRB0 pressed\r"); // to PC
19
Extra part ISR for recieve
if (PIR1bits.RCIF == 1) //check for recieve interrupt { TXSTAbits.TXEN=0; // transmitter off if (RCREG=='a') {PORTCbits.RC0=1; puts(" end \r ");} //LED on if (RCREG=='b') PORTCbits.RC0=0; //read receiverif character = ‘b' LED of TXSTAbits.TXEN=1; // transmitter on PIR1bits.RCIF=0; // interrupt flag off }
20
Assignments lesson 2 Make the send serial example working :
a. check the output on a scoop. (explain) RS232 output and 5v output b.Checkthe output on a terminal(via USB or Bluetooth) (install terminal program on your phone(BT) or PC Make the recieving program working: Connect two boards let them communicate
Similar presentations
© 2024 SlidePlayer.com Inc.
All rights reserved.