Application Note. 8051 Microcontrollers. SPI Program Examples. 1. Introduction. 1.1 References



Similar documents
8-bit Microcontroller. Application Note. AVR222: 8-point Moving Average Filter

AVR305: Half Duplex Compact Software UART. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

8-bit RISC Microcontroller. Application Note. AVR182: Zero Cross Detector

AVR317: Using the Master SPI Mode of the USART module. 8-bit Microcontrollers. Application Note. Features. Introduction

AVR319: Using the USI module for SPI communication. 8-bit Microcontrollers. Application Note. Features. Introduction

AT89C5131A Starter Kit... Software User Guide

AVR106: C functions for reading and writing to Flash memory. 8-bit Microcontrollers. Application Note. Features. Introduction

8-bit Microcontroller. Application Note. AVR415: RC5 IR Remote Control Transmitter. Features. Introduction. Figure 1.

8-bit RISC Microcontroller. Application Note. AVR236: CRC Check of Program Memory

How to Calculate the Capacitor of the Reset Input of a C51 Microcontroller 80C51. Application Note. Microcontrollers. Introduction

AVR034: Mixing C and Assembly Code with IAR Embedded Workbench for AVR. 8-bit Microcontroller. Application Note. Features.

AT91 ARM Thumb Microcontrollers. Application Note. Interfacing a PC Card to an AT91RM9200-DK. Introduction. Hardware Interface

8-bit Microcontroller. Application Note. AVR400: Low Cost A/D Converter

8-bit Microcontroller. Application Note. AVR314: DTMF Generator

Quick Start Guide. CAN Microcontrollers. ATADAPCAN01 - STK501 CAN Extension. Requirements

Application Note. C51 Bootloaders. C51 General Information about Bootloader and In System Programming. Overview. Abreviations

General Porting Considerations. Memory EEPROM XRAM

Tag Tuning/RFID. Application Note. Tag Tuning. Introduction. Antenna Equivalent Circuit

8-bit Microcontroller. Application Note. AVR201: Using the AVR Hardware Multiplier

AVR245: Code Lock with 4x4 Keypad and I2C LCD. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR030: Getting Started with IAR Embedded Workbench for Atmel AVR. 8-bit Microcontrollers. Application Note. Features.

8-bit Microcontroller. Application Note. AVR105: Power Efficient High Endurance Parameter Storage in Flash Memory

AT91 ARM Thumb Microcontrollers. AT91SAM CAN Bootloader. AT91SAM CAN Bootloader User Notes. 1. Description. 2. Key Features

Flash Microcontroller. Memory Organization. Memory Organization

8-bit Microcontroller. Application. Note. AVR204: BCD Arithmetics. Features. Introduction. 16-bit Binary to 5-digit BCD Conversion bin2bcd16

AVR32100: Using the AVR32 USART. 32-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR134: Real Time Clock (RTC) using the Asynchronous Timer. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

Application Note. Migrating from RS-232 to USB Bridge Specification USB Microcontrollers. Doc Control. References. Abbreviations

AVR32110: Using the AVR32 Timer/Counter. 32-bit Microcontrollers. Application Note. Features. 1 Introduction

8-bit RISC Microcontroller. Application Note. AVR155: Accessing an I 2 C LCD Display using the AVR 2-wire Serial Interface

AVR241: Direct driving of LCD display using general IO. 8-bit Microcontrollers. Application Note. Features. Introduction AVR

3-output Laser Driver for HD-DVD/ Blu-ray/DVD/ CD-ROM ATR0885. Preliminary. Summary

USB 2.0 Full-Speed Host/Function Processor AT43USB370. Summary. Features. Overview

Application Note. 8-bit Microcontrollers. AVR091: Replacing AT90S2313 by ATtiny2313. Features. Introduction

8-bit Microcontroller. Application Note. AVR461: Quick Start Guide for the Embedded Internet Toolkit. Introduction. System Requirements

AVR1309: Using the XMEGA SPI. 8-bit Microcontrollers. Application Note. Features. 1 Introduction SCK MOSI MISO SS

AVR442: PC Fan Control using ATtiny13. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

8051 Serial Port. Crystal TXD. I/O Device RXD. Embedded Systems Peripherals

AVR120: Characterization and Calibration of the ADC on an AVR. 8-bit Microcontrollers. Application Note. Features. Introduction

8-bit Microcontroller. Application Note. AVR134: Real-Time Clock (RTC) using the Asynchronous Timer. Features. Theory of Operation.

8-bit Microcontroller with 16K/ 32K Bytes Flash AT89C51RB2 AT89C51RC2

2-wire Serial EEPROM AT24C1024. Advance Information

USB Test Environment ATUSBTEST- SS7400. Summary

Application Note. USB Mass Storage Device Implementation. USB Microcontrollers. References. Abbreviations. Supported Controllers

2-Wire Serial EEPROM AT24C32 AT24C64. 2-Wire, 32K Serial E 2 PROM. Features. Description. Pin Configurations. 32K (4096 x 8) 64K (8192 x 8)

8-bit Microcontroller. Application Note. AVR410: RC5 IR Remote Control Receiver

Two-wire Automotive Serial EEPROM AT24C01A AT24C02 AT24C04 AT24C08 (1) AT24C16 (2)

8-bit Flash Microcontroller AT89C51RD2 AT89C51ED2

Application Note. 8-bit Microcontrollers. AVR280: USB Host CDC Demonstration. 1. Introduction

