• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Micro controller & Micro processor

Micro controller & Micro processor






Total Views
Views on SlideShare
Embed Views



0 Embeds 0

No embeds



Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

    Micro controller & Micro processor Micro controller & Micro processor Document Transcript

    • 1/28/13  1  Microprocessor  and  Microcontroller  66428  Dr.  Sufyan  Samara  Course  Outline  •  Objec>ves:  –  Provides  and  overview  of  Microcontroller  architecture,  Address  modes  and  instruc>on  sets.  Subrou>nes  and  interrupts.  Handling  soKware  tools  including  IDE,  editor,  assembler,  simulator  and  C  compiler.  Interface  techniques  including  parallel,  serial,  >mer,  and  analogue  peripheral  interface.  •  Course  outline:  •  THE  MICROPROCESSOR,  THE  MICROCONTROLLERS,  AND  THIER  ARCHITECTUREs  –  Internal  Microprocessor  Architecture    –  Internal  Microcontroller  Architecture  –  Overview  of  memories  –  The  Microchip  PIC  family  •  Microcontrollers    –  Program  memory  and  the  stack,  Memory  and  memory  map  –  Data  and  Special  Func>on  register  memory  –  The  Configura>on  Word  –  Some  issues  of  >ming,  pipelining,  power  up,  and  reset.  –  Parallel  ports  and  the  clock  oscillator  –  Microchip  instruc>on  set  and  the  MPLAB  –  Working  with  C  programs  and  simulators  –  Working  with  ADC  and  DAC  –  Serial  and  parallel  interfaces  
    • 1/28/13  2  Course  outline  –  cont.  •  Microprocessors  –  The  Intel  8088/8086  –  Architecture,  addressing  modes  and  memory  mapping  •  Address  modes  and  instruc@on  sets  –  Data-­‐Addressing  Modes  –  Program  Memory-­‐Addressing  Modes  and  stacks  –  Intel  Instruc>on  set  and  the  MASM  assembler  •  Working  with  @me:  interrupts,  counters  and  @mers  –  Basic  interrupt  processing  –  Working  with  interrupts  –  The  main  idea  –  counters  and  >mers  –  Working  with  >mers  •  A  look  over  the  larger  microcontrollers  –  16-­‐  bit  microcontrollers  –  32-­‐bit  microcontrollers  •  Textbook:  –  Microchip  PIC  mid  range  manual  from  the  microchip  web  site  Exams  – First  Exam    24/2/2013  – Second  Exam  31/3/2013  – Project  Deadline  22/4/2013  – Final  Exam  decided  by  the  UNI    
    • 1/28/13  3  •  Microcontroller  architecture.  Address  modes  and  instruc>on  sets.  Subrou>nes  and  interrupts.  Handling  soKware  tools  including  IDE,  editor,  assembler,  simulator  and  C  compiler.  Interface  techniques  including  parallel,  serial,  >mer,  and  analogue  peripheral  interface.  History  •  In  the  year  1969,  first  microprocessor  was  born.    •  In  1971  Intel  obtained  the  right  to  sell  this  integrated  circuit.  –  Before  that  Intel  bought  the  license  from  the  Japanese  company  BUSICOM  company  which  first  came  with  the  idea.    •  During  that  year,  a  microprocessor  called  the  4004  appeared  on  the  market.    –  The  first  4-­‐bit  microprocessor  with  the  speed  of  6000  opera>ons  per  second.    •  Not  long  aKer  that,  American  company  CTC  requested  from  Intel  and  Texas  Instruments  to  manufacture  8-­‐bit  microprocessor.  –  In  April  1972  the  first  8-­‐bit  microprocessor  called  the  8008  appeared  on  the  market.    –  It  was  able  to  address  16Kb  of  memory,  had  45  instruc>ons  and  the  speed  of  300  000  opera>ons  per  second.  That  microprocessor  was  the  predecessor  of  all  today’s  microprocessors.    •  In  April  1974,  Intel  launched  8-­‐bit  processor  called  the  8080.    –  Address  64Kb  of  memory,  had  75  instruc>ons  and  ini>al  price  was  $360.  •  In  another  company  called  Motorola  launched  8-­‐bit  microprocessor  6800.  •  At  the  WESCON  exhibi>on  in  the  USA  in  1975,  MOS  Technology  announced  that  it  was  selling  processors  6501  and  •  6502  at  $25  each.    –  In  response  to  the  compe>tor,  both  Motorola  and  Intel  cut  the  prices  of  their  microprocessors  to  $69.95.    •  Due  to  low  price,  6502  became  very  popular  so  it  was  installed  into  computers  such  as  KIM-­‐1,  Apple  I,  Apple  •  II,  Atari,  Commodore,  Acorn,  Oric,  Galeb,  Orao,  Ultra  and  many  others.    •  Soon  appeared  several  companies  manufacturing  the  6502  (Rockwell,  Sznertek,  GTE,  NCR,  Ricoh,  Commodore  took  •  over  MOS  Technology).    •  Other  companies  such  as  Zilog  Inc  have  their  own  microprocessor.    –  In  1976  Zilog  announced  the  Z80.  When  designing  this  microprocessor  Faggin  –  The  new  processor  was  compa>ble  with  the  8080,  i.e.  it  was  able  to  perform  all  the  programs  wriien  for  the  8080.    –  Apart  from  that,  many  other  features  was  included  so  that  the  Z80  was  the  most  powerful  microprocessor  at  that  >me.    –  It  was  able  to  directly  address  64Kb  of  memory,  had  176  instruc>ons,  a  large  number  of  registers,  built  in  op>on  for  refreshing  dynamic  RAM  memory,    single  power  supply,  greater  opera>ng  speed  etc.    –  The  Z80  was  a  great  success  and  everybody  replaced  the  8080  by  the  Z80.    •  In  1976  Intel  came  up  with  an  upgraded  version  of  8-­‐bit  microprocessor  called  the  8085.  However,  the  Z80  was  so  much  beier  that  Intel  lost  the  baile.    •  Even  though  a  few  more  microprocessors  appeared  later  on  the  market  (6809,  2650,  SC/MP  etc.),  everything  was  actually  decided.  There  were  no  such  great  improvements  which  could  make  manufacturers  to  change  their  mind,  so  the  6502  and  Z80  along  with  the  6800  remained  chief  representa>ves  of  the  8-­‐bit  microprocessors  of  that  >me.  
    • 1/28/13  4  uProcessors  <  uControllers  <  SoCs  Microprocessors  (uP)  differ  from  microcontrollers  (uC)  uC:  suited  for  controlling  I/O  devices  that  requires  a  minimum  component  count    uP:  suited  for  processing  informa>on  in  computer  systems    Instruc>on  sets:              uP:  processing  intensive                        powerful  addressing  modes                        instruc>ons  to  perform  complex  opera>ons  &  manipulate  large  volumes  of  data                        processing    capability  of  MCs  never  approaches  those  of  MPs                        large  instruc>ons  -­‐-­‐  e.g.,  80X86  7-­‐byte  long  instruc>ons            uC:  cater  to  control  of  inputs  and  outputs                        instruc>ons  to  set/clear  bits                        boolean  opera>ons  (AND,  OR,  XOR,  NOT,  jump  if  a  bit  is  set/cleared),  etc.                        Extremely  compact  instruc>ons,  many  implemented  in  one  byte                                    (Control  program  must  oKen  fit  in  the  small,  on-­‐chip  ROM)    Hardware  &  Instruc>onset  support:                        uC:  built-­‐in  I/O  opera>ons,  event  >ming,  enabling  &  senng  up  priority  levels                        for  interrupts  caused  by  external  s>muli                        uP:  usually  require  external  circuitry  to  do  similar  things  (e.g,  8255  PPI,  8259  etc)  
    • 1/28/13  5  Microprocessors  (uP)  and  microcontrollers  (uC)  Bus  widths:              uP:  very  wide                        large  memory  address  spaces  (>4  Gbytes)                        lots  of  data  (Data  bus:  32,  64,  128  bits  wide)            uC:  narrow                        rela>vely  small  memory  address  spaces  (typically  kBytes)                        less  data  (Data  bus  typically  4,  8,  16  bits  wide)    Clock  rates:              uP  very  fast  (>  1  GHz)              uC:  Rela>vely  slow  (typically  10-­‐20  MHz)                        since  most  I/O  devices  being  controlled  are  rela>vely  slow    Cost:              uPs  expensive  (oKen  >  $100)              uCs  cheap  (oKen  $1  -­‐  $10)                        4-­‐bit:    <  $1.00                        8-­‐bit:    $1.00  -­‐  $8.00                      16-­‐32-­‐bit:    $6.00  -­‐  $20.00    
    • 1/28/13  6    A  generic  microcontroller  System-­‐on-­‐a-­‐chip  Compare  to  lab-­‐on-­‐a-­‐chip  ideas  
    • 1/28/13  7  Example:  PSoC  (Cypress)  Example  of  circuit    •  No>ce  the  processor/controller  •  What  does  it  do?  
    • 1/28/13  8  Find  the  microcontroller…  
    • 1/28/13  9  Can  you  guess  what  this  circuit  does?  
    • 1/28/13  10  Memory  types  •  Vola>le.  This  is  memory  that  only  works  as  long  as  it  is  powered.  It  loses  its  stored  value  when  power  is  removed,  but  can  be  used  as  memory  for  temporary  data  storage.    –  commonly  been  called  RAM  (Random  Access  Memory)  •  Non-­‐vola>le.  This  is  memory  that  retains  its  stored  value  even  when  power  is  removed.  –  hard  disk  –  In  an  embedded  system  it  is  achieved  using  non-­‐vola>le  semiconductor  memory,  commonly  been  called  ROM  (Read-­‐Only  Memory)  •  An  ideal  memory  reads  and  writes  in  negligible  >me,  retains  its  stored  value  indefinitely,  occupies  negligible  space  and  consumes  negligible  power.    –  In  prac>ce  no  memory  technology  meets  all  these  happy  ideals    Memory  –  cont.  •  Sta>c  RAM  (SRAM)  –  Each  memory  cell  is  designed  as  a  simple  flip-­‐flop.  –  Data  is  held  only  as  long  as  power  is  supplied  (vola>le).  –  Consume  very  liile  power,  and  can  retain  its  data  down  to  a  low  voltage  (around  2  V).  –  Each  cell  taking  six  transistors,  SRAM  is  not  a  high-­‐density  technology.  •  EPROM  (Erasable  Programmable  Read-­‐Only  Memory)  –  erased  by  exposing  it  to  intense  ultraviolet  light.  –  each  memory  cell  is  made  of  a  single  MOS  transistor  (very  high  density  and  robust)  –  Within  the  transistor  there  is  embedded  a  ‘floa>ng  gate’.  Using  a  technique  known  as  hot  electron  injec>on  (HEI),  the  floa>ng  gate  can  be  charged.  When  it  is  not  charged,  the  transistor  behaves  normally  and  the  cell  output  takes  one  logic  state  when  ac>vated.  When  it  is  charged,  the  transistor  no  longer  works  properly  and  it  no  longer  responds  when  it  is  ac>vated.  The  charge  placed  on  the  floa>ng  gate  is  totally  trapped  by  the  surrounding  insulator.  Hence  EPROM  technology  is  non-­‐vola>le.  –  Requires  quartz  window  and  ceramic  packaging.  –  As  a  technology,  EPROM  has  now  almost  completely  given  way  to  Flash  
    • 1/28/13  11  Memory  –  cont.  •  EEPROM  (Electrically  Erasable  Programmable  Read-­‐Only  Memory)    –  Uses  floa>ng  gate  technology.  •  This  is  known  as  Nordheim–Fowler  tunnelling  (NFT).  •  With  NFT,  it  is  possible  to  electrically  erase  the  memory  cell  as  well  as  write  to  it.  •  To  allow  this  to  happen,  a  number  of  switching  transistors  need  to  be  included  around  the  memory  element  itself,  so  the  high  density  of  EPROM  is  lost.  •  EEPROM  is  non-­‐vola>le  –  Because  the  charge  on  the  floa>ng  gate  is  totally  trapped  by  the  surrounding  insulator  •  Write  and  erase  byte  by  byte.  •  Flash  –  A  further  evolu>on  of  floa>ng-­‐gate  technology.  –  can  only  erase  in  blocks.  –  Non-­‐vola>le    Organizing  memory  •  Two  important  buses  –  Address  –  Data  •  Two  architectures    –  Von Neumann architecture•  One bus for data and one for address•  Serve for memory and others (program and I/O)•  Disadvantages:    –  uses  the  same  data  bus  for  all  sizes  (areas)  of  memory  –  Shared  between  many  things,  can  be  used  for  one  thing  at  a    >me  –  The  Harvard  architecture•  Every  memory  area  gets  its  own  address  bus  and  its  own  data  bus  •  Disadvantages:  –  Complex  –  Data  and  program  are  separated  (tables  inside  program  memory  can’t  be  treated  as  data)    
    • 1/28/13  12  (a)  The  Von  Neumann  way.                                                                                                                (b)  The  Harvard  way      uC  •  Many  families  –  Each  family  is  generally  the  same  processor  core  with  different  peripherals  combina>on  and  different  memory  size.  –  One  core  might  be  8-­‐bit  with  limited  power,  another  16-­‐bit  and  another  a  sophis>cated  32-­‐bit  machine.    –  Because  the  core  is  fixed  for  all  members  of  one  family,  the  instruc>on  set  is  fixed  and  users  have  liile  difficulty  in  moving  from  one  family  member  to  another.  
    • 1/28/13  13  Microcontroller  packaging  and  appearance  •  Usually  plas>c  or  ceramic  are  used  as  the  packaging  material.  •  Interconnec>on  with  the  outside  world  is  provided  by  the  pins  on  the  package  •  Dual-­‐in-­‐line  package  (DIP),  with  its  pins  arranged  in  two  rows  along  the  longer  sides  of  the  IC,  the  pin  spacing  being  0.1  inches  •  Other  incudes:  Pin  grid  array  (PGA),  leadless  chip  carrier  (LCC)  packages,  Small-­‐outline  integrated  circuit  (SOIC),  Plas>c  leaded  chip  carrier  (PLCC)  packages,  plas>c  quad  flat  pack(PQFP),  and  thin  small-­‐outline  packages  (TSOP)  –  Used  when  number  of  pins  is  very  large  compared  to  IC  size    A  collec>on  of  microprocessors  and  microcontrollers  –  old  and  new.  From  leK  to  right:  PIC  12F508,  PIC  16F84A,  PIC  16C72,  Motorola  68HC705B16,  PIC  16F877,  Motorola  68000  Microchip  and  the  PIC  microcontroller  •  Has  a  wide  range  of  different  families  –  8-­‐bit,  16-­‐bit,  32-­‐bit    •  All  8-­‐bit  PIC  microcontrollers  are  lowcost,  self-­‐contained,  pipelined,  RISC,  use  the  Harvard  structure,  have  a  single  accumulator  (the  Working,  or  W,  register),  with  a  fixed  reset  vector.  •  Microchip  offer  8-­‐bit  microcontrollers  with  four  different  prefixes,  10-­‐,  12-­‐,  16-­‐,  and  18-­‐,  for  example  10F200,  or  18F242.  We  call  each  a  ‘Series’,  for  example  ‘12  Series’,  ‘16  Series’,  ‘18  Series’.    –  Each  Series  is  iden>fied  by  the  first  two  digits  of  the  device  code.  •  Leiers  are  used  as  follows:  –  The  ‘C’  insert  implies  CMOS  technology  –  The  ‘F’  insert  indicates  incorpora>on  of  Flash  memory  technology  (s>ll  using  CMOS  as  the  core  technology).    –  An  ‘A’  aKer  the  number  indicates  a  technological  upgrade  on  the  first  issue  device.    –  An  ‘X’  indicates  that  a  certain  digit  can  take  a  number  of  values.  –  For  example,  the  16C84,  the  16F84,  and  the  16F84A.  •  In  some  cases  microcontrollers  of  one  Series  can  fall  into  more  than  one  family.    
    • 1/28/13  14  Comparison  of  8-­‐bit  PIC  families  •  Every  member  of  any  one  family  shares  the  same  core  architecture  and  instruc>on  set.    •  The  processing  power  is  defined  to  some  extent  by  the  parameters  quoted,  for  example  the  instruc>on  word  size,  and  the  number  of  instruc>ons.    An  introduc>on  to  PIC  microcontrollers  using  the  Baseline  Series  •  We  will  look  at  the  PIC  12F508/509.  •  The  only  difference  between  the  508  and  509  is  that  the  laier  has  slightly  larger  program  and  data  memories.  
    • 1/28/13  15  The  architecture  of  the  12F508  The  architecture  of  the  12F508  –  cont.  •  As  this  microcontroller  is  a  RISC  computer,  each  instruc>on  word  must  carry  not  only  the  instruc>on  code  itself,  but  also  any  address  or  data  informa>on  needed.  •  Depending  on  the  instruc>on  itself,  five  bits  of  the  instruc>on  word  may  carry  address  informa>on  and  hence  be  sent  down  the  ‘Direct  Addr’  bus  to  the  address  mul>plexer  (‘Addr  MUX’).  Eight  bits  of  the  instruc>on  word  may  carry  a  data  byte  that  is  to  be  used  as  literal  data  for  the  execu>on  of  that  instruc>on.  This  goes  to  the  mul>plexer  (‘MUX’),  which  feeds  into  the  ALU.  Finally,  there  is  the  instruc>on  data  itself,  which  feeds  into  the  ‘Instruc>on  Decode  and  Control’  unit.  •  A  ‘Power-­‐on  Reset’  func>on  detects  when  power  is  applied  and  holds  the  microcontroller  in  a  Reset  condi>on  while  the  power  supply  stabilizes.  •  The  MCLR  input  can  be  used  to  place  the  CPU  in  a  Reset  condi>on  and  to  force  the  program  to  start  again.    –  An  internal  clock  oscillator  (‘Internal  RC  OSC’)  is  provided  so  that  no  external  pins  whatsoever  need  be  commiied  to  this  func>on.    –  External  oscillator  connec>ons  can,  however,  be  made,  using  input/output  pins  GP4  and  GP5.  The  oscillator  signal  is  condi>oned  for  use  through  the  microcontroller  in  the  ‘Timing  Genera>on’  unit.    •  The  ‘Watchdog  Timer’  is  a  safety  feature,  used  to  force  a  reset  in  the  processor  if  it  crashes.  
    • 1/28/13  16  The  PIC  16F877  •  We  will  concentrate  on  just  one  device,  the  PIC  16F877  –  A  good  range  of  features  and  allows  most  of  the  essen>al  techniques  to  be  explained.    –  It  has  a  set  of  serial  ports  built  in,  which  are  used  to  transfer  data  to  and  from  other  devices,  as  well  as  analogue  inputs,  which  allow  measurement  of  inputs  such  as  temperature.    –  All  standard  types  of  microcontrollers  work  in  a  similar  way,  so  analysis  of  one  will  make  it  possible  to  understand  all  the  others.  MCU  •  The  microcontroller  contains  the  same  main  elements  as  any  computer  system:  –  Processor  –  Memory  –  Input/Output  •  In  a  PC,  these  are  provided  as  separate  chips,  linked  together  via  bus  connec>ons  on  a  printed  circuit  board,  but  under  the  control  of  the  microprocessor  (CPU).    •  A  bus  is  a  set  of  lines  which  carry  data  in  parallel  form  which  are  shared  by  the  peripheral  devices.      •  The  system  can  be  designed  to  suit  a  par>cular  applica>on,  with  the  type  of  CPU,  size  of  memory  and  selec>on  of  input/output  (I/O)  devices  tailored  to  the  system  requirements.  •  In  the  microcontroller,  all  these  elements  are  on  one  chip.  This  means  that  the  MCU  (microcontroller)  for  a  par>cular  applica>on  must  be  chosen  from  the  available  range  to  suit  the  requirements.    
    • 1/28/13  17  Execu>on,  revisited  Memory,  revisited  
    • 1/28/13  18  Input  and  Output  •  Ports  are  based  on  a  data  register,  and  set  of  control  registers,  which  pass  the  data  in  and  out  in  a  controlled  manner,  oKen  according  to  a  standard  protocol  (method  of  communica>on).    •  There  are  two  main  types  of  port:    –  (a)  Parallel  port,  the  data  is  usually  transferred  in  and  out  8  bits  at  a  >me  –  (b)  Serial  port,  the  data  is  transmiied  1  bit  at  a  >me  on  a  single  line.    –  Poten>ally,  the  parallel  port  is  faster,  but  needs  more  pins;  on  the  other  hand,  the  port  hardware  and  driver  soKware  are  simpler,  because  the  serial  port  must  organize  the  data  in  groups  of  bits,  usually  1  byte  at  a  >me,  or  in  packets,  as  in  a  network  PIC  16F877  Architecture  •  Microcontrollers  contain  all  the  components  required  for  a  processor  system  in  one  chip:  a  CPU,  memory  and  I/O.    •  A  complete  system  can  therefore  be  built  using  one  MCU  chip  and  a  few  I/O  devices  such  as  a  keypad,  display  and  other  interfacing  circuits.  
    • 1/28/13  19  Some  members  of  the  PIC  mid-­‐range  family  Some  members  of  the  PIC  mid-­‐range  family  –  cont.  
    • 1/28/13  20  An  architecture  overview  of  the  PIC16F877  PIC  16F877  Pin  IN/Out    •  The  chip  can  be  obtained  in  different  packages,  such  as  conven>onal  40-­‐pin  DIP  (Dual  In-­‐Line  Package),  square  surface  mount  or  socket  format.    •  Most  of  the  pins  are  for  input  and  output,  and  arranged  as  5  ports:  port  A  (5  pins),  port  B(8),  C(8),  D(8)  and  E(3),  giving  a  total  of  32  I/O  pins.    –  These  can  all  operate  as  simple  digital  I/O  pins,  but  most  have  more  than  one  func>on.  –  The  mode  of  opera>on  of  each  is  selected  by  ini>alizing  various  control  registers  within  the  chip.    –  Note,  in  par>cular,  that  Ports  A  and  E  become  ANALOGUE  INPUTS  by  default  (on  power  up  or  reset),  so  they  have  to  set  up  for  digital  I/O  if  required.  
    • 1/28/13  21  PIC  16F877  Pin  IN/Out  –  cont.  •  Port  B  is  used  for  downloading  the  program  to  the  chip  flash  ROM  (RB6  and  RB7),  and  RB0  and  RB4–RB7  can  generate  an  interrupt.    •  Port  C  gives  access  to  >mers  and  serial  ports.  •  Port  D  can  be  used  as  a  slave  port,  with  Port  E  providing  the  control  pins  for  this  func>on.    PIC  16F877  Pin  IN/Out  –  cont.  •  The  chip  has  two  pairs  of  power  pins  (VDD=5  V  nominal  and  Vss  =0  V)  (11,12  or  31,  32),  and  either  pair  can  be  used.    •  The  chip  can  work  down  to  about  2  V  supply,  for  baiery  and  power-­‐saving  opera>on.    •  A  low-­‐frequency  clock  circuit  using  only  a  capacitor  and  resistor  to  set  the  frequency  can  be  connected  to  CLKIN,  or  a  crystal  oscillator  circuit  can  be  connected  across  CLKIN  and  CLKOUT.    •  MCLR  is  the  reset  input;  when  cleared  to  0,  the  MCU  stops,  and  restarts  when  MCLR=1.  This  input  must  be  >ed  high  allowing  the  chip  to  run  if  an  external  reset  circuit  is  not  connected.    –  It  is  usually  a  good  idea  to  incorporate  a  manual  reset  buion  in  all  but  the  most  trivial  applica>ons.  
    • 1/28/13  22  PIC  16F877  Pin  IN/Out  –  cont.  PIC  16F877  Block  Diagram  
    • 1/28/13  23  PIC16F877  block  diagram  –  cont.  •  The  main  program  memory  is  flash  ROM,  which  stores  a  list  of  14-­‐bits  instruc>ons.    •  Instruc>ons  are  fed  to  the  execu>on  unit,  and  used  to  modify  the  RAM  file  registers.    •  The  file  register  include  special  control  registers,  the  port  registers  and  a  set  of  general  purpose  registers  which  can  be  used  to  store  data  temporarily.    •  A  separate  working  register  (W)  is  used  with  the  ALU  (Arithme>c  Logic  Unit)  to  process  data.  Various  special  peripheral  modules  provide  a  range  of  I/O  op>ons      PIC16F877  block  diagram  –  cont.  •  There  are  512  RAM  File  Register  addresses  (0–1FFh),  which  are  organized  in  4  banks  (0–3),  each  bank  containing  128  addresses.    •  The  default  (selected  on  power  up)  is  Bank  0  which  is  numbered  from  0  to  7Fh,  Bank  1  from  80h  to  FFh  and  so  on.    •  These  contain  both  Special  Func>on  Registers  (SFRs),  which  have  a  dedicated  purpose,  and  the  General  Purpose  Registers  (GPRs).    •  The  file  registers  are  mapped  as  seen  in  the  next  slid.  •  The  SFRs  may  be  shown  in  the  block  diagram  as  separate  from  the  GPRs,  but  they  are  in  fact  in  the  same  logical  block,  and  addressed  in  the  same  way.    •  Deduc>ng  the  SFRs  from  the  total  number  of  RAM  loca>ons,  and  allowing  for  some  registers  which  are  repeated  in  more  than  one  bank,  leaves  368  bytes  of  GPR  (data)  registers.  
    • 1/28/13  24  Assume  the  following  circuit  
    • 1/28/13  25  Test  Programs  •  The  first  test  program,  will  simply  light  a  set  of  LEDs  connected  to  Port  B  in  a  binary  count  sequence,  by  incremen>ng  Port  B  data  register.    •  Show  in  simulator  (pr)  •  The  second  test  program,  will  use  two  input  push  buions  aiached  to  Port  D  to  control  the  output  (start,  stop  and  reset).  The  program  will  also  include  a  delay  so  that  the  output  is  slower,  and  visible  to  the  user.    –  Detailed  design  of  the  interfacing  will  be  covered  later.    –  A  simple  CR  clock  will  be  used,  which  is  set  to  40  kHz  (C    4.7  nF,  R  ≈  5  kΩ  (preset),  CR    25  μs).  This  will  give  an  instruc>on  execu>on  >me  of  100  μs.  •  Show  in  Simulator  The  PIC  Program  •  Both  programs  are  wriien  as  a  source  code  (a  simple  text  file)  on  a  PC  host  computer.  •  Compiler  is    MPLAB  (downloadable  from  www.microchip.com).    •  The  instruc>ons  are  selected  from  the  pre-­‐defined  PIC  instruc>on  set  (see  next  slid)  according  to  the  opera>onal  sequence  required.    •  The  source  code  file  is  saved  as  PROGNAME.ASM.    •  The  source  code  is  assembled  (converted  into  machine  code)  by  the  assembler  program  MPASM,  which  creates  the  list  of  binary  instruc>on  codes.  As  this  is  normally  displayed  as  hexadecimal  numbers,  it  is  saved  as  PROGNAME.HEX.  •  The  hex  file  is  then  downloaded  to  the  PIC  chip  from  the  PC    –  by  placing  the  MCU  in  a  programming  unit  which  is  aiached  to  the  serial  port  of  PC,  or    –  by  connec>ng  the  chip  to  a  programmer  aKer  finng  it  in  the  applica>on  board  (in-­‐circuit  programming).  –  The  hex  code  is  transferred  in  serial  form  via  Port  B  into  the  PIC  flash  program  memory.    •  A  list  file  is  created  by  the  assembler,  which  shows  the  source  code  and  machine  code  in  one  text  file.  
    • 1/28/13  26  First  Test  Program  1  
    • 1/28/13  27  First  Test  Program  –  cont.  •  The  program  lis>ng  includes  the  source  code  at  the  right,  with  source  line  numbers,  the  hex  machine  code  and  the  memory  loca>on  where  each  instruc>on  is  stored  (0000–0004).    •  Direc>ve  are  not  converted  into  machine  code  (e.g.  PROCESSOR  and  END)    •  The  ‘877  has  8k  of  program  memory,  that  is,  it  can  store  a  maximum  8192  14-­‐bit  instruc>ons.    •  The  reset  vector  (the  execu>on  start  address)  is  0x000.  •  Let  us  look  at  a  typical  instruc>on  to  see  how  the  program  instruc>ons  are  executed.  –  Source  code:  MOVLW  05A  –  Hex  code:  305A  (4  hex  digits)  –  Binary  code:  0011  0000  0101  1010  (16  bits)  –  Instruc>on:  11  00xx  kkkk  kkkk  (14  bits)  –  The  instruc>on  means:  Move  a  Literal  (given  number,  5Ah)  into  the  Working  register.  •  The  source  code  consists  of  a  mnemonic  MOVLW  and  operand  05A.  This  assembles  into  the  hex  code  305A,  and  is  stored  in  binary  in  program  memory  as  11  0000  0101  1010.    First  Test  Program  –  cont.  •  In  the  instruc>on  set  table,  shown  previously,  it  is  seen  that  the  first  4  bits  (11  00)  are  the  instruc>on  code,  the  next  two  are  unused  (xx,  appearing  as  00  in  the  binary  code)  and  the  last  8  are  the  literal  value  (5A).    •  The  literal  is  represented  as  ‘kkkk  kkkk’  since  it  can  have  any  value  from  00000000  to  11111111  (00–FF).  •  The  format  of  other  instruc>ons  depends  mainly  on  the  number  of  bits  required  for  the  operand  (data  to  be  processed).    •  The  number  of  op-­‐code  bits  can  vary  from  3  to  all  14,  depending  on  the  number  of  bits  needed  for  the  operand.    •  This  is  different  from  a  conven>onal  processor,  such  as  the  Pen>um,  where  the  op-­‐code  and  operand  are  each  created  as  a  whole  number  of  bytes.  •  The  PIC  instruc>on  is  more  compact,  as  is  the  instruc>on  set  itself,  for  greater  speed  of  opera>on.  This  defines  it  as  a  RISC  (Reduced  Instruc>on  Set  Computer)  chip.  
    • 1/28/13  28  Second  test  program  •  The  second  program  contains  many  of  the  basic  program  elements,  see  next  slide.  •  It  contains  the  machine  code,  memory  address  and  list  file  line  number  as  before.    •  There  are  addi>onal  comments  to  aid  program  analysis  and  debugging.  •  Note  that  two  types  of  labels  are  used  in  program  to  represent  numbers.  •  Label  equates  are  used  at  the  top  of  the  program  to  declare  labels  for  the  file  registers  which  will  be  used  in  the  program.  Address  labels  are  placed  in  the  first  column  to  mark  the  des>na>on  for  GOTO  and  CALL  instruc>ons.  
    • 1/28/13  29  Chip  Configura>on  Word  •  The  assembler  direc>ve  __CONFIG  is  included  at  the  top  of  the  program,  which  sets  up  aspects  of  the  chip  opera>on  which  cannot  be  subsequently  changed  without  reprogramming.    •  The  configura>on  word  is  a  special  area  of  program  memory  located  outside  the  normal  range  (address  2007h)  and  stores    chip  configura>ons  such  as  the  clock  type.  –  Done  by  loading  the  configura>on  bits  with  a  suitable  binary  code  (see  next  slide).    Chip  Configura>on  Word  
    • 1/28/13  30  CODE  PROTECTION  •  Normally,  the  program  machine  code  can  be  read  back  to  the  programming  host  computer,  be  disassembled  and  the  original  source  program  recovered.  •  This  can  be  prevented  if  commercial  or  security  considera>ons  require  it.  The  code  protec>on  bits  (CP1:CP0)  disable  reads  from  selected  program  areas.  •  Program  memory  may  also  be  wriien  from  within  the  program  itself,  disabled  via  the  WRT  bit.    •  Data  EEPROM  may  also  be  protected  from  external  reads  in  the  same  way  via  the  CPD  bit,  while  internal  read  and  write  opera>ons  are  s>ll  allowed,  regardless  of  the  state-­‐of-­‐the  code  protec>on  bits.    •  bit  13-­‐12,  bit  5-­‐4  •  CP1:CP0:  FLASH  Program  Memory  Code  Protec>on  bit,  All  of  the  CP1:CP0  pairs  have  to  be  given  the  same  value  to  enable  the  code  protec>on  scheme  listed.  •  11  =  Code  protec>on  off  •  10  =  1F00h  to  1FFFh  code  protected    •  01  =  1000h  to  1FFFh  code  protected    •  00  =  0000h  to  1FFFh  code  protected  IN-­‐CIRCUIT  DEBUGGING  •  In-­‐circuit  debugging  (ICD)  allows  the  program  to  be  downloaded  aKer  the  chip  has  been  fiied  in  the  applica>on  circuit,  and  allows  it  to  be  tested  with  the  real  hardware.    •  The  normal  debugging  techniques  of  single  stepping,  breakpoints  and  tracing  can  be  applied  in  ICD  mode.    
    • 1/28/13  31  LOW  VOLTAGE  PROGRAMMING  •  Normally,  when  the  chip  is  programmed,  a  high  voltage  (12–14  V)  is  applied  to  the  PGM  pin  (RB3).    •  To  avoid  the  need  to  supply  this  voltage  during  in-­‐circuit  programming  (e.g.  during  remote  reprogramming),  a  low-­‐voltage  programming  mode  is  available.  •  Using  this  op>on  means  that  RB3  is  not  then  available  for  general  I/O  func>ons  during  normal  opera>on.  POWER-­‐UP  TIMER  •  When  the  supply  power  is  applied  to  the  programmed  MCU,  the  start  of  program  execu>on  should  be  delayed  un>l  the  power  supply  and  clock  are  stable,  otherwise  the  program  may  not  run  correctly.    •  The  power-­‐up  >mer  may  therefore  be  enabled  (PWRTE  0)  as  a  maier  of  rou>ne.    •  It  avoids  the  need  to  reset  the  MCU  manually  at  start  up,  or  connect  an  external  reset  circuit,  as  is  necessary  with  some  microprocessors.    •  At  a  clock  frequency  of  4  MHz,  this  works  out  to  256μs.  
    • 1/28/13  32  BROWN-­‐OUT  RESET  •  Brown  out  refers  to  a  short  dip  in  the  power-­‐supply  (PSU)  voltage,  caused  by  mains  supply  fluctua>on,  or  some  other  supply  fault,  which  might  disrupt  the  program  execu>on.    •  If  the  Brown-­‐Out  Detect  Enable  bit  (BODEN)  is  set,  a  PSU  glitch  of  longer  than  about  100  μs  will  cause  the  device  to  be  held  in  reset  un>l  the  supply  recovers,  and  then  wait  for  the  power-­‐up  >mer  to  >me  out,  before  restar>ng.  The  program  must  be  designed  to  recover  automa>cally.  WATCHDOG  TIMER  •  The  watchdog  >mer  is  designed  to  automa>cally  reset  the  MCU  if  the  program  malfunc>ons,  by  stopping  or  genng  stuck  in  loop.    •  This  could  be  caused  by  an  undetected  bug  in  the  program,  an  unplanned  sequence  of  inputs  or  supply  fault.    •  A  separate  internal  oscillator  and  counter  automa>cally  generates  a  reset  about  every  18  ms,  unless  this  is  disabled  in  the  configura>on  word.    •  If  the  watchdog  >mer  is  enabled,  it  should  be  regularly  reset  by  an  instruc>on  in  the  program  loop  (CLRWDT)  to  prevent  the  reset.    •  If  the  program  hangs,  and  the  watchdog  >mer  reset  instruc>on  not  executed,  the  MCU  will  restart,  and  (possibly)  con>nue  correctly,  depending  on  the  nature  of  the  fault.  
    • 1/28/13  33  RC  OSCILLATOR  •  The  MCU  clock  drives  the  program  along,  providing  the  >ming  signals  for  program  execu>on.    •  The  RC  (resistor–capacitor)  clock  is  cheap  and  useful.  It  allows  opera>ng  with  the  internal  clock  driver  circuit,  to  generate  the  clock.    •  The  >me  constant  (product  R  X  C)  determines  the  clock  period.    •  A  variable  resistor  can  be  used  to  give  a  manually  adjustable  frequency,  although  it  is  not  very  stable  or  accurate.  CRYSTAL  (XTAL)  OSCILLATOR  •  Used  for  greater  precision  –  uses  the  hardware  >mers  to  make  accurate  measurements    –  generate  precise  output  signals  •  Normally,  it  is  connected  across  the  clock  pins  with  a  pair  of  small  capacitors  (15  pF)  to  stabilize  the  frequency.    •  The  crystal  acts  as  a  self-­‐contained  resonant  circuit,  where  the  quartz  or  ceramic  crystal  vibrates  at  a  precise  frequency  when  subject  to  electrical  s>mula>on.  •  A  convenient  value  (used  in  our  examples  later)  is  4  MHz;  this  gives  an  instruc>on  cycle  >me  of  1  μs  –  This  is  the  maximum  frequency  allowed  for  the  XT  configura>on  senng.  •  Opera>ng  at  higher  frequency  requires  the  selec>on  of  the  HS  configura>on  op>on.  •  Each  instruc>on  takes  four  clock  cycles    
    • 1/28/13  34  CONFIGURATION  SETTINGS  •  The  default  senng  for  the  configura>on  bits  is  3FFF,  which  means    –  The  code  protec>on  is  off  –  In-­‐circuit  debugging  disabled    –  Program  write  enabled  –  Low-­‐voltage  programming  enabled  –  Brown-­‐out  reset  enabled  –  Power-­‐up  >mer  disabled  –  Watchdog  >mer  enabled  –  RC  oscillator  selected.    •  A  typical  senng  for  basic  development  work  would  enable  in-­‐circuit  debugging,  enable  the  power-­‐up  >mer  –  This  would  minimize  the  possibility  of  a  faulty  start-­‐up.  •  For  reliable  star>ng,  disable  the  watchdog  >mer  and  use  the  XT  oscillator  type.  –  By  default,  the  watchdog  >mer  is  enabled.    PIC  Instruc>on  Set  •  It  consists  of  35  separate  instruc>ons,  some  with  alternate  result  des>na>ons.  •  The  default  des>na>on  for  the  result  of  an  opera>on  is  the  file  register,  but  the  working  register  W  is  some>mes  an  op>on.  •     
    • 1/28/13  35  PIC  Instruc>on  Set  –  cont.  PIC  Instruc>on  Set  –  cont.  
    • 1/28/13  36  MOVE  instruc>on  •  The  contents  of  a  register  are  copied  to  another.    •  No>ce  that  we  cannot  move  a  byte  directly  from  one  file  register  to  another,  it  has  to  go  via  the  working  register.    •  To  put  data  into  the  system  from  the  program  (a  literal)  we  must  use  MOVLW  to  place  the  literal  into  W  ini>ally.    –  It  can  then  be  moved  to  another  register  as  required.  •  To  move  a  byte  from  W  to  a  file  register,  MOVWF  is  used.    •  To  move  it  the  other  way,  MOVF  F,W  is  used,  where  F  is  any  file  register  address.    •  MOVF  F,F  is  also  available.  –  Can  be  used  to  test  a  register  without  changing  it.  REGISTER  •  Register  opera>ons  affect  only  a  single  register,  and  all  except  CLRW  (clear  W)  operate  on  file  registers.    •  Clear  sets  all  bits  to  zero  (00h)    •  Decrement  decreases  the  value  by  1  •  Increment  increases  it  by  1.    •  Swap  exchanges  the  upper  and  lower  four  bits  (nibbles).    •  Complement  inverts  all  the  bits,  which  in  effect  negates  the  number.    •  Rotate  moves  all  bits  leK  or  right,  including  the  carry  flag  in  this  process.    •  Clear  and  set  a  bit  operate  on  a  selected  bit,  where  the  register  and  bit  need  to  be  specified  in  the  instruc>on.  
    • 1/28/13  37  ARITHMETIC  &  LOGIC  •  Addi>on  and  subtrac>on  uses  the  carry  flag.  – If  the  result  generates  an  extra  bit  (e.g.  FF  +  FF  =  1FE),  or  requires  a  borrow  (e.g.  1FE–FF  =  FF),  the  carry  flag  is  used.    •  Logic  opera>ons  are  carried  out  on  bit  pairs  (e.g.  00001111  AND  01010101=  00000101).    TEST,  SKIP  &  JUMP  •  Condi>onal  jumps  are  ini>ated  using  a  bit  test  and  condi>onal  skip,  followed  by  a  GOTO  or  CALL.  •  The  bit  test  can  be  made  on  any  file  register  bit.    –  This  could  be  a  port  bit,  to  check  if  an  input  has  changed,  or  a  status  bit  in  a  control  register.  •  BTFSC  (Bit  Test  and  Skip  if  Clear)  and  BTFSS  (Bit  Test  and  Skip  if  Set)  are  used  to  test  the  bit  and  skip  the  next  instruc>on,  or  not,  according  to  the  state  of  the  bit  tested.    •  DECFSZ  and  INCFSZ  embody  a  commonly  used  test  –  decrement  or  increment  a  register  and  jump  depending  on  the  effect  of  the  result  on  the  zero  flag  (Z  is  set  if  result    0).    •  The  bit  test  and  skip  may  be  followed  by  a  single  instruc>on  to  be  carried  out  condi>onally,  but  GOTO  and  CALL  allow  a  block  of  condi>onal  code.  •  Using  GOTO  label  simply  transfers  the  program  execu>on  point  to  some  other  point  in  the  program  indicated  by  a  label  in  the  first  column  of  the  source  code  line.  •  A  CALL  label  means  that  the  program  returns  to  the  instruc>on  following  the  CALL  when  RETURN  is  encountered  at  the  end  of  the  subrou>ne.  –  Another  op>on  is  RETLW  (Return  with  Literal  in  W).  See  the  KEYPAD.    –  RETFIE  (Return  From  Interrupt)  will  be  explained  later.  
    • 1/28/13  38  CONTROL  •  NOP  simply  does  nothing  for  one  instruc>on  cycle  (four  clock  cycles).    –  very  useful  for  punng  short  delays  in  the  program  •  SLEEP  stops  the  program,  such  that  it  can  be  restarted  with  an  external  interrupt.    •  The  unused  loca>ons  contain  the  code  3FFF  (all  1  s),  which  is  a  valid  instruc>on  (ADDLW  FF).    •  CLRWDT  means  clear  the  watchdog  >mer.  If  the  program  gets  stuck  in  a  loop  or  stops  for  any  other  reason,  it  will  be  restarted  automa>cally  by  the  watchdog  >mer.    •  To  stop  this  from  happening,  the  watchdog  >mer  must  be  reset  at  regular  intervals  of  less  than,  say,  10  ms,  within  the  program  loop,  using  CLRWDT.  OPTIONAL  INSTRUCTIONS  •  TRIS  was  an  instruc>on  originally  provided  to  make  port  ini>aliza>on  simpler.    –  It  selects  register  bank  1  so  that  the  TRIS  data  direc>on  registers  (TRISA,  TRISB,  etc.)  can  be  loaded  with  a  data  direc>on  code  (e.g.  0àoutput).    •  The  manufacturer  no  longer  recommends  use  of  this  instruc>on,  although  it  is  s>ll  supported    •  The  assembler  direc>ve  BANKSEL  can  be  used  –  It  gives  more  flexible  access  to  the  registers  in  banks  1,  2,  3.    •  The  other  op>on  is  to  change  the  bank  select  bits  in  the  STATUS  register  directly,  using  BSF  and  BCF.    •  OPTION,  providing  special  access  to  the  OPTION  register,  is  the  other  instruc>on,  which  is  no  longer  recommended.    –  It  can  be  replaced  by  BANKSEL  to  select  bank  1  which  contains  the  OPTION  register,  which  can  then  be  accessed  directly.  
    • 1/28/13  39  Program  Execu>on  •  The  program  counter  keeps  track  of  program  execu>on;  it  clears  to  zero  on  power  up  or  reset.    •  With  8k  of  program  memory,  a  count  from  0000  to  1FFF  (8191)  à  requires  (13  bits).    •  The  PCL  (Program  Counter  Low)  register  (SFR  02)  contains  the  low  byte,  and  this  can  be  read  or  wriien  like  any  other  file  register.    •  The  high  byte  is  only  indirectly  accessible  via  PCLATH  (Program  Counter  Latch  High,  SFR  0Ah).  SUBROUTINES  •  A  label  is  used  at  the  start  of  the  subrou>ne  •  When  a  subrou>ne  is  called  (Using  the  CALL  instruc>on),    –  the  des>na>on  address  is  copied  into  the  program  counter  –  the  return  address  (the  one  following  the  CALL)  is  pushed  onto  the  stack  •  In  the  PIC,  there  are  8  stack  address  storage  levels,  which  are  used  in  turn.    •  The  subrou>ne  is  terminated  with  a  RETURN  instruc>on  –  causes  the  program  to  go  back  to  the  original  posi>on  and  con>nue.    –  achieved  by  popping  the  address  from  the  top  of  the  stack  and  replacing  it  in  the  program  counter.    •  CALL  and  RETURN  must  always  be  used  in  sequence  to  avoid  a  stack  error,  and  a  possible  program  crash.    •  In  the  PIC,  the  stack  is  not  directly  accessible  
    • 1/28/13  40  INTERRUPTS  •  The  stack  is  used  when  an  interrupt  is  processed.    •  An  interrupt  is  effec>vely  a  call  and  return  which  is  ini>ated  by  an  external  hardware  signal    •  Forces  the  processor  to  jump  to  a  dedicated  instruc>on  sequence,  an  Interrupt  Service  Rou>ne  (ISR).    –  For  example,  the  MCU  can  be  set  up  so  that  when  a  hardware  >mer  >mes  out  (finishes  its  count),  the  process  required  at  that  >me  is  called  via  a  >mer  interrupt.  •  When  an  interrupt  signal  is  received,  –   the  current  instruc>on  is  completed  and    –  the  address  of  the  next  instruc>on  (the  return  address)  is  pushed  into  the  first  available  stack  loca>on.    –  The  ISR  is  called  –  The  ISR  is  terminated  with  the  instruc>on  RETFIE  (return  from  interrupt),  which  causes  the  return  address  to  be  pulled  from  the  stack.    –  Program  execu>on  then  restarts  at  the  original  loca>on.    •  If  necessary,  the  registers  must  be  saved  at  the  beginning  of  the  ISR,  and  restored  at  the  end,  in  spare  set  of  file  registers.    
    • 1/28/13  41  PAGE  BOUNDARIES  •  Jump  instruc>ons  (CALL  or  GOTO)  provide  only  an  11-­‐bit  des>na>on  address,  so  the  program  memory  is  effec>vely  divided  into  four  2k  blocks,  or  pages.    •  A  jump  across  the  program  memory  page  boundary  requires  the  page  selec>on  bits  to  be  modified  by  the  user  program.    •  Sec>ons  2.3  and  2.4  in  the  16F877  data  sheet  contain  detail  how  to  handle  these  problems.    Special  Func>on  Registers  •  Program  Counter  (PCL)  – PCL  contains  the  low  8  bits  of  the  program  counter  – the  upper  bits  (PC<8–12>)  are  accessed  via  PCLATH.    – PCL  is  incremented  during  each  instruc>on  – The  contents  replaced  during  a  GOTO,  CALL  (program  address)  or  RETURN  (stack).    
    • 1/28/13  42  The  STATUS  register  •  The  status  register  records  the  result  of  certain  opera>ons,  MCU  power  status  and  includes  the  bank  selec>on  bits    •  It  is  recommended,  that  only  BCF,  BSF,  SWAPF  and  MOVWF  instruc>ons  are  used  to  alter  the  STATUS  register,  because  these  instruc>ons  do  not  affect  the  Z,  C  or  DC  bits  from  the  STATUS  register.    
    • 1/28/13  43  ZERO  FLAG  (Z)  •  This  is  set  when  the  result  of  a  register  opera>on  is  zero,  and  cleared  when  it  is  not  zero.    •  Bit  test  and  skip  instruc>ons  use  this  flag  for  condi>onal  branching.    – these  do  not  affect  the  zero  flag  itself.    •  A  typical  use  of  the  zero  flag  is  to  check  if  two  numbers  are  the  same  by  subtrac>ng  and  applying  bit  test  and  skip  to  the  Z  bit.  CARRY  FLAG  (C)  •  This  flag  is  only  affected  by  add,  subtract  and  rotate  instruc>ons.    –  When  two  8-­‐bit  numbers  give  a  9-­‐bit  sum.    The  carry  bit  must  then  be  included  in  subsequent  calcula>ons  to  give  the  right  result.    –  When  subtrac>ng,  the  carry  flag  must  be  set  ini>ally,  because  it  provides  the  borrow  digit  (if  required)  in  the  most  significant  bit  of  the  result.  If  the  carry  flag  is  cleared  aKer  a  subtrac>on,  it  means  the  result  was  nega>ve  •  Taken  together,  the  zero  and  carry  flags  allow  the  result  of  an  arithme>c  opera>on  to  be  detected  as  posi>ve,  nega>ve  or  zero,  as  shown  in  next  slide.  
    • 1/28/13  44  Arithme>c  results  DIGIT  CARRY  (DC)  •  A  file  register  can  be  seen  as  containing  8  individual  bits,  or  1  byte.    •  It  can  also  be  used  as  two  4-­‐bit  nibbles.    •  The  digit  carry  records  a  carry  from  the  most  significant  bit  of  the  low  nibble  (bit  3).  (same  as  auxiliary  carry  in  Intel)  – Allows  4-­‐bit  hexadecimal  arithme>c  to  be  carried  out  in  the  same  way  as  8-­‐bit  binary  arithme>c  uses  the  carry  flag  C.  
    • 1/28/13  45  REGISTER  BANK  SELECT  (RP1:RP0)  •  The  PIC  16F877  file  register  RAM  is  divided  into  four  banks  of  128  loca>ons,  banks  0–3    •  At  power  on  reset,  bank  0  is  selected  by  default.  •  To  access  the  others,  these  register  bank  select  bits  must  be  changed,  •  Some  registers  are  repeated  in  more  than  one  bank,  making  it  easier  and  quicker  to  access  them  when  switched  to  that  bank.    –  Ex:  status  register  repeats  in  all  banks.    •  A  block  of  GPRs  at  the  end  of  each  bank  repeat,  so  that  their  data  contents  are  available  without  changing  banks.  •  The  pseudo-­‐opera>on  BANKSEL  can  be  used.    •  The  operand  for  BANKSEL  is  any  register  in  that  bank,  or  its  –  In  effect,  BANKSEL  detects  the  bank  bits  in  the  register  address  and  copies  them  to  the  status  register  bank  select  bits.  Register  bank  select  
    • 1/28/13  46  POWER  STATUS  BITS  •  There  are  two  read  only  bits  in  the  status  register  which  indicate  the  overall  MCU  status.    •  The  Power  Down  (PD)  bit  is  clear  to  zero  when  SLEEP  mode  is  entered.    •  The  Time  Out  (TO)  bit  is  cleared  when  a  watchdog  >me  out  has  occurred.  Parallel  input/output  •  To  transfer  data  between  uC  CPU  and  the  outside  world  – switches,  keypads,  light-­‐eminng  diodes  (LEDs),  displays,  external  sensors  (analog-­‐to-­‐digital  converter),  motors  or  other  actuators,  and  sending  serial  data  to  an  external  memory.    
    • 1/28/13  47  Ports  •  There  are  five  parallel  ports  in  the  PIC  16F877,  labelled  A–E.    •  All  pins  can  be  used  as  bit-­‐  or  byte-­‐oriented  digital  input  or  output  with    –  Some  having  alternate  func>ons  depending  on  the  ini>aliza>on  of  the  relevant  control  registers.    •  The  TRIS  (data  direc>on)  register  bits  in  bank  1,  default  to  1,  senng  the  ports  B,  C  and  D  as  inputs.    •  Ports  A  and  E  are  set  to  ANALOGUE  INPUT  by  default,  because  the  analogue  control  register  ADCON1  in  bank  1  defaults  to  0  -­‐  -­‐  -­‐  0000.    •  To  set  up  these  ports  for  digital  I/O,  this  register  must  be  loaded  with  the  code  x  -­‐  -­‐  -­‐  011x  (x    don’t  care),e.g.  06h.    •  ADCON1  can  be  ini>alized  with  bit  codes  that  give  a  mixture  of  analogue  and  digital  I/O  on  Ports  A  and  E.  •  ADCON1  is  in  bank  1  so  BANKSEL  is  needed  to  access  it.  Port  func>ons  
    • 1/28/13  48    Two  bits  of  a  possible  digital  output  port    Two  bits  of  a  possible  digital  input  port  
    • 1/28/13  49  Combine  the  two  circuits  to  create  a  programmable  bidirec>onal  input/output  pin  Timers  •  The  PIC  16F877  has  three  hardware  >mers.  –  Used  to  carry  out  >ming  opera>ons  simultaneously  with  the  program.  –  Ex.:  Genera>ng  a  pulse  every  second  at  an  output.  •  Timer0  uses  an  8-­‐bit  register  –  TMR0,  file  register  address  01.    –  The  register  counts  from  0  to  255,  and  then  rolls  over  to  00  again.  –  When  the  register  goes  from  FF  to  00,    an  overflow  flag,  T0IF,  bit  2  in  the  Interrupt  Control  Register  INTCON,  address  0B,  is  set.    •  The  >mer  register  is  incremented  via  a  clock  input  from  either  the  MCU  oscillator  (fOSC)  or  an  external  pulse  train  at  RA4.    •  If  the  internal  clock  is  used,  the  register  acts  as  a  >mer.    •  The  >mers  are  driven  from  the  instruc>on  clock  (fOSC/4).    •  If  the  chip  is  driven  from  a  crystal  of  4  MHz,  the  instruc>on  clock  will  be  1  MHz,  and  the  >mer  will  update  every  1us.  
    • 1/28/13  50  Timers  –  cont.  •  A  >mer  can  work  as  a  counter.    –  Counts  external  pulses    –  >mers  can  also  be  used  as  counters.    •  Timer0,  can  be  controlled  by  a  pre-­‐scaler,  see  next  slide.  •  The  pre-­‐scaler  is  a  divide  by  N  register,  where  N    2,  4,  8,  16,  32,  64,  128  or  256,  meaning  that  the  output  count  rate  is  reduced  by  this  factor.    •  This  extends  the  count  period  or  total  count  by  the  same  ra>o,  giving  a  greater  range  to  the  measurement.    •  The  watchdog  >mer  interval  can  also  be  extended,  if  this  is  selected  as  the  clock  source.    •  The  pre-­‐scale  select  bits,  and  other  control  bits  for  Timer0  are  found  in  OPTION_REG.      BLOCK  DIAGRAM  OF  THE  TIMER0/WDT  PRESCALER  
    • 1/28/13  51    OPTION_REG  REGISTER  Each  of  the  PORTB  pins  has  a  weak  internal  pull-­‐up.  A  single  control  bit  can  turn  on  all  the  pull-­‐ups.  This  is  performed  by  clearing  bit  RBPU  (OPTION_REG<7>).  The  weak  pull-­‐up  is  automa>cally  turned  off  when  the  port  pin  is  configured  as  an  output.  The  pull-­‐ups  are  disabled  on  a  Power-­‐on  Reset.  RB0/INT  is  an  external  interrupt  input  pin  and  is  configured  using  the  INTEDG  bit  (OPTION_REG<6>).  Typical  configura>ons  for  Timer0  
    • 1/28/13  52  Timers  –  cont.  •  Timer1  is  a  16-­‐bit  counter,  consis>ng  of  TMR1H  and  TMR1L  (addresses  0E  AND  0F).  –  When  the  low  byte  rolls  over  from  FF  to  00,  the  high  byte  is  incremented.    –  The  maximum  count  is  therefore  65535,  which  allows  a  higher  count  without  sacrificing  accuracy.  •  Timer2  is  an  8-­‐bit  counter  (TMR2)  with  a  4-­‐bit  pre-­‐scaler,  4-­‐bit  post-­‐scaler  and  a  comparator.    –  It  can  be  used  to  generate  Pulse  Width  Modulated  (PWM)  output  which  is  useful  for  driving  DC  motors  and  servos,  among  other  things.    •  These  >mers  can  also  be  used  in  capture  and  compare  modes,  which  allow  external  signals  to  be  more  easily  measured.    Indirect  File  Register  Addressing  •  File  register  00  (INDF)  is  used  for  indirect  file  register  addressing.    •  The  address  of  the  register  is  placed  in  the  file  select  register  (FSR).    •  When  data  is  wriien  to  or  read  from  INDF,  it  is  actually  wriien  to  or  read  from  the  file  register  pointed  to  by  FSR.    •  This  is  most  useful  for  carrying  out  a  read  or  write  on  a  con>nuous  block  of  GPRs,  –  For  example,  when  saving  data  being  read  in  from  a  port  over  a  period  of  >me.    •  Since  nine  bits  are  needed  to  address  all  file  registers  (000–1FF),  the  IRP  bit  in  the  status  register  is  used  as  the  extra  bit.    
    • 1/28/13  53  Direct  and  indirect  addressing  of  the  file  registers  Interrupt  Control  Registers  •  The  registers  involved  in  interrupt  handling  are  INTCON,  PIR1,  PIR2,  PIE1,  PIE2  and  PCON.    •  Interrupts  are  external  hardware  signals  which  force  the  MCU  to  suspend  its  current  process,  and  carry  out  an  Interrupt  Service  Rou>ne  (ISR).    •  In  PIC  when  an  interrupt  occurs  the  program  execu>on  jumps  to  address  004.    •  By  default,  interrupts  are  disabled.  •  If  interrupts  are  to  be  used    –  the  main  program  start  address  needs  to  be  0005,  or  higher,  and  a  ‘GOTO  start’  (or  similar  label)  placed  at  address  0000.      –  A  ‘GOTO  ISR’  instruc>on  can  then  be  placed  at  004,  using  the  ORG  direc>ve,  which  sets  the  address  at  which  the  instruc>on  will  be  placed  by  the  assembler.  –  The  Global  Interrupt  Enable  bit  (INTCON,  GIE)  must  be  set  to  enable  the  interrupt  system.    –  The  individual  interrupt  source  is  then  enabled.    –  For  example,  the  bit  INTCON,  T0IE  is  set  to  enable  the  Timer0  overflow  to  trigger  the  interrupt  sequence.    –  When  the  >mer  overflows,  INTCON,  T0IF  (Timer0  Interrupt  Flag)  is  set  to  indicate  the  interrupt  source,  and  the  ISR  called.    •  The  flags  can  be  checked  by  the  ISR  to  establish  the  source  of  the  interrupt,  if  more  than  one  is  enabled.  
    • 1/28/13  54  Interrupt  sources  and  control  bits  Macros,  Special  Instruc>ons,  Assembler  Direc>ves  Another  structured  •  Supplementary  instruc>ons  
    • 1/28/13  55  Program  Design  and  flowcharts  •  There  are  two  main  forms  of  flowchart.    – Data  flowcharts:  used  to  represent  complex  data  processing  systems  – Program  flow  charts:  used  to  represent  overall  program  structure  and  sequence,  but  not  the  details.  Previous  Example  flow  chart  
    • 1/28/13  56  Flowchart  implementa>on  Input  &  Output  (Interfacing)  •  Switch  Input  – input  loading  and  debouncing.  
    • 1/28/13  57  Switch  Debouncing  •  Delay  •  Schmit  trigger  •  capacitor  Timer  and  Interrupts  •  Allows  the  MCU  to  proceed  with  other  tasks  while  carrying  out  a  >ming  opera>on  concurrently.    •  Ex:  debouncing  – If  a  hardware  >mer  is  started  when  the  switch  is  first  closed,  the  closure  can  be  confirmed  by  retes>ng  the  input  aKer  a  >me  delay  to  check  if  it  is  s>ll  closed.    – Alterna>vely,  the  switch  input  can  be  processed  aKer  the  buion  is  released,  rather  than  when  it  is  closed.  The  system  responds  when  the  switch  is  released  rather  than  when  it  is  pressed.  
    • 1/28/13  58  Timer  0  •  Show  (LED1H  design  and  code)    –  which  illustrates  the  use  of  a  hardware  >mer  and  the  use  of  interrupt.    •  TMR0  (Timer0)  is  located  at  file  register  address  01.    •  It  operates  as  an  8-­‐bit  binary  up  counter,  driven  from  an  external  or  internal  clock  source.    •  The  count  increments  with  each  input  pulse,  and  a  flag  is  set  when  it  overflows  from  FF  to  00.    •  It  can  be  pre-­‐loaded  with  a  value  so  that  the  >me  out  flag  is  set  aKer  the  required  interval.    –  For  example,  if  it  is  pre-­‐loaded  with  the  number  15610,  it  will  overflow  aKer  100  counts  (25610).  
    • 1/28/13  59  Keypad  Input  •  A  keypad  is  simply  an  array  of  push  buions  connected  in  rows  and  columns,  so  that  each  can  be  tested  for  closure  with  the  minimum  number  of  connec>ons.    •  There  are  12  keys  on  a  phone  type  pad  (0–9,  #,  ∗),  arranged  in  a  3X4  matrix.  The  columns  are  labelled  1,  2,  3  and  the  rows  A,  B,  C,  D.    Keypad  Input  –  cont.  •  If  we  assume  that  all  the  rows  and  columns  are  ini>ally  high,  a  keystroke  can  be  detected  by  senng  each  row  low  in  turn  and  checking  each  column  for  a  zero.  •  In  the  KEYPAD  circuit,  the  7  keypad  pins  are  connected  to  Port  D.    – Bits  4–7  are  ini>alized  as  outputs,  and  bits  0–2  used  as  inputs.    •  The  input  pins  are  pulled  high  to  logic  1.  The  output  rows  are  also  ini>ally  set  to  1.    
    • 1/28/13  60  Keypad  opera>on  •  If  a  0  is  now  output  on  row  A,  there  is  no  effect  on  the  inputs  unless  a  buion  in  row  A  is  pressed.  If  these  are  checked  in  turn  for  a  0,  a  buion  in  this  row  which  is  pressed  can  be  iden>fied  as  a  specific  combina>on  of  output  and  input  bits.  •  A  simple  way  to  achieve  this  result  is  to  increment  a  count  of  keys  tested  when  each  is  checked,  so  that  when  a  buion  is  detected,  the  scan  of  the  keyboard  is  terminated  with  current  key  number  in  the  counter.    •  This  works  because  the  (non-­‐zero)  numbers  on  the  keypad  arranged  in  order:  –  Row  A    1,  2,  3  –  Row  B    4,  5,  6  –  Row  C    7,  8,  9  –  Row  D    *,  0,  #  •  Following  this  system,  the  star  symbol  is  represented  by  a  count  of  10  (0Ah),  zero  by  11(0Bh)  and  hash  by  12  (0C).  •  Show  Keypad  design  and  code.  Calculator  
    • 1/28/13  61  •  The  calculator  operates  as  follows:  – To  perform  a  calcula>on,  press  a  number  key,  then  an  opera>on  key,  then  another  number  and  then  equals.  – The  calcula>on  and  result  are  displayed.  For  the  divide  opera>on,  the  result  is  displayed  as  result  and  remainder.    Pseudo  code  for  the  calculator  •  CALC  –  Single  digit  calculator  produces  two  digit  results.  –  Hardware:  x12  keypad,  2x16  LCD,  P16F887  MCU  •  MAIN  •  Ini>alise  –  PortC  =  keypad  •  RC0  –  RC3  =  output  rows  •  RC4  –  RC7  =  input  columns  –  PortD  =  LCD  •  RD1,  RD2  =  control  bits  •  RD4–  RD7  =  data  bits  –  CALL  Ini>alise  display  •  Scan  Keypad  –  REPEAT  •  CALL  Keypad  input,  Delay  50ms  for  debounce  •  CALL  Keypad  input,  Check  key  released  •  IF  first  key,  load  Num1,  Display  character  and  restart  loop  •  IF  second  key,  load  sign,  Display  character  and  restart  loop  •  IF  third  key,  load  Num2  Display  character  and  restart  loop  •  IFfourth  key,  CALL  Calculate  result  •  IF  fiKh  key,  Clear  display  –  ALWAYS  
    • 1/28/13  62  Subrou>nes    •  Included  LCD  driver  rou>nes  –  Ini>alise  display  –  Display  character  •  Keypad  Input  –  Check  row  A,  IF  key  pressed,  load  ASCII  code  –  Check  row  B,  IF  key  pressed,  load  ASCII  code  –  Check  row  C,  IF  key  pressed,  load  ASCII  code  –  Check  row  D,  IF  key  pressed,  load  ASCII  code  –  ELSE  load  zero  code  •  Calculate  result  –  IF  key  =  ‘+’,  Add  –  IF  key  =  ‘-­‐‘,  Subtract  –  IF  key  =  ‘x’,  Mul>ply  –  IF  key  =  ‘/’,  Divide  –  Add  Add  Num1  +  Num2  •  Load  result,  CALL  Two  digits  –  Subtract  Subtract  Num1  –  Num2  •  IF  result  nega>ve,  load  minus  sign,  CALL  Display  character  •  Load  result,  CALL  Display  character  Subrou>nes  –  cont.  –  Mul>ply  •  REPEAT  •  Add  Num1  to  Result  •  Decrement  Num2  •  UNTIL  Num2=  0  •  Load  result,  CALL  Two  digits  –  Divide  •  REPEAT  •  Subtract  Num2  from  Num1  •  Increment  Result  •  UNTIL  Num1  nega>ve  •  Add  Num2  back  onto  Num1  for  Remainder  •  Load  Result,  CALL  Display  character  •  Load  Remainder,  CALL  Display  character  •  Two  digits  –  Divide  result  by  10,  load  MSD,  CALL  Display  character  –  Load  LSD,  CALL  Display  character  
    • 1/28/13  63  •  Show  calc  code  and  design    ADC  •  Registers  used      – ADCON0  – ADCON1  – The  output  from  the  converter  is  stored  in  ADRESH  (analogue  to  digital  conversion  result,  high  byte)  and  ADRESL  (low  byte).    •  Show  ADC  code  and  design  (VINTEST)  
    • 1/28/13  64  8-­‐bit  Conversion  •  The  16F877  MCU  has  eight  analogue  inputs  available,  at  RA0,  RA1,  RA2,  RA3,  RA5,  RE0,  RE1  and  RE2.    •  RA2  and  RA3  may  be  used  as  reference  voltage  inputs,  senng  the  minimum  and  maximum  values  for  the  measured  voltage  range.    •  These  inputs  default  to  analogue  opera>on,  so  the  register  ADCON1  has  to  be  ini>alized  explicitly  to  use  these  pins  for  digital  input  or  output.  •  The  ADC  converts  an  analogue  input  voltage  (e.g.  0  –  2.56V)  to  10-­‐bit  binary,  but  only  the  upper  8  bits  of  the  result  are  used,  giving  a  resolu>on  of  10  mV  per  bit  ((1/256)  X  2.56  V).  ADC  block  diagram  
    • 1/28/13  65  ADC  OPERATION  •  The  inputs  are  connected  to  a  func>on  selector  block  which  sets  up  each  pin  for  analogue  or  digital  opera>on  according  to  the  4-­‐bit  control  code  loaded  into  the  A/D  port  configura>on  control  bits,  PCFG0–PCFG3  in  ADCON1.    –  The  code  used,  0011,  sets  Port  E  as  digital  I/O,  and  Port  A  as  analogue  inputs  with  AN3  as  the  posi>ve  reference  input.  •  The  analogue  inputs  are  then  fed  to  a  mul>plexer  which  allows  one  of  the  eight  inputs  to  be  selected  at  any  one  >me.    –  This  is  controlled  by  the  three  analogue  channel  select  bits,  CHS0–CHS2  in  ADCON0.    –  In  the  example,  channel  0  is  selected  (000),  RA0  input.    –  If  more  than  one  channel  is  to  be  sampled,  these  select  bits  need  to  be  changed  between  ADC  conversions.    •  The  conversion  is  triggered  by  senng  the  GO/DONE  bit,  which  is  later  cleared  automa>cally  to  indicate  that  the  conversion  is  complete.    ADC  control  registers  
    • 1/28/13  66  ADC  Test  Circuit  ADC  clock  •  The  speed  of  the  conversion  is  selected  by  bits  ADSC1  and  ADSC0.    •  The  ADC  operates  by  successive  approxima>on;    –  this  means  that  the  input  voltage  is  fed  to  a  comparator,  and  if  the  voltage  is  higher  than  50%  of  the  range,  the  MSB  of  the  result  is  set  high.    –  The  voltage  is  then  checked  against  the  mid-­‐point  of  the  remaining  range,  and  the  next  bit  set  high  or  low  accordingly,  and  so  on  for  10  bits.    •  This  takes  a  significant  amount  of  >me:  the  minimum  conversion  >me  is  1.6  μs  per  bit,  making  16  μs  for  a  10-­‐bit  conversion.    •  The  ADC  clock  speed  must  be  selected  such  that  this  minimum  >me  requirement  is  sa>sfied;    •  The  MCU  clock  is  divided  by  2,  8  or  32  as  necessary.    •  Our  simulated  test  circuit  is  clocked  at  4  MHz.  This  gives  a  clock  period  of  0.25  μs.  We  need  a  conversion  >me  of  at  least  1.6  μs;  if  we  select  the  divide  by  8  op>on,  the  ADC  clock  period  will  then  be  8  X  0.25  =  2  μs,  which  is  just  longer  than  the  minimum  required.  •  The  select  bits  are  therefore  set  to  01.  
    • 1/28/13  67  Power-­‐up  and  Reset  •  When  the  microcontroller  powers  up,  it  must  start  running  its  program  from  its  beginning  –  for  the  16F84A  it  is  from  reset  vector.    •  Done  by  explicit  circuitry  which  is  built  in  to  detect  power-­‐up.  •  Then  SFRs  are  set  so  that  peripherals  are  ini>ally  in  a  safe  and  disabled  state.  •  This  is  called  ‘Reset’.    •  In  the  16F84A  there  is  a  Reset  input,  MCLR  (‘Master  Clear’),  on  pin  4;  •  As  long  as  this  is  held  low,  the  microcontroller  is  held  in  Reset.    •  When  it  is  taken  high,  program  execu>on  starts.    •  If  the  pin  is  taken  low  while  the  program  is  running,  then  program  execu>on  stops  immediately  and  the  microcontroller  is  forced  back  into  Reset  mode.  •  This  is  important  because  Both  the  power  supply  and  the  clock  oscillator  take  a  finite  amount  of  >me  to  stabilize.  –  So  the  program  should  only  start  only  when  every  thing  stabilized,  but  when?  •  If  a  resistor  capacitor  circuit  is  connected  to  the  Reset  input,  then  when  power  is  applied,  the  capacitor  voltage  rises  according  to  the  RC  >me  constant,  which  can  be  made  as  big  as  is  wanted.  For  a  certain  >me,  because  it  is  rising  compara>vely  slowly,  the  Reset  input  is  at  Logic  0.  Thus,  the  microcontroller  can  be  held  in  Reset  while  its  power  supply  stabilizes  and  while  the  clock  oscillator  starts  up.  Power-­‐up  and  Reset  –  cont.  •  But  what  if  the  power  is  switched  off  and  then  on  again  quickly  –  A  cruel  and  challenging  thing  to  do  to  any  electronic  device.  •  The  capacitor  wouldn’t  have  >me  to  discharge  and  the  Reset  condi>on  might  not  be  properly  applied  when  power  is  applied  again.    –  More  dangerously,  the  capacitor  voltage  might  exceed  the  voltage  supplied  to  the  microcontroller  and  excessive  current  could  then  flow  from  the  capacitor  into  the  Reset  input.    –  Can  be  solved  by  adding  a  simple  discharge  diode  •  This  ensures  that  the  capacitor  discharges  more  or  less  at  the  same  rate  as  the  VDD  supply.    –  The  resistor  RS  is  also  included  to  limit  current  into  the  Reset  input  if  the  capacitor  voltage  does  inadvertently  exceed  the  voltage  supplied  to  the  microcontroller  or  another  fault  condi>on  occurs.  
    • 1/28/13  68  Power-­‐up  and  Reset  •  If  the  designer  wishes  to  include  a  Reset  buion,  then  circuit  can  be  applied.  This  is  par>cularly  useful  for  prototype  circuits,  where  a  large  amount  of  tes>ng  is  expected.    •  Then  it  is  convenient  to  be  able  to  reset  a  program  that  may  have  crashed.    –  R  is  a  pull-­‐up  resistor,  whose  value  can  be  in  the  range  10-­‐100  kΩ.    •  In  a  commercial  device  it  is  usually  not  desirable  to  have  a  Reset  buion;  the  aim  here  is  to  design  the  product  so  that  reset  by  the  user  is  never  needed.  On-­‐chip  Reset  •  One  of  Microchip’s  goals  is  to  minimize  the  number  of  external  components  needed  for  their  microcontrollers.    –  The  16F84A  includes  some  clever  on-­‐chip  reset  circuitry.  –  Reset  Components  unnecessary  (except  when  a  switch  is  needed).    •  A  Power-­‐up  Timer  is  included  on-­‐chip,  which  can  be  enabled  by  the  user  with  bit  3  of  the  Configura>on  Word.  –  The  16F84A  detects  that  power  has  been  applied  and  the  Power-­‐up  Timer  then  holds  the  controller  in  Reset  for  a  fixed  >me.    –  Once  this  is  over  the  microcontroller  leaves  Reset  and  program  execu>on  Begins.  •  In  the  internal  reset  circuit  of  the  16F84A,  the  actual  reset  to  the  CPU,  Chip_Reset,  is  generated  by  a  flip-­‐flop,  which  appears  to  the  right  of  the  diagram,  see  next  slide.    •  The  flip-­‐flop  has  two  inputs,  S  (Set)  and  R  (Reset).    –  The  CPU  enters  Reset  mode  when  Chip_Reset  goes  low,  which  is  caused  by  the  S  line  going  high.    –  It  stays  there  un>l  the  flip-­‐flop  is  cleared,  caused  by  the  R  line  going  high.  •  So  what  causes  a  reset?  The  S  input  to  the  flip-­‐flop  goes  high,  via  a  three-­‐input  OR  gate,  if  any  of  the  following  goes  high:  –  External  Reset,  from  the  MCLR  line.  –  Time-­‐out  Reset,  from  the  Watchdog  Timer  (WDT);  this  is  designed  to  occur  if  a  program  crash  occurs.  –  Power-­‐on  Reset,  output  of  the  circuit  that  detects  power  being  applied  (‘VDD  Rise  Detect’).  
    • 1/28/13  69  On-­‐chip  Reset  –  cont.  On-­‐chip  Reset  –  cont.  •  When  the  R  input  to  the  flip-­‐flop  is  ac>vated,  the  Chip_Reset  line  returns  to  1  and  the  PIC  microcontroller  is  enabled.  –  The  three  requirements  to  be  sa>sfied  here,  determined  by  the  inputs  to  the  associated  AND  gate,  are  that  both  power  supply  and  oscillator  have  stabilized,  and  that  any  demand  for  Reset  has  been  cleared.    •  Achieved  by,  the  Power-­‐up  Timer  (PWRT)  and  the  Oscillator  Start-­‐up  Timer  (OST).    –  The  Power-­‐up  Timer  can  be  enabled  by  senng  its  bit  in  the  Configura>on  Word.    –  The  Oscillator  Start-­‐up  Timer  is  enabled  via  the  Enable  OST  line.    –  Set  automa>cally  by  the  user  oscillator  senng  in  the  Configura>on  Word.    •  Enables  it  for  all  oscillator  modes  except  RC.    •  The  Power-­‐up  Timer  is  clocked  by  its  own  on-­‐chip  RC  oscillator,  and  when  enabled  counts  1024  cycles  of  its  oscillator  before  senng  its  output  to  1.  –  This  >me  dura>on  turns  out  to  be  around  72  ms.    •  If  all  lines  are  high,  i.e.  both  counters  have  completed  their  count  and  there  is  no  demand  for  a  Reset,  then  the  flip-­‐flop  is  cleared.    –  The  CPU  accordingly  leaves  the  Reset  condi>on  and  starts  running.  
    • 1/28/13  70  On-­‐Chip  Reset  Port  electrical  characteris>cs  
    • 1/28/13  71  Pull-­‐up/pull-­‐down  resistor  Programming  with  PIC  C  •  Names  –  make  them  fit  their  func>on  •  Use  mixed  case  names  to  improve  the  readability  – ErrorCheck  is  easier  than  ERRORCHECK  •  Prefix  names  with  a  lowercase  leier  of  their  type,  again  to  improve  readability:  – g    Global      gLog;  – r    Reference    rStatus();  – s    Sta>c        sValueIn;  
    • 1/28/13  72  Braces{}  and  spaces  •  Braces  or  curly  brackets  can  be  used  in  the  tradi>onal  UNIX  way  –  if  (condi>on)  {  –  …………….  –  }  •  or  the  preferred  method  which  is  easier  to  read  –  if  (condi>on)  –  {  –  …………….  –  }  •  Indent  text  only  as  needed  to  make  the  soKware  readable.  •  Keep  line  lengths  to  78  characters  for  compa>bility  between  monitors  and  printers.  TIPs  •  Where  the  compiler  allows  it,  always  put  the  constant  on  the  leK  hand  side  of  an  equality  /  inequality  comparison,  If  one  =  is  omiied,  the  compiler  will  find  the  error  for  you.    – if  (  6  ==  ErrorNum)  …    •  Set  all  variables  to  a  known  values  to  prevent  ‘floa>ng  or  random  condi>ons’  – int  a=6,  b=0;    •  Use  comments  
    • 1/28/13  73  Genng  Started  •  A  simple  program  is  the  ‘Press  buion  –  turn  on  LED’.    •  main    b…ss  porta,switch    ;test  for  switch  closure        goto  main          ;loop  un>l  pressed        bsf  portb,led        ;turn  on  led    lp1    b…sc  porta,switch    ;test  for  switch  open        goto  lp1            ;loop  un>l  released        bcf  portb,led        ;turn  off  led        goto  main          ;loop  back  to  start  IN  PIC  C  main()  {    set_tris_b(0x00);          //set  port  b  as  outputs    while(true)    {      if  (input(PIN_A0))        //test  for  switch  closure        output_high(PIN_B0);  //if  closed  turn  on  led      else        output_low(PIN_B0);  //if  open  turn  off  led    }  }  
    • 1/28/13  74  C  Fundamentals  The  topics  discussed  are  •  Program  structure  •  Components  of  a  C  program  •  #pragma  •  main  •  #include  direc>ve  •  prin…  statement  •  Variables  •  Constants  •  Comments  •  Func>ons  •  C  keywords  
    • 1/28/13  75  The  Structure  of  C  Programs  •  Preprocessor  direc>ve    –  The  two  most  common  preprocessor  direc>ves  are  the  #define  direc>ve,  which  subs>tutes  text  for  the  specified  iden>fier,  and  the  #include  direc>ve,  which  includes  the  text  of  an  external  file  into  a  program.  •  Declara>on:  A  declara>on  establishes  the  names  and  aiributes  of  variables,  func>ons,  and  types  used  in  the  program.    –  Global  variables  are  declared  outside  func>ons  and  are  visible  from  the  end  of  the  declara>on  to  the  end  of  the  file.    –  A  local  variable  is  declared  inside  a  func>on  and  is  visible  form  the  end  of  the  declara>on  to  the  end  of  the  func>on.  •  Defini>on:  A  defini>on  establishes  the  contents  of  a  variable  or  func>on.  A  defini>on  also  allocates  the  storage  needed  for  variables  and  func>ons.  •  Expression:  An  expression  is  a  combina>on  of  operators  and  operands  that  yields  a  single  value.  •  Statement:  Statements  control  the  flow  or  order  of  program  execu>on  in  a  C  program.  •  Func>on:  A  func>on  is  a  collec>on  of  declara>ons,  defini>ons,  expressions,  and  statements  that  performs  a  specific  task.  Braces  enclose  the  body  of  a  func>on.  Func>ons  may  not  be  nested  in  C.  main  Func>on  
    • 1/28/13  76  THE  8086  INTERNAL  ORGANIZATION  Pipelining  •  The  CPU  could  either  fetch  or  execute  at  a  given  >me.  CPU  had  to  fetch  an  instruc>on  from  the  memory,  then  execute  it,  then  fetch  again  and  execute  it  and  so  on..  •  Pipelining  is  the  simplest  form,  is  to  allow  the  CPU  to  fetch  and  execute  at  the  same  >me.  Note  that  the  fetch  and  execute  >mes  can  be  different.  •  Intel  implemented  the  concept  of  pipelining  by  splinng  the  internal  structure  of  8088/86  into  two  sec>ons.  –  The  execu>on  unit  (EU)  –  The  bus  interface  unit  (BIU)  –  These  two  sec>ons  work  simultaneously.  BIU  accesses  memory  and  peripherals  while  the  EU    executes  the  instruc>ons  previously  fetched.  
    • 1/28/13  77  Registers  of  8086  Microprocessor  •  In  the  CPU,  registers  are  used  to  store  informa>on  temporarily.  The  informa>on  can  be  one  or  two  bytes  of  data,  or  the  address  of  data.  •  In  8088/8086    –  General-­‐purpose  registers  can  be  accessed  as  either16-­‐bit  or  8-­‐bit  registers.    –  All  other  registers  can  be  accessed  as  full  16-­‐bit  registers.  –  Ex:  AXà  –  The  bits  of  the  registers  are  numbered  in  descending  order:  –     Registers  of  8086  Microprocessor  •  Different  registers  are  used  for  different  func>ons.  •  The  first  leier  of  each  general  register  indicates  its  use.  –  AX  is  used  for  the  accumulator.  –  BX  is  used  for  base  addressing  register.  –  CX  is  used  for  counter  loop  opera>ons.  –  DX  is  used  to  point  out  data  in  I/O  opera>ons.  •  Note:  the  general  registers  can  be  accessed  as  full  16  bits  (such  as  AX),  or  as  the  high  byte  only  (AH)  or  low  byte  only  (AL).  The  others  are  not!!  •     
    • 1/28/13  78  INTRODUCTION  TO  ASSEMBLY  PROGRAMMING  •  Machine  Language:  –  Programs  consist  of  0s  and  1s  are  called  machine  language.  –  Assembly  Languages  provided  mnemonics  for  machine  code  instruc>ons.  –  Mnemonics  refer  to  codes  and  abbrevia>ons  to  make  it  easier  for  the  users  to  remember.  •  Low  /  High  level  languages:  –  Assembly  Language  is  a  low-­‐level  language.  Deals  directly  with  the  internal  structure  of  CPU.  Assembler  translates  Assembly  language  program  into  machine  code.  –  In  high-­‐level  languages,  Pascal,  Basic,  C;  the  programmer  does  not  have  to  be  concerned  with  internal  details  of  the  CPU.  Compilers  translate  the  program  into  machine  code.  •  Assembly  Language  programming:  –  Assembly  Language  program  consists  of  series  of  lines  of  Assembly  language  instruc>ons.  –  Instruc>on  consists  of  a  mnemonic  and  two  operands.  MOV  instruc>on  •  MOV  des>na>on,  source;  copy  source  operand  to  des>na>on  mnemonic  operands  •  Example:  (8-­‐bit  )  –  MOV  CL,55H  ;move  55H  into  register  CL  –  MOV  DL,CL  ;move/copy  the  contents  of  CL  into  DL  (now  DL=CL=55H)  –  MOV  BH,DL  ;move/copy  the  contents  of  DL  into  BH  (now  DL=BH=55H)  –  MOV  AH,BH  ;move/copy  the  contents  of  BH  into  AH  (now  AH=BH=55H)  •  Example:  (16-­‐bit)  –  MOV  CX,468FH  ;move  468FH  into  CX  (now  CH  =46  ,  CL=8F)  –  MOV  AX,CX  ;move/copy  the  contents  of  CX  into  AX  (now  AX=CX=468FH)  –  MOV  BX,AX  ;now  BX=AX=468FH  –  MOV  DX,BX  ;now  DX=BX=468FH  –  MOV  DI,AX  ;now  DI=AX=468FH  –  MOV  SI,DI  ;now  SI=DI=468FH  –  MOV  DS,SI  ;now  DS=SI=468FH  –  MOV  BP,DS  ;now  BP=DS=468FH  •  Data  can  be  moved  among  all  registers  except  the  flag  register.  There  are  other  ways  to  load  the  flag  registers.  To  be  studied  later.  •  Source  and  des>na>on  registers  have  to  match  in  size.  •  Data  can  be  moved  among  all  registers  (except  flag  reg.)  but  data  can  be  moved  directly  into  nonsegment  registers  only.  You  can’t  move  data  segment  registers  directly.  •  Examples:  –  MOV  BX,14AFH  ;move  14AFH  into  BX  (legal)  –  MOV  SI,2345H  ;move  2345H  into  SI  (legal)  –  MOV  CS,2A3FH  ;move  2A3FH  into  CS  (illegal)  –  MOV  FR,BX  ;move  the  content  of  BX  into  FR  (illegal)  –  MOV  DS,14AFH  ;move  14AFH  into  DS  (illegal)  •  Values  cannot  be  loaded  directly  into  (CS,DS,SS  and  ES)  –  MOV  AX,1234H  ;  load  1234H  into  AX  –  MOV  SS,AX  ;load  the  value  in  AX  into  SS  •  Sizes  of  the  values:  –  MOV  BX,2H  ;  BX=0002H,  BL:02H,  BH:00H  –  MOV  AL,123H  ;  illegal  (larger  than  1  byte)  –  MOV  AX,3AFF21H  ;  illegal  (larger  than  2  bytes)  
    • 1/28/13  79  ADD  instruc>on  •  ADD  des>na>on,  source  ;  add  the  source  operand  to  des>na>on  mnemonic  operands  •  Ex:  –  MOV  AL,24H  ;move  24H  into  AL  –  MOV  DL,11H  ;move  11H  into  DL  –  ADD  AL,DL  ;AL=AL+DL  (AL=35H)  (DL  =11H)  –  MOV  CH,24H  ;move  24H  into  CH  –  MOV  BL,11H  ;move  11H  into  BL  –  ADD  CH,BL  ;CH=CH+BL  (CH=35H)  –  MOV  CH,24H  ;load  one  operand  into  CH  –  ADD  CH,11H  ;add  the  second  operand  to  CH  (CH=35H)  •  If  one  register  data  is  followed  by  an  immediate  data,  it  is  called  the  immediate  operand.  –  MOV  CH,24H  –  ADD  CH,11H  •  8-­‐bit  registers  can  hold  FFH  (255)  maximum.  Addi>on  of  larger  numbers  can  be  performed  by  the  16-­‐bit  nonsegment  registers.  –  MOV  AX,34EH  –  MOV  DX,6A5H  –  ADD  DX,AX  ;DX=DX+AX  (DX=9F3H)  –  MOV  CX,34EH  –  ADD  CX,6A5H  ;CX=34EH+6A5=9F3H  PROGRAM  SEGMENTS  •  A  segment  is  an  area  of  memory  that  includes  up  to  64K  bytes  and  begins  an  address  evenly  divisible  by  16  (such  an  address  ends  in  0H).  •  Assembly  Language  Program  consists  of  Four  segments:  –  code  segment  :  contains  the  program  code  (instruc>ons)  –  data  segment  :  used  to  store  data  (informa>on)  to  be  processed  by  the  program  –  stack  segment:  used  to  store  informa>on  temporarily.  –  Extra  segment:  used  also  to  store  data  (not  commonly  used)  •  Logical  and  Physical  Address  –  Physical  Address  is  the  20-­‐bit  address  that  actually  put  on  the  address  bus.  (in  8086)  •  Has  a  range  of  00000H  –  FFFFFH  –  Offset  Address  is  a  loca>on  within  64K  byte  segment  range.  •  Has  a  range  of  0000H  –  FFFFH  –  Logical  Address  consists  of  segment  address  and  offset  address.  
    • 1/28/13  80  Addressing  in  Code  segment  •  To  execute  a  program,  the  8086  fetches  the  instruc>ons  from  the  code  segment.  •  The  logical  address  of  an  instruc>on  consists  CS  (Code  Segment)  and  IP(instruc>on  pointer)    •  Physical  Address  is  generated  by  shiKing  the  CS  one  hex  digit  to  the  leK  and  adding  IP.  –  Example:  CS:IP  =>  2500:95F3H  •  Start  with  CS  2500  •  ShiK  leK,  mult  by  10,  or  just  add  zero  so  that  CS  25000  •  Add  IP  2E5F3  (25000+95F3)  •  The  microprocessor  will  retrieve  the  instruc>on  in  turn  memory  loca>ons  star>ng  from  2E5F3  •  Ex:  If  CS=24F6H  and  IP=634AH,  determine:  –  a)  The  logical  address    b)  The  offset  address  c)  The  physical  address    d)  The  lower  range  of  the  code  segment  e)  The  upper  range  of  the  code  segment      –  Answer:  •  a)  The  logical  address  is;  24F6:634A  •  b)  The  offset  address  is;  634A  •  c)  The  Physical  address  is;  24F60+634A=  2B2AA  •  d)  The  lower  range  of  the  code  segment:  24F6:0000  =>  24F60+0000  =24F60  •  e)  The  upper  range  of  the  code  segment:  24F6:FFFF  =>  24F60+FFFF=34F5F  Data  segment  •  The  area  of  memory  allocated  strictly  for  data  is  called  data  segment.  •  Just  as  the  code  segment  is  associated  with  CS  and  IP  as  segment  register  and  offset.  The  data  segment  uses  DS  and  an  offset  value.  In  8086  BX,  SI  and  DI  are  used  to  hold  the  offset  address.  
    • 1/28/13  81  Using  the  data  segment  •  Assume  that  a  program  is  needed  to  add  5  bytes  of  data  (25H,  12H,  15H,1FH  and  2BH)  •  One  way:    –  MOV  AL,00H  ;ini>alize  AL  –  ADD  AL,25H  –  ADD  AL,12H  –  ADD  AL,15H            code  and  data  are  mixed  –  ADD  AL,1FH  –  ADD  AL,2BH  ;  AL=25+12+15+1F+2B  •  Other  way:    –  Assume  that  the  offset  for  data  segment  begins  at  200H  –  DS:0200  =  25  –  DS:0201  =  12  –  DS:0202  =  15                                              within  data  segment  –  DS:0203  =  1F  –  DS:0204  =  2B  –  MOV  AL,0  ;clear  AL  –  ADD  AL,[0200]  ;add  the  contents  of  DS:200  to  AL  –  ADD  AL,[0201]  ;add  the  contents  of  DS:201  to  AL  –  ADD  AL,[0202]  ;add  the  contents  of  DS:202  to  AL  –  ADD  AL,[0203]  ;add  the  contents  of  DS:203  to  AL  –  ADD  AL,[0204]  ;add  the  contents  of  DS:204  to  AL  Liile  endian  conven>on  •  Given  8-­‐bit  (1-­‐byte)  data,  bytes  are  stored  one  aKer  the  other  in  the  memory.  However  given16-­‐bit  (2-­‐bytes)  of  data  how  are  date  stored?  –  Ex:    •  MOV  AX,35F3H  :load  35F3H  into  AX  •  MOV  [1500],AX  :  copy  contents  of  AX  to  offset  1500H  –  In  such  a  case  the  low  byte  goes  to  the  low  memory  loca>on  and  high  byte  goes  to  the  high  memory  loca>on.  •  DS:1500  =  F3  DS:1501  =  35  •  This  conven>on  is  called  liile  endian  conven>on:  This  conven>on  is  used  by  Intel.    •  The  big  endian  conven>on  is  the  opposite,  where  the  high  byte  goes  to  the  low  address  and  low  byte  goes  to  the  high  address.  Motorolla  microprocessor  uses  this  conven>on.  
    • 1/28/13  82  MEMORY  MAP  OF  THE  IBM  PC  •  The  20-­‐bit  address  of  the  8086/8088  allows  1M  byte  of  (1024  K  bytes)  memory  space  with  the  address  range  00000-­‐FFFFF.  •  The  alloca>on  of  the  memory  is  called  a  memory  map.    MEMORY  MAP  OF  THE  IBM  PC  –  cont.  •  RAM:    –  Memory  loca>ons  from  00000H  to  9FFFFH  (640K)  are  set  aside  for  RAM.  In  an  IBM  PC  the  DOS  opera>ng  system  first  allocates  the  available  RAM  on  the  PC  for  its  own  use  and  let  the  rest  be  used  for  applica>ons  such  as  word  processors.  –  The  amount  of  memory  used  by  DOS  varies  among  its  various  versions.  That  is  why  we  do  not  assign  any  values  for  the  CS,  DS,  SS,  and  ES.  Memory  management  func>ons  within  DOS  handle  this  for  the  opera>ng  system.  •  Video  RAM:    –  Memory  loca>ons  from  A0000H  to  BFFFFH  (128K)  are  set  aside  for  video.  This  amount  varies  depending  on  the  video  board  installed  on  the  PC.  •  ROM:    –  Memory  loca>ons  from  C0000H  to  FFFFFH  (256K)  are  set  aside  for  ROM.  First  64  K  bytes  is  used  by  BIOS  (Basic  Input/Output  System)  ROM.  Some  of  the  remaining  space  is  used  for  adapter  cards.  •  Func>on  of  BIOS  ROM:  –  CPU  can  only  execute  programs  that  are  stored  in  memory,  there  must  be  some  permanent  (nonvola>le)  memory  to  hold  the  programs  telling  the  CPU  what  to  do  when  the  power  is  turned  on.  –  BIOS  contains  programs  to  test  RAM  and  other  components  connected  to  the  CPU.  
    • 1/28/13  83  STACK  •  What  is  a  stack,  and  why  is  it  needed?  –  The  stack  is  a  sec>on  of  read/write  memory  (RAM)  used  by  the  CPU  to  store  informa>on  temporarily.  CPU  needs  this  storage  area  since  there  are  only  limited  number  of  registers.  •  How  stacks  are  accessed  –  SS  (stack  segment)  and  SP  (stack  pointer)  must  be  loaded  to  access  stack  in  the  memory.  –  Every  register  in  the  CPU  (except  segment  registers  and  SP)  can  be  stored  in  the  stack  and  loaded  from  the  stack.  Stack:  PUSHING  OPERATIONS  •  Storing  the  CPU  register  in  the  stack  is  called  a  push.  •  Ex:  SP=1236,  AX=24B6,  DI=85C2,  and  DX=5F93,  show  the  contents  of  the  stack  as  each  instruc>on  is  executed.  PUSH  AX,  PUSH  DI,  PUSH  DX  •     
    • 1/28/13  84  Popping  the  stack  •  Loading  the  contents  of  the  stack  into  the  CPU  register  is  called  a  pop.  •  Ex:  assume  that  the  stack  is  shown  below,  and  SP=18FA,  show  the  contents  of  the  stack  and  registers  as  each  of  the  following  instruc>ons  is  executed.  POP  CX,  POP  DX,  POP  BX  •     THE  FLAG  REGISTER  (FR)  AND  BIT  FIELDS  •  The  flag  register  is  a  16-­‐bit  register  some>mes  referred  as  the  status  register.  Although  the  register  is  16-­‐bit.  Not  all  the  bits  are  used.  •  Condi>onal  flags:  6  of  the  flags  are  called  the  condi>onal  flags,  meaning  that  they  indicate  some  condi>on  that  resulted  aKer  an  instruc>on  was  executed.  These  6  are:  CF,  PF,  AF,  ZF,  SF,  and  OF.  •  The  16  bits  of  the  flag  registers:  •     
    • 1/28/13  85  THE  FLAG  REGISTER  (FR)  AND  BIT  FIELDS  •  CF,  the  Carry  Flag:  This  flag  is  set  whenever  there  is  a  carry  out,  either  from  d7  aKer  an  8-­‐bit  opera>on,  or  from  d15  aKer  a  16-­‐bit  data  opera>on.  •  PF,  the  Parity  Flag:  AKer  certain  opera>ons,  the  parity  of  the  result’s  low-­‐order  byte  is  checked.  If  the  byte  has  an  even  number  of  1s,  the  parity  flag  is  set  to  1;  otherwise,  it  is  cleared.  •  AF,  the  Auxiliary  Carry  Flag:  If  there  is  a  carry  from  d3  to  d4  of  an  opera>on  this  bit  is  set  to  1,  otherwise  cleared  (set  to  0).  •  ZF,  the  Zero  Flag:  The  ZF  is  set  to  1  if  the  result  of  the  arithme>c  or  logical  opera>on  is  zero,  otherwise,  it  is  cleared  (set  to  0).  •  SF,  the  Sign  Flag:  MSB  is  used  as  the  sign  bit  of  the  binary  representa>on  of  the  signed  numbers.  AKer  arithme>c  or  logical  opera>ons  the  MSB  is  copied  into  SF  to  indicate  the  sign  of  the  result.  •  TF,  the  Trap  Flag:  When  this  flag  is  set  it  allows  the  program  to  single  step,  meaning  to  execute  one  instruc>on  at  a  >me.  Used  for  debugging  purposes.  •  IF,  Interrupt  Enable  Flag:  This  bit  is  set  or  cleared  to  enable  or  disable  only  the  external  interrupt  requests.  •  DF,  the  Direc>on  Flag:  This  bit  is  used  to  control  the  direc>on  of  the  string  opera>ons.  •  OF,  the  Overflow  Flag:  This  flag  is  set  whenever  the  result  of  a  signed  number  opera>on  is  too  large,  causing  the  high-­‐order  bit  to  overflow  into  the  sign  bit.  Flag  Register  and  ADD  instruc>on  •  The  flag  bits  affected  by  the  ADD  instruc>ons  are:  CF,  PF,  AF,  ZF,  SF  and  OF.    •  Ex:  Show  how  the  flag  register  is  affected  by  the  addi>on  of  38H  and  2FH.    –  CF  =  0  since  there  is  no  carry  beyond  d7  –  PF  =  0  since  there  is  odd  number  of  1`s  in  the  result  –  AF  =  1  since  there  is  a  carry  from  d3  to  d4  –  ZF  =  0  since  the  result  is  not  zero  –  SF  =  0  since  d7  of  the  result  is  zero  •  Ex:  Show  how  the  flag  register  is  affected  by  the  following  addi>on        –  CF  =  0  since  there  is  no  carry  beyond  d15  –  PF  =  0  since  there  is  odd  number  of  1s  in  the  lower  byte  –  AF  =  1  since  there  is  a  carry  from  d3  to  d4  –  ZF  =  0  since  the  result  is  not  zero  –  SF  =  1  since  d15  of  the  result  is  1  •  Note  that  the  MOV  instruc>ons  have  no  effect  on  the  flag  
    • 1/28/13  86  Use  of  zero  flag  for  looping  •  Zero  flag  is  used  to  implement  the  program  loops.  Loop  refers  to  a  set  of  instruc>ons  that  is  repeated  a  number  of  >mes.  •  The  following  example  shows  the  implementa>on  of  the  loop  concept  in  the  program  which  adds  5  bytes  of  data.    •  Ex:    –  MOV  CX,05  ;  CX  holds  the  loop  count  –  MOV  BX,0200H  ;  BX  holds  the  offset  data  address  –  MOV  AL,00  ;  ini>alize  AL  –  ADD_LP:  ADD  AL,[BX]  ;  add  the  next  byte  to  AL  –  INC  BX  ;  increment  the  data  pointer  –  DEC  CX  ;  decrement  the  loop  counter  –  JNZ  ADD_LP  ;  jump  to  the  next  itera>on  if  the  counter  not  zero  80X86  ADDRESSING  MODES  •  The  CPU  can  access  operands  (data)  in  various  ways,  called  addressing  modes.  In  80x86  there  are  7  addressing  modes  –  Register  –  Immediate  –  Direct  –  register  indirect  –  based  rela>ve  –  indexed  rela>ve  –  based  indexed  rela>ve  •  Register  addressing  mode:  –  involves  the  use  of  registers  –  memory  is  not  accessed,  so  faster  –  source  and  des>na>on  registers  must  match  in  size.  –  Ex:    •  MOV  BX,DX  •  MOV  ES,AX  •  ADD  AL,BH  •  MOV  AL,CX  ;not  possible  
    • 1/28/13  87  80X86  ADDRESSING  MODES  –  cont.  •  Immediate  addressing  mode:  –  source  operand  is  a  constant  –  possible  in  all  registers  except  segment  and  flag  registers.  –  Ex:    •  MOV  BX,1234H  ;  move  1234H  into  BX  •  MOV  CX,223  ;  load  the  decimal  value  547  into  CX  •  ADD  AL,40H  ;  AL=AL+40H  •  MOV  DS,1234H  ;illegal  (ask  what  to  do)  •  Direct  addressing  mode:  –  address  of  the  data  in  memory  comes  immediately  aKer  the  instruc>on  operand  is  a  constant  –  The  address  is  the  offset  address.  The  offset  address  is  put  in  a  rectangular  bracket  –  Ex:  •  MOV  DL,[2400]  ;  move  contents  of  DS:2400H  into  DL  –  Ex:  Find  the  physical  address  of  the  memory  loca>on  and  its  content  aKer  the  execu>on  of  the  following  opera>on.  Assume  DS=1512H  •  MOV  AL,99H  •  MOV  [3518],AL  •  Physical  address  of  DS:3518  =>  15120+3518=18638H  •  The  memory  loca>on  18638H  will  contain  the  value  99H  80X86  ADDRESSING  MODES  –  cont.  •  Register  indirect  addressing  mode:  –  The  address  of  the  memory  loca>on  where  the  operand  resides  is  held  by  a  register.  –  SI,  DI  and  BX  registers  are  used  as  the  pointers  to  hold  the  offset  addresses.  –  They  must  be  combined  with  DS  to  generate  the  20-­‐bit  physical  address  –  Ex:    •  MOV  AL,[BX]  ;  moves  into  AL  the  contents  of  the  memory  loca>on  pointed  to  by  DS:BX  –  Ex:    •  MOV  CL,[SI]  ;  move  contents  of  DS:SI  into  CL    •  MOV  [DI],AH  ;  move  the  contents  of  AH  into  DS:DI  •  Based  rela>ve  addressing  mode:  –  BX  and  BP  are  known  as  the  base  registers.  In  this  mode  base  registers  as  well  as  a  displacement  value  are  used  to  calculate  the  effec>ve  address.  •  The  default  segments  used  for  the  calcula>on  of  Physical  address  (PA)  are  DS  for  BX,  and  SS  for  BP.  –  Ex:    •  MOV  CX,[BX]+10  ;  move  DS:BX+10  and  DS:BX+11  into  CX  ;  PA  =  DS  (shiKed  leK)  +BX+10  •  Note  that,  the  content  of  the  low  address  will  go  into  CL  and  the  high  address  contents  will  go  into  CH.  –  There  are  alterna>ve  coding:    •  MOV  CX,[BX+10],  MOV  CX,10[BX]  –  BX+10  is  effec>ve  address  –  Ex:    •  MOV  AL,[BP]+5  ;  PA  =  SS  (shiKed  leK)  +BP+5  
    • 1/28/13  88  80X86  ADDRESSING  MODES  –  cont.  •  Indexed  rela>ve  addressing  mode:  –  Indexed  rela>ve  addressing  mode  works  the  same  as  the  based  rela>ve  addressing  mode.  –  Except  the  registers  DI  and  SI  holds  the  offset  address.  –  Ex:    •  MOV  DX,[SI]+5  ;PA=DS(shiKed  leK)+SI+5  •  MOV  CL,[DI]+20  ;PA=DS(shiKed  leK)+DI+20  •  Based  Indexed  addressing  mode:  –  The  combina>on  of  the  based  and  indexed  addressing  modes.  –  One  base  register  and  one  index  register  are  used.  –  Ex:    •  MOV  CL,[BX][DI]+8  ;PA=DS(shiKed  leK)+BX+DI+8  •  MOV  CH,[BX][SI]+20  ;PA=DS(shiKed  leK)+BX+SI+20  •  MOV  AH,[BP][DI]+12  ;PA=SS(shiKed  leK)+BP+DI+12  •  MOV  AL,[BP][SI]+29  ;PA=SS(shiKed  leK)+BP+SI+29  •  Alterna>ve  coding  –  MOV  CL,[BX+DI+8]  –  MOV  CL,[DI+BX+8]  DIRECTIVES  AND  SAMPLE  PROGRAMS  •  Direc>ves:  are  statements  that  give  direc>ons  to  the  assembler  about  how  it  should  translate  the  assembly  language  instruc>ons  into  machine  code.  •  An  assembly  language  instruc>on  consists  of  four  fields,  –  [label:]  mnemonic  [operands]  [;comments]  •  Brackets  indicate  that  the  field  is  op>onal.  Brackets  are  not  typed.  –  The  label  field  allows  the  program  to  refer  to  a  line  of  code  by  name.  –  In  a  line  of  assembly  language  program  there  can  be  mnemonic  (instruc>on)  and  operand(s).  –  Ex:    •  ADD  AL,BL  •  MOV  AX,6764H  –  Alterna>vely,  instead  of  these  two  fields  there  can  be  direc>ves.    –  Direc>ves  are  used  by  the  assembler  to  organize  the  program  as  well  as  other  output  files.  The  following  program  (see  next  slid)  adds  two  bytes  to  calculate  their  sum.  In  the  example  program,  the  keywords  DB,  END,  and  ENDP  are  examples  of  direc>ves.  –  The  comment  field  begins  with  a  “;”  
    • 1/28/13  89  Example  Program  •  ;A  Sample  Assembly  Language  Program  using  FULL  SEGMENT  DEFINITION  •  STSEG  SEGMENT  •  DB  64  DUP  (?)  •  STSEG  ENDS  •  ;-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  •  DTSEG  SEGMENT  •  DATA1  DB  52H  •  DATA2  DB  29H  •  SUM  DB  ?  •  DTSEG  ENDS  •  ;-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐-­‐  •  CDSEG  SEGMENT  •  MAIN  PROC  FAR              ;This  is  the  program  entry  point  •  ASSUME  CS:CDSEG,DS:DTSEG,SS:STSEG  •  MOV  AX,DTSEG              ;load  the  data  segment  address  •  MOV  DS,AX                ;assign  value  to  DS  •  MOV  AL,DATA1              ;get  the  first  operand  •  MOV  BL,DATA2              ;get  the  second  operand  •  ADD  AL,BL                ;add  the  operands  •  MOV  SUM,AL              ;store  result  in  loca@on  SUM  •  MOV  AH,4CH              ;set  up  to  •  INT  21H                ;return  to  the  Opera@ng  System  (DOS)  •  MAIN  ENDP  •  CDSEG  ENDS  •  END  MAIN                ;this  is  the  program  exit  point  Example  program  –  cont.  •  Program  segments  –  label  SEGMENT  [op>ons]        –  ;place  the  statements  belonging  to  this  segment  here  –  label  ENDS  •  The  stack  segment  defines  storage  for  the  stack,  the  data  segment  defines  the  data  that  the  •  program  will  use  and  the  code  segment  contains  the  Assembly  Language  instruc>ons.  •  Stack  segment  defini>on  –  STSEG  SEGMENT  ;the  “SEGMENT”  direc>ve  begins  the  segment  –  DB  64  DUP  (?)  ;this  segment  contains  only  one  line  –  STSEG  ENDS  ;the  “ENDS”  segment  ends  the  segment  •  “DB  64  DUP  (?)”  ,  direc>ve  reserves  64  bytes  of  memory  for  the  stack.  
    • 1/28/13  90  Example  program  –  cont.  •  Data  segment  defini>on  –  There  are  three  data  items  in  this  sample  program:  DATA1,  DATA2  and  SUM.  Each  is  defined  as  DB  (define  byte).  –  The  DB  direc>ve  is  used  to  allocate  memory  in  byte-­‐sized  chunks.  DW  (define  word)  allocates  2  bytes  of  memory.  DATA1  and  DATA2  have  ini>al  values  but  SUM  is  reserved  for  later  use.  •  Code  segment  defini>on  –  The  first  line  aKer  the  SEGMENT  direc>ve  is  the  PROC  direc>ve.  A  procedure  is  a  group  of  instruc>ons  designed  to  accomplish  a  specific  func>on.  –  The  PROC  and  ENDP  direc>ves  must  have  the  same  label.  The  PROC  direc>ve  may  have  the  op>on  FAR  or  NEAR.  DOS  requires  FAR  op>on  to  be  used  at  the  program  entry.  –  ASSUME  direc>ve  associates  segment  registers  with  specific  segments  by  assuming  that  the  segment  register  is  equal  to  the  segment  labels  used  in  the  program.  –  Note  that  there  can  be  many  segments  of  the  same  type.  So  Assume  helps  to  differen>ate  which  is  to  be  used  at  a  >me.  –  DOS  determines  the  CS  and  SS  segment  registers  automa>cally.  DS  has  to  be  manually  specified.  •  MOV  AX,DTSEG  ;load  the  data  segment  address  •  MOV  DS,AX  ;assign  value  to  DS  –  Load  AL  and  BL  with  DATA1  and  DATA2  and  ADD  them  together,  and  store  the  result  in  SUM.  •  MOV  AL,DATA1  ;get  the  first  operand  •  MOV  BL,DATA2  ;get  the  second  operand  •  ADD  AL,BL  ;add  the  operands  •  MOV  SUM,AL  ;store  result  in  loca>on  SUM  –  The  last  two  instruc>ons  returns  the  control  to  the  opera>ng  system.  •  MOV  AH,4CH  ;set  up  to  •  INT  21H  ;return  to  DOS  SIMPLIFIED  SEGMENT  DEFINITION  •  The  following  program  uses  the  Simplified  Segment  Defini>on.  –  ;A  Sample  Assembly  Language  Program  using  SIMPLIFIED  SEGMENT  DEFINITION  –  .MODEL  SMALL            ;Gives  the  memory  model  to  be  used  by  the  program  –  .STACK  64  –  .DATA  –  DATA1  DB  52H  –  DATA2  DB  29H  –  SUM  DB  ?  –  .CODE  –  MAIN:  MOV  AX,@DATA  –  MOV  DS,AX              ;assign  value  to  DS  –  MOV  AL,DATA1            ;get  the  first  operand  –  MOV  BL,DATA2            ;get  the  second  operand  –  ADD  AL,BL              ;add  the  operands  –  MOV  SUM,AL            ;store  result  in  loca@on  SUM  –  MOV  AH,4CH            ;set  up  to  –  INT  21H              ;return  to  the  Opera@ng  System  (DOS)  –  END  MAIN              ;this  is  the  program  exit  point  •  In  a  program  the  memory  model  has  to  be  specified  –  SMALL  MODEL  (.MODEL  SMALL):  The  model  uses  maximum  of  64K  bytes  for  Code  and  64K  bytes  for  Data  (Code<=64K  and  Data  <=64K).  This  model  is  the  most  widely  used  memory  model  and  is  sufficient  for  all  the  programs  to  be  used  in  this  course.  –  MEDIUM  MODEL,  (.MODEL  MEDIUM):  The  model  uses  maximum  of  64K  bytes  for  Data  and  Code  can  exceed  64K  bytes  (Code>64K  and  Data  <=64K).  –  COMPACT  MODEL,  (.MODEL  COMPACT):  The  model  uses  maximum  of  64K  bytes  for  Code  and  Data  can  exceed  64K  bytes  (Code<=64K  and  Data  >64K).  –  LARGE  MODEL,  (.MODEL  LARGE):  Both  Code  and  Data  can  exceed  64K  bytes.  However  no  single  data  set  (i.e.  array)  can  exceed  64K  bytes  (Code>64K  and  Data  >64K).  •  HUGE  MODEL,  (.MODEL  HUGE):  Both  Code  and  Data  can  exceed  64K  bytes.  Addi>onally,  a  single  data  set  (i.e.  array)  can  exceed  64K  bytes  (Code>64K  and  Data  >64K).  
    • 1/28/13  91  CONTROL  TRANSFER  INSTRUCTIONS  •  FAR  and  NEAR  :  (given  CS:IP)  –  In  NEAR  the  control  is  transferred  within  the  current  code  segment  (intrasegment).  IP  is  changed.  –  In  FAR  the  control  is  transferred  outside  the  current  code  segment  (intersegment).  Both  CS  and  IP  are  changed.  •  Condi>onal  Jumps  –  In  the  condi>onal  jump,  control  is  transferred  to  a  new  loca>on  if  a  certain  condi>on  is  met.  –  JC  (jump  if  carry)  [CF  is  checked],  JNZ  (jump  if  not  zero)  [ZF  is  checked].  Condi>onal  Jumps  
    • 1/28/13  92  Short  Jumps  •  All  condi>onal  jumps  are  short  jumps.  In  a  short  jump  the  address  of  the  target  must  be  within  –128  to  +127  bytes  of  the  memory  •  A  condi>onal  jump  is  a  two-­‐byte  instruc>on:  one  byte  is  the  opcode  of  the  J  condi>on  and  the  second  value  is  a  value  between  00  to  FF.  •  In  a  backward  jump  the  second  byte  is  the  2’s  complement  of  the  displacement  value.  •  Ex:        :          :            :  –         :          :            :  –  AGAIN:    ADD  AL,[BX]      1067:000D  0207      ADD  AL,[BX]  –         INC  BX        1067:000F  43      INC  BX  –         DEC  CX        1067:0010  49      DEC  CX  –         JNZ  AGAIN      1067:0011  75FA      JNZ  000D  –         MOV  SUM,AL    1067:0013  A20500    MOV  [0005],AL  –         :          :          :  •  The  instruc>on  “JNZ  AGAIN”  is  assembled  as  “JNZ  000D”  and  the  000D  is  the  address  of  the  instruc>on  with  label  AGAIN.  (000D  =  0013+FA  =  000D)  the  carry  is  dropped.  Note  that  FA  is  2’s  complement  of  –6,  meaning  that  the  address  of  target  is  –6  bytes  from  the  IP  of  the  next  instruc>on.  Uncondi>onal  Jumps  •  “JMP  label”  is  the  uncondi>onal  jump  in  which  control  is  transferred  uncondi>onally  to  the  target  label.  Uncondi>onal  jump  can  take  the  following  forms.  –  SHORT  JUMP,  which  is  specified  by  the  format  “JMP  SHORT  label”  .  In  this  jump  the  address  of  the  target  loca>on  is  within  –128  to  +127  bytes  of  the  current  IP.  It  works  like  the  condi>onal  jump.  –  NEAR  JUMP,  which  is  the  default  has  the  format  “JMP  label”.  It  jumps  within  the  current  code  segment.  It  is  exactly  same  as  the  short  jump,  except  that  the  target  address  can  be  anywhere  within  the  range  of  +32767  to  –32768.  –  FAR  JUMP,  has  the  format  “JMP  FAR  PTR  label”.  This  is  the  jump  out  of  the  current  code  segment,  meaning  that  not  only  the  IP,  but  also  the  CS  is  replaced  with  new  values.  •   Note:    –  LOOP  BACK    ;is  the  equivalent  of  the  following  two  instruc@ons  –  DEC  CX  –  JNZ  BACK  
    • 1/28/13  93  CALL  STATEMENTS  •  Another  control  transfer  instruc>on  is  the  CALL  instruc>on,  which  is  used  to  call  a  procedure  •  The  target  address  can  be  in  the  current  segment,  hence  a  NEAR  call  (IP  is  changed  CS  is  not)  •  The  target  address  can  be  outside  the  current  segment,  hence  FAR  call  (IP  and  CS  are  changed)  •  To  make  sure  that  aKer  the  execu>on  of  the  called  subrou>ne  the  microprocessor  knows  where  to  come  back,  the  microprocessor  automa>cally  saves  the  address  of  the  instruc>on  following  the  call  on  the  stack.  •  The  last  instruc>on  of  the  called  subrou>ne  must  be  RET  (return)  instruc>on,  which  directs  CPU  to  pop  the  address  of  the  next  instruc>on  before  the  called  subrou>ne  to  be  restored  SUBROUTINES  •  In  Assembly  Language  there  can  be  one  main  program  and  many  subrou>nes  called  from  the  main  program.  Subrou>nes  are  organized  as  procedures.  PROC  can  be  FAR  or  NEAR.  If  not  men>oned,  by  default  a  PROC  is  NEAR  
    • 1/28/13  94  DATA  TYPES  AND  DATA  DEFINITION  •  Assembler  Data  Direc>ves  –  ORG  (Origin)  :  ORG  is  used  to  indicate  the  beginning  of  the  offset  address.  The  number  aKer  ORG  can  be  either  in  hex  or  decimal.  Mostly  used  in  Data  segment.  •  Ex:    •  DTSEG  SEGMENT  •  DATA_IN  DW  234DH,1DE6H,3BC7H,566AH  •  ORG  10H  •  SUM  DW  ?  •  DTSEG  ENDS  –  DB  (define  byte)  :  DB  allows  alloca>on  of  memory  in  bytes  for  decimal,  binary,  hex  and  ASCII.  •  Ex:    •  DATA1    DB  25    ;DECIMAL  D  IS  OPTIONAL  •  DATA2  DB  10001001B  ;BINARY  •  DATA3  DB  12H  ;HEX  •  ORG  0010H  •  DATA4  DB  ‘2591’  ;ASCII  NUMBERS  •  0RG  0018H  •  DATA5  DB  ?  ;SET  ASIDE  A  BYTE  •  ORG  0020H  •  DATA6  DB  ‘My  name  is  Joe’  ;ASCII  CHARACTERS  DATA  TYPES  AND  DATA  DEFINITION  –  cont.  •  DUP  (duplicate)  :  DUP  is  used  to  duplicate  a  given  number  of  characters.  –  Ex:    –  DATA1  DB  0FFH,0FFH,0FFH,0FFH  ;FILL  4  BYTES  WITH  FF  –  DATA2  DB  4  DUP(0FFH)  ;FILL  4  BYTES  WITH  FF  –  Ex:    –  DATA3  DB  32  DUP  (?)  ;SET  ASIDE  32  BYTES  –  DATA4  DB  5  DUP  (2  DUP  (99))  ;FILL  10  BYTES  WITH  99  –  DW(define  word)  :  DW  is  used  to  allocate  2  bytes  (one  word)  of  memory  at  a  >me.  DUP  is  used  to  duplicate  a  given  number  of  characters.  –  Ex:    –  DATA1  DW  954  ;DECIMAL  –  DATA2  DW  100101010100B  ;BINARY  –  DATA3  DW  253FH  ;HEX  –  DATA4  DW  9,2,7,0CH,00100000b,5,’HI’  ;MISCELLANEOUS  –  DATA5  DW  8  DUP  (?)  •  EQU(equate)  :  EQU  is  used  to  define  a  constant  without  occupying  a  memory  loca>on.  –  Ex:    –  COUNT  EQU  25  –  MOV  CX,COUNT  •  DD(define  doubleword)  :  Same  as  DW  but  allocates  2  words  (4  bytes)  of  memory  at  a  >me.  –  Ex:    –  DATA1  DD  1023  ;DECIMAL  –  DATA2  DD  100011100101010100B  ;BINARY  –  DATA3  DD  5C2A57F2H  ;HEX  –  DATA4  DD  23H,24789H,65533  ;MISCELLANEOUS  •  DQ(define  quadword)  :  DQ  is  used  to  allocate  memory  8  bytes  (4  words)  in  size.  –  Ex:    –  DATA1  DQ  4523C2H  ;HEX  –  DATA2  DQ  ‘HELLO’  ASCII  CHARACTERS  –  DATA3  DQ  ?  ;NOTHING  •  DT(define  ten  bytes)  :  Allocates  10  bytes  of  memory  space.  Mostly  used  for  BCD  numbers.  –  Ex:    –  DATA1  DT  867943569829  ;  Default  is  BCD  not  decimal  
    • 1/28/13  95  UNSIGNED  ADDITION  AND  SUBTRACTION  •  Unsigned  numbers  are  defined  as  data  in  which  all  the  bits  are  used  to  represent  data  and  no  bits  are  set  aside  for  the  posi>ve  and  nega>ve  sign.  –  For  8-­‐bit,  data  operand  can  be  between  00H  and  FFH  (0  to  255  decimal  –  For  16-­‐bit,  data  operand  can  be  between  00H  and  FFFFH  (  0  to  65535  decimal)  •  ADD:  Addi>on  of  unsigned  numbers  –  Format:  ADD  des>na>n,source  ;dest.  operand  =  dest.  operand  +  source  operand  –  Ex:  Show  how  the  flag  register  is  affected  by  the  following  addi>on  –  MOV  AL,0F5H  –  ADD  AL,0BH  •  Solu>on:  •     ADC:  Add  with  carry  •  Format:  ADC  des>na>on,  source  ;  dest  .operand  =  dest.  operand  +  source  +  CF  •  If  CF=1  prior  to  this  instruc>on,  then  aKer  execu>on  of  this  instruc>on,  source  is  added  to  des>na>on  plus  1.  If  CF=0,  source  is  added  to  des>na>on  plus  0.  Used  widely  in  mul>byte  and  mul>word  addi>ons.  •     
    • 1/28/13  96  Ex  SUBTRACTION  OF  UNSIGNED  NUMBERS  •  SUB  dest,source  ;  dest  =  dest  –  source  –  In  subtrac>on  2’s  complement  method  is  used.  –  Execu>on  of  SUB  instruc>on  •  1.  Take  the  2’s  complement  of  the  subtrahend  (source  operand)  •  2.  Add  it  to  the  minuend  (des>na>on  operand)  •  3.  Invert  the  carry  •  Ex:    –  MOV  AL,3FH  ;  load  AL=3FH  –  MOV  BH,23H  ;  load  BH=23H  –  SUB  AL,BH  ;  subtract  BH  from  AL.  Place  result  in  AL  –     
    • 1/28/13  97  SBB  (subtract  with  borrow)  •  SBB  dest,source  ;  dest  =  dest  -­‐  source  –  CF  – Used  in  mul>byte  (mul>word)  numbers.  – If  CF=0,  SBB  works  exactly  like  SUB  – If  CF=1,  SBB  subtracts  1  from  the  result  UNSIGNED  MULTIPLICATION  •  byte  x  byte  :  –  One  of  the  operands  must  be  in  AL  .  The  other  operand  can  be  either  in  a  register  or  in  memory.  –  AKer  the  mul>plica>on  the  result  is  in  AX.  •  Ex:  RESULT  DW  ?  ;  result  is  defined  in  data  •  segment  •  …..  •  MOV  AL,25H  ;  a  byte  is  moved  to  AL  •  MOV  BL,65H  ;  immediate  data  must  be  in  a  register  •  MUL  BL  ;  AX=  AL  x  BL  =  25  x  65  •  MOV  RESULT,AX  ;  result  is  saved  •  Ex:  •  ;from  the  data  segment:  •  DATA1  DB  25H  •  DATA2  DB  65H  •  RESULT  DW  ?  •  ;from  the  code  segment:  •  MOV  AL,DATA1  •  MOV  BL,DATA2  •  MUL  BL  ;register  addressing  mode  •  MOV  RESULT,AX  •  or  •  MOV  AL,DATA1  •  MUL  DATA2  ;direct  addressing  mode  •  MOV  RESULT,AX  
    • 1/28/13  98  UNSIGNED  MULTIPLICATION    -­‐  cont.  •  word  x  word  :  –  One  of  the  operands  must  be  in  AX  .  The  other  operand  can  be  either  in  a  register  or  in  memory.  –  AKer  the  mul>plica>on  the  lower  word  is  in  AX  and  the  higher  word  is  in  DX.  •  Ex:  •  DATA3  DW  2278H  •  DATA4  DW  2F79H  •  RESULT1  DW  2  DUP?  •  ...  •  MOV  AX,DATA3  ;  load  first  operand  into  AX  •  MUL  DATA4  ;  mul>ply  it  by  the  second  operand  •  MOV  RESULT1,AX  ;  store  the  lower  word  of  the  result  •  MOV  RESULT1+2,DX  ;  store  the  higher  word  of  the  result  •   word  x  byte  :  –  Similar  to  word  x  word,  but  AL  contains  byte  operand  and  AH  must  be  zero.  •  Ex:  •  DATA5  DB  6BH  •  DATA6  DW  12C3H  •  RESULT3  DW  2  DUP?  •  ...  •  MOV  AL,DATA5  ;  AL  holds  byte  operand  •  SUB  AH,AH  ;  AH  must  be  cleared  •  MUL  DATA6  ;  byte  in  AL  mul>plied  by  word  •  operand  •  MOV  BX,OFFSET  RESULT3  ;  BX  points  the  storage  for  product  •  MOV  [BX],AX  ;  AX  holds  lower  word  •  MOV  [BX]+2,DX  ;  DX  holds  higher  word  Division  of  unsigned  numbers  •  Byte  /  byte    –  Numerator  must  be  in  AL  and  AH  must  be  set  to  zero  –  Denominator  cannot  be  immediate  but  can  be  in  memory  or  in  a  register.  –  AKer  the  division  AL  will  have  the  quo>ent  and  AH  will  have  the  remainder    •  ;using  direct  mode  –  MOV  AL,DATA7  ;AL  holds  numerator  –  SUB  AH,AH  ;AH  must  be  cleared  –  DIV  DATA8  ;divide  AX  by  DATA8  –  MOV  QUOT1,AL  ;quo@ent  =  AL  =  09  –  MOV  REMAIN1,AH  ;remainder  =  AH  =  05  •  ;using  register  addressing  mode  –  MOV  AL,DATA7  ;AL  holds  numerator  –  SUB  AH,AH  ;AH  must  be  cleared  –  MOV  BH,DATA8  ;move  denominator  to  a  register  –  DIV  BH  ;divide  AX  by  BH  –  MOV  QUOT1,AL  ;quo@ent  =  AL  =  09  –  MOV  REMAIN1,AH  ;remainder  =  AH  =  05  •  ;using  the  immediate  addressing  mode  will  give  an  error  –  MOV  AL,DATA7  –  SUB  AH,AH  –  DIV  10  ;immediate  mode  is  not  allowed  
    • 1/28/13  99  DIV  –cont.  •  word  /  word  –  Numerator  must  be  in  AX  and  DX  must  be  cleared  –  Denominator  can  be  in  memory  or  in  a  register.  –  AKer  the  division  AX  will  have  the  quo>ent  and  DX  will  have  the  remainder  •  word  /  byte  –  Numerator  must  be  in  AX  –  Denominator  can  be  in  memory  or  in  a  register.  –  AKer  the  division  AL  will  have  the  quo>ent  and  AH  will  have  the  remainder  •  doubleword  /  word  –  Numerator  must  be  in  AX  and  DX,  least  significant  word  in  AX  and  most  significant  word  in  DX.  –  Denominator  can  be  in  memory  or  in  a  register.  –  AKer  the  division  AX  will  have  the  quo>ent  and  DX  will  have  the  remainder  •  “Divide  Error”:  If  the  denominator  is  zero  (dividing  any  number  by  00)  and  if  the  quo>ent  is  too  large  for  the  assigned  register,  “Divide  Error”  message  will  be  displayed.  LOGIC  INSTRUCTIONS  •  AND  –  AND  dest,source  ;  dest  =  dest  &  source  –  This  opera>on  will  AND  DH  with  itself  and  if  the  result  is  zero  ,that  is  ZF=1,  it  jumps  to  NEXT.  •  OR  –  OR  dest,source  ;  dest  =  dest  &  source  –     
    • 1/28/13  100  LOGIC  INSTRUCTIONS  –  cont.  
    • 1/28/13  101  INT  21H  •  DOS  INT  21H  PROGRAMMING  –  INT  21H  subrou>nes  are  provided  by  DOS  Opera>ng  system.  –  Depending  on  the  value  put  in  AH  many  func>ons  such  as  inpunng  data  from  the  keyboard  and  displaying  it  on  the  screen  can  be  performed.  •  INT  21H  op>on  09:  outpunng  a  string  of  data  to  the  monitor  –  INT  21H  can  be  used  to  send  a  set  of  ASCII  data  to  the  monitor.  –  Register  senngs  before  INT  21H  is  invoked:  AH=09    •  DX  =  the  offset  address  of  the  ASCII  data  to  be  displayed  –  The  address  in  DX  register  is  an  offset  address.  Data  is  assumed  to  be  the  data  segment.  –  INT  21H  op>on  09  will  display  the  ASCII  data  string  pointed  at  by  DX  un>l  it  encounters  the  dollar  sign  ‘$’.  Note  that  this  op>on  cannot  display  ‘$’  character  on  the  screen.  –     
    • 1/28/13  102  INT  21H  –  cont.  •  INT  21H  op>on  02:  outpunng  a  single  character  to  the  monitor  –  To  do  that:    •  AH=02  (AH  is  given  02)  •  DL  =  is  loaded  with  the  ASCII  character  to  be  displayed.  •  INT  21H  is  invoked.  –  Ex:  MOV  AH,02  ;op>on  02  displays  one  character  –  MOV  DL,’Y’  ;DL  holds  the  character  to  be  displayed  –  INT  21H  ;invoke  the  interrupt.  –  *  This  op>on  can  be  used  to  display  ‘$’  sign  on  the  monitor.  •  INT  21H  op>on  01:  Keyboard  input  with  echo  (inpunng  a  single  character  with  echo)  –  This  func>on  waits  un>l  a  character  is  input  from  the  keyboard,  then  echoes(displays)  it  to  the  monitor.  –  AKer  the  interrupt  the  character  will  be  in  AL.  –  Ex:    •  MOV  AH,01  ;op>on  01  inputs  one  character  •  INT  21H  ;aKer  the  interrupt,  AL  =  input  character  (ASCII)  •  INT  21H  op>on  07:  Keyboard  input  without  echo  –  This  func>on  waits  un>l  a  character  is  input  from  the  keyboard,  then  character  is  not  displayed  (echoed)  to  the  monitor.  –  AKer  the  interrupt  the  character  will  be  in  AL.  –  Ex:    •  MOV  AH,07  ;keyboard  input  without  echo  •  INT  21H  ;aKer  the  interrupt,  AL  =  input  character  (ASCII)  INT  21H  –  cont.  •  INT  21H  op>on  0AH:  Inpunng  a  string  of  data  from  the  keyboard  –  This  func>on  enables  input  a  string  of  data  from  the  keyboard  and  to  store  it  in  the  data  segment.  –  The  register  senngs  are:  AH=0AH,  DX=  offset  address  of  the  string  to  be  stored  (called  as  the  buffer  area)  –  Buffer  area  must  be  defined  in  the  data  segment.  –  Ex:  …………………….  •  ORG  0010H  •  DATA1  DB  6,?,6  DUP(FF)  ;0010H=06,  0012H  –  0017H=FF  •  ……………………  •  MOV  AH,0AH  ;string  input  op>on  of  INT  21H  •  MOV  DX,OFFSET  DATA1  ;load  the  offset  address  of  buffer  •  INT  21H  ;invoke  the  interrupt  •  The  following  shows  the  memory  contents  of  offset  0010H:  Before  input  is  entered!!  •  0010    0011    0012    0013    0014    0015    0016    0017  •  06      00    FF    FF    FF    FF    FF    FF  •  When  the  program  is  executed  and  the  data  is  entered  through  the  keyboard,  the  program  will  not  exit  un>l  the  return  key  is  pressed.  Assume  the  data  entered  through  the  keyboard  was,  “USA”  ,RETURN>  •  The  contents  of  memory  loca>ons  star>ng  at  offset  0010H  will  be:  •  0010    0011    0012    0013    0014    0015    0016    0017  •  06      03    55    53    41    0D    FF    FF  •         U    S    A    CR  •  The  following  is  the  step  by  step  analysis:  –  0010=06  The  size  of  the  buffer  must  be  defined  in  the  first  loca>on  –  0011=03  The  keyboard  was  pressed  3  >mes,  U,  S,  A  (excluding  the  RETURN)  –  0012=55  the  hex  ASCII  code  for  leier  U  –  0013=53  the  hex  ASCII  code  for  leier  S  –  0014=41  the  hex  ASCII  code  for  leier  A  –  0015=0D  the  hex  ASCII  code  for  CR  (carriage  return)  •  Note  that  the  value  03  is  generated  and  stored  by  DOS  to  indicate  the  number  of  characters  that  entered.  
    • 1/28/13  103  BASIC  COMPUTER  ARCHITECTURE  •  CPU  :  Central  Processing  Unit/Microprocessor;  the  Brain  and  the  Heart  of  the  Computer.  Executes  (processes)  the  informa>on  stored  in  memory.    •  Memory  :  Memory  is  the  primary  storage  for  the  programs  and  data  (RAM,  ROM)  •  I/O  :  -­‐  Drives  the  disks  (secondary  storage  units):Hard  Disk,  Floppy  Disks  etc.  •  Monitor  (CRT  –Cathode  Ray  Tube)‫  و‬Keyboard‫  و‬Printer  Mouse  Fax,  Modem  •  Buses  :  A  bus  is  defined  to  be  a  bundle  of  wires.  There  are  3  types  of  buses    •  Address  Bus  (Unidirec>onal)  •  Data  Bus  (Bidirec>onal)  •  Control  Bus  (Unidirec>onal)  Time  Sequencing  during  an  instruc>on  execu>on  
    • 1/28/13  104  Pin  descrip>ons  of  8086  Microprocessor  Pin  descrip>ons  of  8086  Microprocessor  •  Data  Bus:  -­‐  In  8086  microprocessor  Pins  AD0  –  AD15  are  used  for  the  data  bus.  –  However  the  same  pins  are  also  used  for  Address  bus  as  well.  –  The  ALE  (Address  Latch  Enable  –pin  25)  signals  whether  the  informa>on  on  pins  AD0  –  AD15  is  used  address  or  data.  –  When  the  data  is  sent  out  or  in,  the  case  when  ALE  is  low  indicates  that  AD0-­‐AD15  will  be  used  as  data  bus.  –  When  the  address  data  is  sent  out,  the  ALE  is  high  indica>ng  that  AD0-­‐AD15  will  be  used  as  address  bus  –  This  process  of  separa>ng  address  and  data  from  pins  AD0-­‐AD15  is  called  demul>plexing.  •  Address  Bus:  -­‐    –  The  8086  CPU  has  20-­‐bit  address  bus,  where  the  AD0-­‐AD15  and  A16-­‐A20  are  used  as  the  address  bus.  To  demul>plex  the  address  signals  from  the  address/data  pins  (AD0-­‐AD15)  a  latch  must  be  used  to  grab  the  addresses.  –  In  8086  microprocessor  the  address  bus  is  20-­‐bit  wide,  however  only  16-­‐bit  is  shared  with  data  bus  (AD0-­‐AD15)  through  demul>plexing.  –  The  most  widely  used  latch  for  demul>plexing  is  74LS373  IC  (see  Figure  9-­‐3  below:  Note  that  for  8088  the  address  bus  is  20  bit  and  data  bus  is  8-­‐bit.  So  only  8-­‐bit  is  latched).  
    • 1/28/13  105  Pin  descrip>ons  of  8086  Microprocessor  •  Control  Bus  :  is  used  to  indicate  many  this  like  – When  a  valid  address  is  on  the  address  bus  – In  which  direc>on  data  are  to  be  transferred  over  the  data  bus  (in/out)  – When  external  devices  can  read/write  data  on  the  data  bus.  – When  valid  read/write  data  are  on  the  data  bus.  ROLE  of  ALE  in  Address/data  demul>plexing  
    • 1/28/13  106  Pin  Descrip>ons  of  the  Control  Signals  of  8086  CPU  Pin  Descrip>ons  of  the  Control  Signals  of  8086  CPU  –  cont.  
    • 1/28/13  107  Basic  Busses  for  a  computer  INPUT/OUTPUT  (I/O)  AND  DEVICE  INTERFACING  •  In  addi>on  to  memory,  80x86  microprocessors  are  able  to  access  I/O  ports.  Ports  are  accessed  either  to  bring  data  from  the  port  into  the  CPU  (inpunng)  or  to  send  data  from  the  CPU  to  the  port  (outpunng).    •  Input/Output  Instruc>ons  in  8086  CPU  –  There  are  two  instruc>ons  for  this  purpose  “IN”  and  “OUT”.    –  These  instruc>ons  can  send  data  from  the  accumulator  (AX,  AL  or  AH)  to  ports  or  receive  data  from  ports  into  the  accumulator.  •  8-­‐bit  I/O  instruc>ons  format      •  In  format  (1)  above,  port#  is  the  address  of  the  port,  and  can  be  from  00  to  FFH.  This  8-­‐bit  address  allows  256  input  ports  and  256  output  ports.  No  segment  register  is  involved  in  compu>ng  the  address,  in  contrast  to  the  data  accessed  from  memory.  •  In  format  (2)  ,  port#  is  the  address  of  the  port,  and  can  be  from  0000  to  FFFFH.  This  16-­‐bit  address  allows  65,536  input  ports  and  65,536  output  ports.  No  segment  register  (DS)  is  involved.  
    • 1/28/13  108  Examples  •  Ex:  Write  a  sequence  of  instruc>ons  that  will  output  FFH  to  a  byte-­‐wide  output  port  at  the  address  ABH  of  the  I/O  address  space?  –  MOV  AL,FFH  –  OUT  ABH,AL  •  Ex:  Write  a  sequence  of  instruc>ons  that  will  output  FFH  to  an  output  port  at  the  address  B000H  of  the  I/O  address  space?  –  MOV  DX,B000H  ;Note  that  16-­‐bit  address  must  be  in  DX  –  MOV  AL,FFH  –  OUT  DX,AL  •  Ex:  Assume  that  the  port  address  22H  is  an  input  port  for  monitoring  the  temperature.  Write  Assembly  language  instruc>ons  to  monitor  the  port  con>nuously  for  the  temperature  of  100  degrees.  If  it  reaches  100,  then  BH  should  contain  ‘Y’.  –  BACK:    IN  AL,22H  ;get  the  temperature  data  from  port#  22H  –         CMP  AL,100  ;is  temp  =100?  –       JNZ  BACK  ;if  not,  keep  monitoring  –       MOV  BH,’Y’  ;temp  =100,  load  ‘Y’  into  BH  –     The  8255  programmable  peripheral  Interface    •  The  8255  PPI  chip  is  designed  to  permit  easy  implementa>on  of  parallel  I/O  into  the  microcomputer.    •  The  8255  is  one  of  the  most  widely  used  I/O  chips.    –  It  has  three  separately  accessible  ports,  A,  B,  and  C.    –  The  user  can  program  the  individual  ports  to  be  input  or  output,  and  change  them  dynamically.    –     
    • 1/28/13  109  8255  –  cont.  •  PA0-­‐PA7  (Port  A)  :  This  8-­‐bit  port  can  be  programmed  all  as  input  or  all  as  output  or  all  bits  as  bi-­‐direc>onal  input/output.  •  PB0-­‐PB7  (Port  B)  :  This  8-­‐bit  port  can  be  programmed  all  as  input  or  all  as  output  or  all  bits  as  bi-­‐direc>onal  port.  •  PC0-­‐PC7  (Port  C)  :  This  8-­‐bit  port  can  be  all  input  or  all  output.  It  can  also  be  split  into  two  parts:  –  CU  (Upper  4  bits  PC4-­‐PC7)  and  –  CL  (Lower  4  bits  PC0-­‐PC3).  –  Each  can  be  used  for  input  or  output.  •  RD  and  WR  :  These  two  ac>ve  low  signals  are  inputs  to  the  8255.  If  the  8255  is  using  isolated  I/O  design,  IOR  or  IOW  of  the  system  bus  are  connected  to  these  two  pins.  If  the  port  uses  memory-­‐mapped  I/O,  MEMR  and  MEMW  ac>vate  them.  •  RESET:  This  is  an  ac>ve  high  signal  input  to  the  8255  used  to  clear  the  control  register.  When  RESET  is  ac>vated,  all  ports  are  ini>alized  as  input  ports.  •  A0,  A1,  and  CS:  While  CS  selects  the  en>re  chip,  it  is  A0  and  A1  that  select  the  specific  port.  A0  and  A1  are  used  to  access  ports  A,  B,  C,  or  the  control  register  according  to  the  table  below.  
    • 1/28/13  110  Programming  the  8255  •  Mode  0:  Simple  input  or  output  mode:  –  This  mode  0  is  the  basic  input  output  mode.  In  this  mode  any  ports  A,B  or  C  can  be  programmed  as  input  or  output.  –  Note  that  in  this  mode  a  given  port  cannot  be  both  input  or  output  port  at  the  same  >me.  –  One  major  characteris>c  of  port  C  is  that  one  can  program  CL  (PC0-­‐PC3)  and  CU  (PC4-­‐PC7)  independent  of  each  other.  •  The  Control  Register;  is  used  to  configure  the  individual  ports  as  to  be  in  input  or  output  mode.  •     Programming  the  8255  –  cont.  •  Mode  1:  I/O  with  handshaking  capability:  –  One  of  the  most  powerful  features  of  the  8255  is  the  ability  to  handle  handshaking  signals.  Handshaking  refers  to  the  process  of  communica>ng  back  and  forth  between  two  intelligent  devices.  Printer  is  a  good  example  for  Mode  1  Interfacing.  Port  A  and  B  are  used  for  input  or  output  while  Port  C  is  used  for  handshaking  signals.  •  Mode  2:  Bi-­‐direc>onal  I/O  with  handshaking:  –  In  this  mode  data  is  transferred  both  in  and  out  via  the  same  port  with  handshaking  capability.  Port  A  is  used  as  a  bi-­‐direc>onal  port  and  port  C  is  used  for  handshaking  signals.  Port  B  can  be  configured  to  be  in  Mode  0  or  1.  
    • 1/28/13  111  Example  Example  •  Using  NAND  gates,  draw  a  draK  circuit  showing  how  to  decode  the  8086  address  bus  so  that  the  8255  has  the  unique  addresses  – PORT  A  à  310H,  PORT  Bà  311H,  PORT  Cà  312H,  CRà  313H  – Try  if  you  can  decode  the  above  so  that  the  addresses    are  FBC33H,  FCC33H,  FDC33H,  FEC33H  respec>vely.  •  If  not,  then  why?  what  should  be  changed?