Application Note. 8-bit Microcontrollers. AVR307: Half Duplex UART Using the USI Module

DIP Top View VCC A16 A15 A12 A7 A6 A5 A4 A3 A2 A1 A0 I/O0 I/O1 I/O2 GND A17 A14 A13 A8 A9 A11 A10 I/O7 I/O6 I/O5 I/O4 I/O3. PLCC Top View VCC A17

Serial Communications

Step Motor Controller. Application Note. AVR360: Step Motor Controller. Theory of Operation. Features. Introduction

Two-wire Serial EEPROM AT24C1024 (1)

AN108 IMPLEMENTING A REALTIME CLOCK. Relevant Devices. Introduction. Key Points. Overview

AT86RF230 (2450 MHz band) Radio Transceiver... User Guide

AVR1318: Using the XMEGA built-in AES accelerator. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR32138: How to optimize the ADC usage on AT32UC3A0/1, AT32UC3A3 and AT32UC3B0/1 series. 32-bit Microcontrollers. Application Note.

Table of Contents. Section 1 Introduction Section 2 Getting Started Section 3 Hardware Description

8-bit Microcontroller with 12K Bytes Flash and 2K Bytes EEPROM AT89S8253

Using CryptoMemory in Full I 2 C Compliant Mode. Using CryptoMemory in Full I 2 C Compliant Mode AT88SC0104CA AT88SC0204CA AT88SC0404CA AT88SC0808CA

AVR033: Getting Started with the CodeVisionAVR C Compiler. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

8-bit. Application Note. Microcontrollers. AVR282: USB Firmware Upgrade for AT90USB

AVR32701: AVR32AP7 USB Performance. 32-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR318: Dallas 1-Wire master. 8-bit Microcontrollers. Application Note. Features. Introduction

How To Prevent Power Supply Corruption On An 8Bit Microcontroller From Overheating

ATF15xx Product Family Conversion. Application Note. ATF15xx Product Family Conversion. Introduction

AVR1922: Xplain Board Controller Firmware. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR1900: Getting started with ATxmega128A1 on STK bit Microcontrollers. Application Note. 1 Introduction

CTNET Field Protocol Specification November 19, 1997 DRAFT

8-bit Microcontroller. Application Note. AVR313: Interfacing the PC AT Keyboard

TDA General description. 2. Features and benefits. Low power single card reader

AVR444: Sensorless control of 3-phase brushless DC motors. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR1600: Using the XMEGA Quadrature Decoder. 8-bit Microcontrollers. Application Note. Features. 1 Introduction. Sensors

8051 hardware summary

AVR068: STK500 Communication Protocol. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

Application Note. 8-bit Microcontrollers. AVR270: USB Mouse Demonstration

AVR1301: Using the XMEGA DAC. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

256K (32K x 8) OTP EPROM AT27C256R 256K EPROM. Features. Description. Pin Configurations

2-wire Serial EEPROM AT24C512

Soft-Starter SSW-06 V1.6X

AVR115: Data Logging with Atmel File System on ATmega32U4. Microcontrollers. Application Note. 1 Introduction. Atmel

Flash Microcontroller. Architectural Overview. Features. Block Diagram. Figure 1. Block Diagram of the AT89C core

8-bit RISC Microcontroller. Application Note. AVR335: Digital Sound Recorder with AVR and DataFlash

Application Note 162 INTERFACING THE DS18X20/DS WIRE TEMPERATURE SENSOR IN A MICRO-CONTROLLER ENVIRONMENT.

8-bit Microcontroller with 8K Bytes In-System Programmable Flash AT89S52

AVR353: Voltage Reference Calibration and Voltage ADC Usage. 8-bit Microcontrollers. Application Note. Features. 1 Introduction

AVR1510: Xplain training - XMEGA USART. 8-bit Microcontrollers. Application Note. Prerequisites. 1 Introduction

8-bit Flash Microcontroller with Full Speed USB Device AT89C5131

80C51/87C51/80C52/87C52 80C51 8-bit microcontroller family 4 K/8 K OTP/ROM low voltage (2.7 V 5.5 V), low power, high speed (33 MHz), 128/256 B RAM

AN135 CACHE OPTIMIZATIONS FOR C8051F12X. Overview. Relevant Devices. Introduction. Key Points

8-bit Microcontroller with 2/4-Kbyte Flash AT89LP2052 AT89LP4052

T89C5115 AT89C5115. Low Pin Count 8-bit Microcontroller with A/D Converter and 16 KBytes Flash Memory

DEPARTMENT OF COMPUTER SCIENCE & ENGINEERING Question Bank Subject Name: EC Microprocessor & Microcontroller Year/Sem : II/IV

8-bit Flash Microcontroller with Full Speed USB Device AT89C5130A-M AT89C5131A-M

Application Note. 8-bit Microcontrollers. AVR272: USB CDC Demonstration UART to USB Bridge

Atmel AVR4920: ASF - USB Device Stack - Compliance and Performance Figures. Atmel Microcontrollers. Application Note. Features.

FlashFlex MCU SST89E516RD2 / SST89E516RD SST89V516RD2 / SST89V516RD

DS87C520/DS83C520 EPROM/ROM High-Speed Micro

Transcription:

SPI Program Examples 1. Introduction This Application Note provides to customers C and Assembler program examples for SPI. These examples are developped for the different configuration modes of this feature. 1.1 References Atmel 8051 Microcontrollers Hardware Manual 8051 Microcontrollers Application Note Rev. 1

2. C Examples 2.1 Master with Slaves Select / @file $RCSfile: spi_master_ss.c,v $ Copyright (c) 2004 Atmel. Please read file license.txt for copyright notice. @brief This file is an example to use spi in master mode. 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 "reg_c51.h" char serial_data; char data_example=0x55; char data_save; bit transmit_completed= 0; / FUNCTION_PURPOSE: This file set up spi in master mode with Fclk Periph/128 as baud rate and with slave select pin. FUNCTION_INPUTS: P1.5(MISO) serial input FUNCTION_OUTPUTS: P1.7(MOSI) serial output / void main(void) SPCON = 0x10; / Master mode / P1_1=1; / enable master / SPCON = 0x82; / Fclk Periph/128 / SPCON &= ~0x08; / CPOL=0; transmit mode example / SPCON = 0x04; / CPHA=1; transmit mode example / IEN1 = 0x04; / enable spi interrupt / SPCON = 0x40; / run spi / EA=1; / enable interrupts / while(1) / endless / SPDAT=data_example; / send an example data / while(!transmit_completed);/ wait end of transmition / transmit_completed = 0; / clear software transfert flag / SPDAT=0x00; / data is send to generate SCK signal / while(!transmit_completed);/ wait end of transmition / transmit_completed = 0; / clear software transfert flag / data_save = serial_data; / save receive data / 2

/ FUNCTION_PURPOSE:interrupt FUNCTION_INPUTS: void FUNCTION_OUTPUTS: transmit_complete is software transfert flag / void it_spi(void) interrupt 9 / interrupt address is 0x004B / switch( SPSTA ) / read and clear spi status register / case 0x80: serial_data=spdat; / read receive data / transmit_completed=1;/ set software flag / break; case 0x10: break; / put here for mode fault tasking / case 0x40: break; / put here for overrun tasking / 2.2 Slave with Slave Select / @file $RCSfile: spi_slave_ss.c,v $ Copyright (c) 2004 Atmel. Please read file license.txt for copyright notice. @brief This file is an example to use spi in slave mode. 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 "reg_c51.h" bit transmit_completed; char serial_data; 3

/ FUNCTION_PURPOSE: This file set up spi in slave mode with Fclk Periph/128 as baud rate and with slave select pin FUNCTION_INPUTS: P1.5(MISO) serial input P1.1(/SS)=0 slave selected FUNCTION_OUTPUTS: P1.7(MOSI) serial output / void main(void) SPCON &= ~0x10; / slave mode / SPCON &= ~0x08; / CPOL=0; transmit mode example/ SPCON = 0x04; / CPHA=1; transmit mode example/ IEN1 = 0x04; / enable spi interrupt / SPCON = 0x40; / spi run / transmit_completed = 0; / clear software transfert flag / EA=1; / enable interrupts / while(1) / endless / if(transmit_completed) SPDAT = serial_data; / echo data to master / transmit_completed = 0; / clear software transfert flag / / FUNCTION_PURPOSE: spi interrupt, receive data to master FUNCTION_INPUTS: void FUNCTION_OUTPUTS: void / void it_spi(void) interrupt 9 / interrupt address is 0x004B / switch( SPSTA ) / read and clear spi status register / case 0x80: serial_data=spdat; / read receive data / transmit_completed=1;/ set software flag / break; case 0x10: / put here for mode fault tasking / break; case 0x40: / put here for overrun tasking / break; SPDAT=serial_data; / needed to complete clearing sequence / 4

2.3 Master without Slave Select / @file $RCSfile: spi_master_no_ss.c,v $ Copyright (c) 2004 Atmel. Please read file license.txt for copyright notice. @brief This file is an example to use spi in master mode. 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 "reg_c51.h" char serial_data; char data_example=0x55; char data_save; bit transmit_completed= 0; / FUNCTION_PURPOSE: This file set up spi in master mode with Fclk Periph/128 as baud rate and without slave select pin FUNCTION_INPUTS: P1.5(MISO) serial input FUNCTION_OUTPUTS: P1.7(MOSI) serial output P1.1 / void main(void) SPCON = 0x10; / Master mode / SPCON = 0x82; / Fclk Periph/128 / SPCON = 0x20; / P1.1 is available as standard I/O pin / SPCON &= ~0x08; / CPOL=0; transmit mode example / SPCON = 0x04; / CPHA=1; transmit mode example / IEN1 = 0x04; / enable spi interrupt / SPCON = 0x40; / run spi / EA=1; / enable interrupts / while(1) / endless / P1_1=~P1_1; / P1.1 is available as standard I/O pin / SPDAT=data_example; / send an example data / while(!transmit_completed);/ wait end of transmition / transmit_completed = 0; / clear software transfert flag / SPDAT=0x00; / data is send to generate SCK signal / while(!transmit_completed);/ wait end of transmition / transmit_completed = 0; / clear software transfert flag / data_save = serial_data; / save receive data / 5

/ FUNCTION_PURPOSE:interrupt FUNCTION_INPUTS: void FUNCTION_OUTPUTS: transmit_complete is software transfert flag / void it_spi(void) interrupt 9 / interrupt address is 0x004B / switch( SPSTA ) / read and clear spi status register / case 0x80: serial_data=spdat; / read receive data / transmit_completed=1;/ set software flag / break; case 0x10: / put here for mode fault tasking / break; case 0x40: / put here for overrun tasking / break; 2.4 Slave without Slave Select / @file $RCSfile: spi_slave_no_ss.c,v $ Copyright (c) 2004 Atmel. Please read file license.txt for copyright notice. @brief This file is an example to use spi in slave mode. 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 "reg_c51.h" bit transmit_completed; char serial_data; 6

/ FUNCTION_PURPOSE: This file set up spi in slave mode with Fclk Periph/128 as baud rate and without slave select pin. FUNCTION_INPUTS: P1.5(MISO) serial input FUNCTION_OUTPUTS: P1.7(MOSI) serial output P1.1 / void main(void) SPCON = 0x20; / P1.1 is available as standard I/O pin / / SPCON.5(SSDIS) has no effect if CPHA=0 in slave mode then P1.1 is used to slave select / SPCON &= ~0x10; / slave mode / SPCON &= ~0x08; / CPOL=0; transmit mode example/ SPCON = 0x04; / CPHA=1; transmit mode example/ IEN1 = 0x04; / enable spi interrupt / SPCON = 0x40; / spi run / transmit_completed = 0; / clear software transfert flag / EA=1; / enable interrupts / while(1) / endless / P1_1=~P1_1; / P1.1 is available as standard I/O pin / if(transmit_completed) SPDAT = serial_data; / echo data to master / transmit_completed = 0; / clear software transfert flag / / FUNCTION_PURPOSE: spi interrupt, receive data to master FUNCTION_INPUTS: void FUNCTION_OUTPUTS: void / void it_spi(void) interrupt 9 / interrupt address is 0x004B / switch( SPSTA ) / read and clear spi status register / case 0x80: serial_data=spdat; / read receive data / transmit_completed=1;/ set software flag / break; case 0x10: / put here for mode fault tasking / break; case 0x40: / put here for overrun tasking / break; SPDAT=serial_data; / needed to complete clearing sequence / 7

2.5 SFR Register Definition /H NAME: reg_c51.h --------------------------------------------------------------------------- - PURPOSE: SFR Description file for 8051 products ON KEIL compiler / #define Sfr(x, y) sfr x = y #define Sbit(x, y, z) sbit x = y^z #define Sfr16(x,y) sfr16 x = y /----------------------------------------/ / Include file for 8051 SFR Definitions / /----------------------------------------/ / BYTE Register / Sfr (P0, 0x80); Sbit (P0_7, 0x80, 7); Sbit (P0_6, 0x80, 6); Sbit (P0_5, 0x80, 5); Sbit (P0_4, 0x80, 4); Sbit (P0_3, 0x80, 3); Sbit (P0_2, 0x80, 2); Sbit (P0_1, 0x80, 1); Sbit (P0_0, 0x80, 0); Sfr (P1, 0x90); Sbit (P1_7, 0x90, 7); Sbit (P1_6, 0x90, 6); Sbit (P1_5, 0x90, 5); Sbit (P1_4, 0x90, 4); Sbit (P1_3, 0x90, 3); Sbit (P1_2, 0x90, 2); Sbit (P1_1, 0x90, 1); Sbit (P1_0, 0x90, 0); Sfr (P2, 0xA0); Sbit (P2_7, 0xA0, 7); Sbit (P2_6, 0xA0, 6); Sbit (P2_5, 0xA0, 5); Sbit (P2_4, 0xA0, 4); Sbit (P2_3, 0xA0, 3); 8

Sbit (P2_2, 0xA0, 2); Sbit (P2_1, 0xA0, 1); Sbit (P2_0, 0xA0, 0); Sfr (P3, 0xB0); Sbit (P3_7, 0xB0, 7); Sbit (P3_6, 0xB0, 6); Sbit (P3_5, 0xB0, 5); Sbit (P3_4, 0xB0, 4); Sbit (P3_3, 0xB0, 3); Sbit (P3_2, 0xB0, 2); Sbit (P3_1, 0xB0, 1); Sbit (P3_0, 0xB0, 0); Sbit (RD, 0xB0, 7); Sbit (WR, 0xB0, 6); Sbit (T1, 0xB0, 5); Sbit (T0, 0xB0, 4); Sbit (INT1, 0xB0, 3); Sbit (INT0, 0xB0, 2); Sbit (TXD, 0xB0, 1); Sbit (RXD, 0xB0, 0); Sfr (P4, 0xC0); Sbit (P4_7, 0xC0, 7); Sbit (P4_6, 0xC0, 6); Sbit (P4_5, 0xC0, 5); Sbit (P4_4, 0xC0, 4); Sbit (P4_3, 0xC0, 3); Sbit (P4_2, 0xC0, 2); Sbit (P4_1, 0xC0, 1); Sbit (P4_0, 0xC0, 0); Sfr (P5, 0xE8); Sbit (P5_7, 0xE8, 7); Sbit (P5_6, 0xE8, 6); Sbit (P5_5, 0xE8, 5); Sbit (P5_4, 0xE8, 4); Sbit (P5_3, 0xE8, 3); Sbit (P5_2, 0xE8, 2); Sbit (P5_1, 0xE8, 1); Sbit (P5_0, 0xE8, 0); Sfr (PSW, 0xD0); Sbit (CY, 0xD0, 7); Sbit (AC, 0xD0, 6); 9

Sbit (F0, 0xD0, 5); Sbit (RS1, 0xD0, 4); Sbit (RS0, 0xD0, 3); Sbit (OV, 0xD0, 2); Sbit (UD, 0xD0, 1); Sbit (P, 0xD0, 0); Sfr (ACC, 0xE0); Sfr (B, 0xF0); Sfr (SP, 0x81); Sfr (DPL, 0x82); Sfr (DPH, 0x83); Sfr (PCON, 0x87); Sfr (CKCON0, 0x8F); Sfr (CKCON1, 0xAF); /------------------ TIMERS registers ---------------------/ Sfr (TCON, 0x88); Sbit (TF1, 0x88, 7); Sbit (TR1, 0x88, 6); Sbit (TF0, 0x88, 5); Sbit (TR0, 0x88, 4); Sbit (IE1, 0x88, 3); Sbit (IT1, 0x88, 2); Sbit (IE0, 0x88, 1); Sbit (IT0, 0x88, 0); Sfr (TMOD, 0x89); Sfr (T2CON, 0xC8); Sbit (TF2, 0xC8, 7); Sbit (EXF2, 0xC8, 6); Sbit (RCLK, 0xC8, 5); Sbit (TCLK, 0xC8, 4); Sbit (EXEN2, 0xC8, 3); Sbit (TR2, 0xC8, 2); Sbit (C_T2, 0xC8, 1); Sbit (CP_RL2, 0xC8, 0); Sfr (T2MOD, 0xC9); Sfr (TL0, 0x8A); Sfr (TL1, 0x8B); Sfr (TL2, 0xCC); Sfr (TH0, 0x8C); Sfr (TH1, 0x8D); Sfr (TH2, 0xCD); Sfr (RCAP2L, 0xCA); Sfr (RCAP2H, 0xCB); Sfr (WDTRST, 0xA6); 10

Sfr (WDTPRG, 0xA7); /------------------- UART registers ------------------------/ Sfr (SCON, 0x98); Sbit (SM0, 0x98, 7); Sbit (FE, 0x98, 7); Sbit (SM1, 0x98, 6); Sbit (SM2, 0x98, 5); Sbit (REN, 0x98, 4); Sbit (TB8, 0x98, 3); Sbit (RB8, 0x98, 2); Sbit (TI, 0x98, 1); Sbit (RI, 0x98, 0); Sfr (SBUF, 0x99); Sfr (SADEN, 0xB9); Sfr (SADDR, 0xA9); /-------------------- Internal Baud Rate Generator --------/ Sfr (BRL, 0x9A); Sfr (BDRCON, 0x9B); /-------------------- IT registers -----------------------/ Sfr (IEN0, 0xA8); Sfr (IEN1, 0xB1); Sfr (IPH0, 0xB7); Sfr (IPH1, 0xB3); Sfr (IPL0, 0xB8); Sfr (IPL1, 0xB2); / IEN0 / Sbit (EA, 0xA8, 7); Sbit (EC, 0xA8, 6); Sbit (ET2, 0xA8, 5); Sbit (ES, 0xA8, 4); Sbit (ET1, 0xA8, 3); Sbit (EX1, 0xA8, 2); Sbit (ET0, 0xA8, 1); Sbit (EX0, 0xA8, 0); /--------------------- PCA registers -----------------------------/ Sfr (CCON, 0xD8); Sfr (CMOD, 0xD9); Sfr (CH, 0xF9); 11

Sfr (CL, 0xE9); Sfr (CCAP0H, 0xFA); Sfr (CCAP0L, 0xEA); Sfr (CCAPM0, 0xDA); Sfr (CCAP1H, 0xFB); Sfr (CCAP1L, 0xEB); Sfr (CCAPM1, 0xDB); Sfr (CCAP2H, 0xFC); Sfr (CCAP2L, 0xEC); Sfr (CCAPM2, 0xDC); Sfr (CCAP3H, 0xFD); Sfr (CCAP3L, 0xED); Sfr (CCAPM3, 0xDD); Sfr (CCAP4H, 0xFE); Sfr (CCAP4L, 0xEE); Sfr (CCAPM4, 0xDE); / CCON / Sbit (CF, 0xD8, 7); Sbit (CR, 0xD8, 6); Sbit (CCF4, 0xD8, 4); Sbit (CCF3, 0xD8, 3); Sbit (CCF2, 0xD8, 2); Sbit (CCF1, 0xD8, 1); Sbit (CCF0, 0xD8, 0); /------------------ T W I registers ------------------------------/ Sfr ( SSCON, 0x93); Sfr ( SSCS, 0x94); Sfr ( SSDAT, 0x95); Sfr ( SSADR, 0x96); Sfr ( PI2, 0xF8); Sbit (PI2_1, 0xF8, 1); Sbit (PI2_0, 0xF8, 0); /-------------------- OSC control registers ----------------------/ Sfr ( CKSEL, 0x85 ); Sfr ( OSCCON, 0x86 ); Sfr ( CKRL, 0x97 ); /-------------------- Keyboard control registers -----------------/ Sfr ( KBLS, 0x9C ); Sfr ( KBE, 0x9D ); Sfr ( KBF, 0x9E ); /-------------------- SPI ---------------------- -----------------/ Sfr ( SPCON, 0xC3 ); Sfr ( SPSTA, 0xC4 ); Sfr ( SPDAT, 0xC5 ); 12

/------ Misc ----------------------------------------------------/ Sfr( AUXR, 0x8E); Sfr ( AUXR1, 0xA2); Sfr ( FCON, 0xD1); /------ E data --------------------------------------------------/ Sfr ( EECON, 0xD2 ); 13

3. Assembler 51 Examples 3.1 Master with Slave Select $INCLUDE (reg_c51.inc) transmit_completed BIT 20H.1; software flag serial_data DATA 08H data_save DATA 09H data_example DATA 0AH; org 000h ljmp begin org 4Bh ljmp it_spi ;/ ; FUNCTION_PURPOSE: This file set up spi in master mode with ; Fclk Periph/128 as baud rate and with slave select pin. ; FUNCTION_INPUTS: P1.5(MISO) serial input ; FUNCTION_OUTPUTS: P1.7(MOSI) serial output ; / org 0100h begin: ;init MOV data_example,#55h; / data example / ORL SPCON,#10h; / Master mode / SETB P1.1; / enable master / ORL SPCON,#82h; / Fclk Periph/128 / ANL SPCON,#0F7h; / CPOL=0; transmit mode example / ORL SPCON,#04h; / CPHA=1; transmit mode example / ORL IEN1,#04h; / enable spi interrupt / ORL SPCON,#40h; / run spi / CLR transmit_completed; / clear software transfert flag / SETB EA; / enable interrupts / loop: / endless / MOV SPDAT,data_example; / send an example data / JNB transmit_completed,$; / wait end of transmition / CLR transmit_completed; / clear software transfert flag / MOV SPDAT,#00h; / data is send to generate SCK signal / JNB transmit_completed,$; / wait end of transmition / CLR transmit_completed; / clear software transfert flag / MOV data_save,serial_data; / save receive data / LJMP loop 14

;/ ; FUNCTION_PURPOSE:interrupt ; FUNCTION_INPUTS: void ; FUNCTION_OUTPUTS: transmit_complete is software transfert flag ; / it_spi:; / interrupt address is 0x004B / MOV R7,SPSTA; MOV ACC,R7 JNB ACC.7,break1;case 0x80: MOV serial_data,spdat; / read receive data / SETB transmit_completed; / set software flag / break1: JNB ACC.4,break2;case 0x10: ; / put here for mode fault tasking / break2:; JNB ACC.6,break3;case 0x40: ; / put here for overrun tasking / break3:; RETI end 3.2 Slave with Slave Select $INCLUDE (reg_c51.inc) transmit_completed BIT 20H.1; software flag serial_data DATA 08H org 000h ljmp begin org 4Bh ljmp it_spi ;/ ; FUNCTION_PURPOSE: This file set up spi in slave mode with ; Fclk Periph/128 as baud rate and with slave select pin ; FUNCTION_INPUTS: P1.5(MISO) serial input ; P1.1(/SS)=0 slave selected ; FUNCTION_OUTPUTS: P1.7(MOSI) serial output ; / org 0100h begin: ANL SPCON,#0EFh; / slave mode / ANL SPCON,#0F7h; / CPOL=0; transmit mode example / ORL SPCON,#04h; / CPHA=1; transmit mode example / ORL IEN1,#04h; / enable spi interrupt / ORL SPCON,#40h; / run spi / CLR transmit_completed; / clear software transfert flag / SETB EA; / enable interrupts / 15

loop: / endless / JNB transmit_completed,end_if MOV SPDAT,serial_data; / echo data to master / CLR transmit_completed; / clear software transfert flag / end_if: LJMP loop ;/ ; FUNCTION_PURPOSE: spi interrupt, receive data to master ; FUNCTION_INPUTS: void ; FUNCTION_OUTPUTS: void ; / it_spi:; / interrupt address is 0x004B / MOV R7,SPSTA; MOV ACC,R7 JNB ACC.7,break1;case 0x80: MOV serial_data,spdat; / read receive data / SETB transmit_completed; / set software flag / break1: JNB ACC.4,break2;case 0x10: ; / put here for mode fault tasking / break2:; JNB ACC.6,break3;case 0x40: ; / put here for overrun tasking / break3:; MOV SPDAT,serial_data; / needed to complete clearing sequence / RETI end 16

3.3 Master without Slave Select $INCLUDE (reg_c51.inc) transmit_completed BIT 20H.1; software flag serial_data DATA 08H data_save DATA 09H data_example DATA 0AH; org 000h ljmp begin org 4Bh ljmp it_spi ;/ ; FUNCTION_PURPOSE: This file set up spi in master mode with ; Fclk Periph/128 as baud rate and without slave select pin ; FUNCTION_INPUTS: P1.5(MISO) serial input ; FUNCTION_OUTPUTS: P1.7(MOSI) serial output ; P1.1 ; / org 0100h begin: ;init MOV data_example,#55h; / data example / ORL SPCON,#10h; / Master mode / ORL SPCON,#20h; / P1.1 is available as standard I/O pin / ORL SPCON,#82h; / Fclk Periph/128 / ANL SPCON,#0F7h; / CPOL=0; transmit mode example / ORL SPCON,#04h; / CPHA=1; transmit mode example / ORL IEN1,#04h; / enable spi interrupt / ORL SPCON,#40h; / run spi / CLR transmit_completed; / clear software transfert flag / SETB EA; / enable interrupts / loop: / endless / CPL P1.1; / P1.1 is available as standard I/O pin / MOV SPDAT,data_example; / send an example data / JNB transmit_completed,$; / wait end of transmition / CLR transmit_completed; / clear software transfert flag / MOV SPDAT,#00h; / data is send to generate SCK signal / JNB transmit_completed,$; / wait end of transmition / CLR transmit_completed; / clear software transfert flag / MOV data_save,serial_data; / save receive data / LJMP loop 17

;/ ; FUNCTION_PURPOSE:interrupt ; FUNCTION_INPUTS: void ; FUNCTION_OUTPUTS: transmit_complete is software transfert flag ; / it_spi:; / interrupt address is 0x004B / MOV R7,SPSTA; MOV ACC,R7 JNB ACC.7,break1;case 0x80: MOV serial_data,spdat; / read receive data / SETB transmit_completed; / set software flag / break1: JNB ACC.4,break2;case 0x10: ; / put here for mode fault tasking / break2:; JNB ACC.6,break3;case 0x40: ; / put here for overrun tasking / break3:; RETI end 3.4 Slave without Slave Select $INCLUDE (reg_c51.inc) transmit_completed BIT 20H.1; software flag serial_data DATA 08H org 000h ljmp begin org 4Bh ljmp it_spi ;/ ; FUNCTION_PURPOSE: This file set up spi in slave mode with ; Fclk Periph/128 as baud rate and without slave select pin. ; FUNCTION_INPUTS: P1.5(MISO) serial input ; FUNCTION_OUTPUTS: P1.7(MOSI) serial output ; P1.1 ; / org 0100h begin: ORL SPCON,#20h; / P1.1 is available as standard I/O pin / ;/ SPCON.5(SSDIS) has no effect if CPHA=0 in slave mode then P1.1 is used to slave select / ANL SPCON,#0EFh; / slave mode / ANL SPCON,#0F7h; / CPOL=0; transmit mode example / ORL SPCON,#04h; / CPHA=1; transmit mode example / 18

ORL IEN1,#04h; / enable spi interrupt / ORL SPCON,#40h; / run spi / CLR transmit_completed; / clear software transfert flag / SETB EA; / enable interrupts / loop: / endless / CPL P1.1; / P1.1 is available as standard I/O pin / JNB transmit_completed,end_if MOV SPDAT,serial_data; / echo data to master / CLR transmit_completed; / clear software transfert flag / end_if: LJMP loop ;/ ; FUNCTION_PURPOSE: spi interrupt, receive data to master ; FUNCTION_INPUTS: void ; FUNCTION_OUTPUTS: void ; / it_spi:; / interrupt address is 0x004B / MOV R7,SPSTA; MOV ACC,R7 JNB ACC.7,break1;case 0x80: MOV serial_data,spdat; / read receive data / SETB transmit_completed; / set software flag / break1: JNB ACC.4,break2;case 0x10: ; / put here for mode fault tasking / break2:; JNB ACC.6,break3;case 0x40: ; / put here for overrun tasking / break3:; MOV SPDAT,serial_data; / needed to complete clearing sequence / RETI end 19

3.5 SFR Register Definition $SAVE $NOLIST P0 DATA 80H TCONDATA88H ;--- TCON Bits --- TF1 BIT 8FH TR1 BIT 8EH TF0 BIT 8DH TR0 BIT 8CH IE1 BIT 8BH IT1 BIT 8AH IE0 BIT 89H IT0 BIT 88H P1 DATA 90H SCON DATA 98H ;--- SCON Bits ---- SM0 BIT 9FH SM1 BIT 9EH SM2 BIT 9DH REN BIT 9CH TB8 BIT 9BH RB8 BIT 9AH TI BIT 99H RI BIT 98H P2 DATA 0A0H IEN0 DATA 0A8H ;--- IEN0 Bits ----- EA BIT0AFH EC BIT0AEH ET2 BIT0ADH ES BIT0ACH ET1 BIT0ABH EX1 BIT0AAH ET0 BIT0A9H EX0BIT0A8H P3 DATA 0B0H ;--- P3 Bits ------- RD BIT 0B7H WR BIT 0B6H T1 BIT 0B5H T0 BIT 0B4H INT1 BIT 0B3H 20

INT0 BIT 0B2H TXD BIT 0B1H RXD BIT 0B0H P4 DATA 0C0H P5 DATA 0E8H IPL0DATA0B8H ;--- IPL0 Bits ----- PPCL BIT0BEH PT2L BIT0BDH PSL BIT0BCH PT1L BIT0BBH PX1L BIT0BAH PT0L BIT0B9H PX0LBIT0B8H T2CON DATA 0C8H ;--- T2CON bits ---- TF2 BIT 0CFH EXF2 BIT 0CEH RCLK BIT 0CDH TCLK BIT 0CCH EXEN2 BIT 0CBH TR2 BIT 0CAH C_T2 BIT 0C9H CP_RL2 BIT 0C8H PSW DATA 0D0H ;--- PSW bits ------ CY BIT 0D7H AC BIT 0D6H F0 BIT 0D5H RS1 BIT 0D4H RS0 BIT 0D3H OV BIT 0D2H P BIT 0D0H CCONDATA0D8H ;--- CCON bits ----- CF BIT 0DFH CR BIT 0DEH CCF4 BIT 0DCH CCF3 BIT 0DBH CCF2 BIT 0DAH CCF1 BIT 0D9H CCF0 BIT 0D8H 21

ACC DATA 0E0H B DATA 0F0H SP DATA 81H DPL DATA 82H DPH DATA 83H PCON DATA 87H TMOD DATA 89H TL0 DATA 8AH TL1 DATA 8BH TH0 DATA 8CH TH1 DATA 8DH AUXRDATA08EH CKCON0DATA08Fh SBUF DATA 99H ;-- Baud Rate generator BRL DATA09AH BDRCON DATA 09BH ;--- Keyboard KBLSDATA09CH KBEDATA09DH KBFDATA09EH ;--- Watchdog timer WDTRSTDATA0A6H WDTPRG DATA0A7H SADDRDATA0A9H CKCON1DATA0AFH IEN1DATA0B1H IPL1DATA0B2H IPH1DATA0B3H IPH0DATA0B7H SADENDATA0B9H 22

T2MODDATA 0C9h RCAP2L DATA 0CAH RCAP2H DATA 0CBH TL2 DATA 0CCH TH2 DATA 0CDH CMODDATA0D9H CCAPM0DATA0DAH CCAPM1DATA0DBH CCAPM2DATA0DCH CCAPM3DATA0DDH CCAPM4DATA0DEH CHDATA0F9H CCAP0HDATA0FAH CCAP1HDATA0FBH CCAP2HDATA0FCH CCAP3HDATA0FDH CCAP4HDATA0FEH CLDATA0E9H CCAP0LDATA0EAH CCAP1LDATA0EBH CCAP2LDATA0ECH CCAP3LDATA0EDH CCAP4LDATA0EEH ; SPI SPCON DATA 0C3H SPSTA DATA 0C4H SPDAT DATA 0C5H ; TWI PI2DATA 0F8h SSCONDATA093H SSCSDATA094H SSDATDATA095H SSADRDATA096H PI2_OBIT0F8H PI2_1BIT0F9H ; Clock Control OSCCONDATA086H CKSELDATA085H CKRLDATA097H ;MISC AUXR1DATA0A2H 23

; Flash control FCON DATA 0D1H ;EEData EECONDATA0D2H $RESTORE 24

Table of Contents Introduction... 1 References... 1 C Examples... 2 Master with Slaves Select... 2 Slave with Slave Select... 3 Master without Slave Select... 5 Slave without Slave Select... 6 SFR Register Definition... 8 Assembler 51 Examples... 14 Master with Slave Select... 14 Slave with Slave Select... 15 Master without Slave Select... 17 Slave without Slave Select... 18 SFR Register Definition... 20 1

Atmel Corporation 2325 Orchard Parkway San Jose, CA 95131 Tel: 1(408) 441-0311 Fax: 1(408) 487-2600 Regional Headquarters Europe Atmel Sarl Route des Arsenaux 41 Case Postale 80 CH-1705 Fribourg Switzerland Tel: (41) 26-426-5555 Fax: (41) 26-426-5500 Asia Room 1219 Chinachem Golden Plaza 77 Mody Road Tsimshatsui East Kowloon Hong Kong Tel: (852) 2721-9778 Fax: (852) 2722-1369 Japan 9F, Tonetsu Shinkawa Bldg. 1-24-8 Shinkawa Chuo-ku, Tokyo 104-0033 Japan Tel: (81) 3-3523-3551 Fax: (81) 3-3523-7581 Atmel Operations Memory 2325 Orchard Parkway San Jose, CA 95131 Tel: 1(408) 441-0311 Fax: 1(408) 436-4314 Microcontrollers 2325 Orchard Parkway San Jose, CA 95131 Tel: 1(408) 441-0311 Fax: 1(408) 436-4314 La Chantrerie BP 70602 44306 Nantes Cedex 3, France Tel: (33) 2-40-18-18-18 Fax: (33) 2-40-18-19-60 ASIC/ASSP/Smart Cards Zone Industrielle 13106 Rousset Cedex, France Tel: (33) 4-42-53-60-00 Fax: (33) 4-42-53-60-01 1150 East Cheyenne Mtn. Blvd. Colorado Springs, CO 80906 Tel: 1(719) 576-3300 Fax: 1(719) 540-1759 Scottish Enterprise Technology Park Maxwell Building East Kilbride G75 0QR, Scotland Tel: (44) 1355-803-000 Fax: (44) 1355-242-743 RF/Automotive Theresienstrasse 2 Postfach 3535 74025 Heilbronn, Germany Tel: (49) 71-31-67-0 Fax: (49) 71-31-67-2340 1150 East Cheyenne Mtn. Blvd. Colorado Springs, CO 80906 Tel: 1(719) 576-3300 Fax: 1(719) 540-1759 Biometrics/Imaging/Hi-Rel MPU/ High Speed Converters/RF Datacom Avenue de Rochepleine BP 123 38521 Saint-Egreve Cedex, France Tel: (33) 4-76-58-30-00 Fax: (33) 4-76-58-34-80 e-mail literature@atmel.com Web Site http://www.atmel.com Disclaimer: Atmel Corporation makes no warranty for the use of its products, other than those expressly contained in the Company s standard warranty which is detailed in Atmel s Terms and Conditions located on the Company s web site. The Company assumes no responsibility for any errors which may appear in this document, reserves the right to change devices or specifications detailed herein at any time without notice, and does not make any commitment to update the information contained herein. No licenses to patents or other intellectual property of Atmel are granted by the Company in connection with the sale of Atmel products, expressly or by implication. Atmel s products are not authorized for use as critical components in life support devices or systems. Atmel Corporation 2004. All rights reserved. Atmel and combinations thereof are the registered trademarks of Atmel Corporation or its subsidiaries. Other terms and product names may be the trademarks of others. Printed on recycled paper. /xm