201303241642


По CLEDам лабораторных работ часть I. (AQA симулятор).

----------

Работа 01. Комбинационная схема по порядковому номеру учащегося

  В переменной "src" задать номер варианта в 16-чной системе
  
    src:  db = 0x11

Подключить к порту А линейку из 8 светодиодов. Подключить к порту B 7-сегментный индикатор.

На индикаторе одну секунду горит номер шага, соответствующий номеру строки в таблице истинности ( 0, 1, 2, .. 7 ). В это время диоды D7, D6, .. D0 соединены параллельно и показывают значение функции "f".


Пример. Вариант Nr.27

  27 = 16 + 8 + 2 + 1 = 0x1D = 0b00011101
                                 ^      ^
                               MSB      LSB

Таблица истинности

  No  x2 x1 x0  f   Comment
  -------------------------
  0   0  0  0   1   LSB         f = !x2!x1!x0 +
  1   0  0  1   0
  2   0  1  0   1                   !x2!x1 x0 +
  3   0  1  1   1                   !x2 x1 x0 +
  4   1  0  0   1                    x2!x1!x0  
  5   1  0  1   0
  6   1  1  0   0
  7   1  1  1   0   MSB
                          
             x2                      x2
          -------                 -------
     +---+---+---+---+       +---+---+---+---+
     | 2 | 6 | 4 | 0 |       | 1 | 0 | 1 | 1 |
     +---+---+---+---+       +---+---+---+---+
  x0|| 3 | 7 | 5 | 1 |    x0|| 1 | 0 | 0 | 0 |
     +---+---+---+---+       +---+---+---+---+
      -------                 -------
         x1                      x1

  f = !x1!x0 + !x2 x1
  
Код.

           jmp   clean
         
  src:     db    0x1d
  delay:   db    0x07
  tmp:     db    0x00
  
  clean:   movw  0x00
           movwr PORTA
           movwr PORTB
         
  zero:    movrw src
           andw  0x01
           call  expandw
           movwr PORTA
           movw  0x7d
           movwr PORTB
           call  wait
           
  one:     movrw src
           andw  0x02
           call  expandw
           movwr PORTA
           movw  0x05
           movwr PORTB
           call  wait          
         
  two:     movrw src
           andw  0x04
           call  expandw
           movwr PORTA
           movw  0x5b
           movwr PORTB
           call  wait          
         
  three:   movrw src
           andw  0x08
           call  expandw
           movwr PORTA
           movw  0x4f
           movwr PORTB
           call  wait
         
  four:    movrw src
           andw  0x10
           call  expandw
           movwr PORTA
           movw  0x27
           movwr PORTB
           call  wait
         
  five:    movrw src
           andw  0x20
           call  expandw
           movwr PORTA
           movw  0x6e
           movwr PORTB
           call  wait
         
  six:     movrw src
           andw  0x40
           call  expandw
           movwr PORTA
           movw  0x7e
           movwr PORTB
           call  wait
         
  seven:   movrw src
           andw  0x80
           call  expandw
           movwr PORTA
           movw  0x45
           movwr PORTB
           call  wait
           
           jmp   zero
          
  expandw: movwr tmp
           jpz   exout
           movw  0xff
  exout:   ret
           
  wait:    movrw delay
           movwr tmp
  waloop:  dec   tmp
           jpz   waout
           jmp   waloop
  waout:   ret

----------

Работа 02. Дисплей (A, V, Ohm, Siemens) 
           Внешние схемы AQA: SWITCHES, SEVEN-SEG, LEDS, DAC.
           
  Показать, как работают внешние схемы. 
  
Подключить к порту A линейку из 8 нормально-замкнутых контактов
Подключить к порту B семисегментный индикатор.
Подключить к порту С линейку из 8-ми светодиодов.

Cчитать разорванный контакт единицей. Показывать набранное переключателями 16-ное число на семисегментный индикатор и на линейку светодиодов.

Представленный код можно считать шаблоном (template) для других аналогичных задач.

             jmp   setup

  x:         db    0x00
  r:         db    0x00
  l:         db    0x00
  tr:        db    0x00
  tl:        db    0x00
  
  setup:     movw  0xff
             movwr TRISA
             movw  0x00
             movwr TRISB
             movwr PORTB
             movwr TRISC
             movwr PORTC
             movwr x
             
  ; vvv --- your code here ---vvv
  
  ; read SWITCHES show to 7-SEG | count 0..ff to 7-SEG
  
  loop:      movrw PORTA        ; movrw x
             xorw  0xff         ; movwr PORTC
             movwr PORTC        ; call  sevenseg
             call  sevenseg     ; inc   x
             jmp   loop
             
  ; ^^^ --- your code here ---^^^
             
  sevenseg:  movwr l
             andw  0x0f
             movwr r
             call  sevensegr
             movrw l
             andw  0xf0
             movwr l
             call  sevensegl
             movrw tr
             movwr PORTB
             movrw tl
             movwr PORTB
             ret
  
  sevensegr: movwr r
             andw  0x0f
             subw  0x00
             jpz   rzero
             movrw r
             subw  0x01
             jpz   rone
             movrw r
             subw  0x02
             jpz   rtwo
             movrw r
             subw  0x03
             jpz   rthree
             movrw r
             subw  0x04
             jpz   rfour
             movrw r
             subw  0x05
             jpz   rfive
             movrw r
             subw  0x06
             jpz   rsix
             movrw r
             subw  0x07
             jpz   rseven
             movrw r
             subw  0x08
             jpz   reight
             movrw r
             subw  0x09
             jpz   rnine
             movrw r
             subw  0x0a
             jpz   rten
             movrw r
             subw  0x0b
             jpz   releven
             movrw r
             subw  0x0c
             jpz   rtwelve
             movrw r
             subw  0x0d
             jpz   rthirteen
             movrw r
             subw  0x0e
             jpz   rfourteen
             movrw r
             subw  0x0f
             jpz   rfifteen

  rzero:     movw  0x7d
             movwr tr
             ret  
  rone:      movw  0x05
             movwr tr
             ret  
  rtwo:      movw  0x5b
             movwr tr
             ret  
  rthree:    movw  0x4f
             movwr tr
             ret  
  rfour:     movw  0x27
             movwr tr
             ret  
  rfive:     movw  0x6e
             movwr tr
             ret  
  rsix:      movw  0x7e
             movwr tr
             ret  
  rseven:    movw  0x45
             movwr tr
             ret  
  reight:    movw  0x7f
             movwr tr
             ret  
  rnine:     movw  0x6f
             movwr tr
             ret  
  rten:      movw  0x77
             movwr tr
             ret  
  releven:   movw  0x3e
             movwr tr
             ret  
  rtwelve:   movw  0x1a
             movwr tr  
             ret  
  rthirteen: movw  0x1f
             movwr tr
             ret  
  rfourteen: movw  0x7a
             movwr tr
             ret  
  rfifteen:  movw  0x72
             movwr tr
             ret  

  sevensegl: movwr l
             subw  0x00
             jpz   lzero
             movrw l
             subw  0x10
             jpz   lone
             movrw l
             subw  0x20
             jpz   ltwo
             movrw l
             subw  0x30
             jpz   lthree
             movrw l
             subw  0x40
             jpz   lfour
             movrw l
             subw  0x50
             jpz   lfive
             movrw l
             subw  0x60
             jpz   lsix
             movrw l
             subw  0x70
             jpz   lseven
             movrw l
             subw  0x80
             jpz   leight
             movrw l
             subw  0x90
             jpz   lnine
             movrw l
             subw  0xa0
             jpz   lten
             movrw l
             subw  0xb0
             jpz   leleven
             movrw l
             subw  0xc0
             jpz   ltwelve
             movrw l
             subw  0xd0
             jpz   lthirteen
             movrw l
             subw  0xe0
             jpz   lfourteen
             movrw l
             subw  0xf0
             jpz   lfifteen

  lzero:     movw  0xfd
             movwr tl
             ret  
  lone:      movw  0x85
             movwr tl
             ret  
  ltwo:      movw  0xdb
             movwr tl
             ret  
  lthree:    movw  0xcf
             movwr tl
             ret  
  lfour:     movw  0xa7
             movwr tl
             ret  
  lfive:     movw  0xee
             movwr tl
             ret  
  lsix:      movw  0xfe
             movwr tl
             ret  
  lseven:    movw  0xc5
             movwr tl
             ret  
  leight:    movw  0xff
             movwr tl
             ret  
  lnine:     movw  0xef
             movwr tl
             ret  
  lten:      movw  0xf7
             movwr tl
             ret  
  leleven:   movw  0xbe
             movwr tl
             ret  
  ltwelve:   movw  0x9a
             movwr tl  
             ret  
  lthirteen: movw  0x9f
             movwr tl
             ret  
  lfourteen: movw  0xfa
             movwr tl
             ret  
  lfifteen:  movw  0xf2
             movwr tl
             ret  

----------

Работа 03. Подсхемы (функции)

Подключить к порту А линейку из 8 нормально-замкнутых контактов. Подключить к порту B линейку из 8 светодиодов

Показывать A + B на светодиоды:  1 на разомкнутом контакте, 0 по умолчанию.

           jmp   setup
           
  a:       db    0x00
  b:       db    0x00
  s:       db    0x00

  setup:   movw  0xff
           movwr TRISA
           movw  0x00
           movwr TRISB
           movwr PORTB
        
  loop:    call  seta
           call  setb   
           call  addab
           movwr PORTB
           jmp   loop
           
  seta:    movrw PORTA
           xorw  0xff
           andw  0x0f
           movwr a
           ret
           
  setb:    movrw PORTA
           xorw  0xff
           andw  0xf0
           movwr b
           ret
           
  addab:   movrw a
           movwr s
  chkbit3: movrw b
           andw  0x80
           jpz   chkbit2
           movrw s
           addw  0x08
           movwr s
  chkbit2: movrw b
           andw  0x40
           jpz   chkbit1
           movrw s
           addw  0x04
           movwr s
  chkbit1: movrw b
           andw  0x20
           jpz   chkbit0
           movrw s
           addw  0x02
           movwr s
  chkbit0: movrw b
           andw  0x10
           jpz   thatsit
           movrw s
           addw  0x01
           movwr s
  thatsit: movrw s
           ret
        
----------

Работа 04. Двоичный счетчик и перекодировщики

Подключить к порту А линейку из 8 светодиодов.
Подключить к порту B 7-сегментный индикатор.

           jmp   clean
         
  delay:   db    0x07
  tmp:     db    0x00
  
  clean:   movw  0x00
           movwr PORTA
           movwr PORTB
         
  zero:    movw  0x01
           movwr PORTA
           movw  0x7d
           movwr PORTB
           call  wait
           
  one:     movw  0x03
           movwr PORTA
           movw  0x05
           movwr PORTB
           call  wait          
         
  two:     movw  0x07
           movwr PORTA
           movw  0x5b
           movwr PORTB
           call  wait          
         
  three:   movw  0x0f
           movwr PORTA
           movw  0x4f
           movwr PORTB
           call  wait
         
  four:    movw  0x1f
           movwr PORTA
           movw  0x27
           movwr PORTB
           call  wait
         
  five:    movw  0x3f
           movwr PORTA
           movw  0x6e
           movwr PORTB
           call  wait
         
  six:     movw  0x7f
           movwr PORTA
           movw  0x7e
           movwr PORTB
           call  wait
         
  seven:   movw  0xff
           movwr PORTA
           movw  0x45
           movwr PORTB
           call  wait
           
           jmp   zero
          
  wait:    movrw delay
           movwr tmp
  waloop:  dec   tmp
           jpz   waout
           jmp   waloop
  waout:   ret

----------

Работа 05. Шаговый двигатель

  ; Подсоединить STEPPER к порту PORTA
  ;
  
             jmp   setup

  x:         db    0x00
  r:         db    0x00
  l:         db    0x00
  tr:        db    0x00
  tl:        db    0x00
  
  setup:     movw  0x00
             movwr TRISA
             movwr PORTA
             movwr TRISB
             movwr PORTB
             movwr TRISC
             movwr PORTC
             movwr x
            
  more:      movw    0x1
             movwr   porta
             call    tick
          
             movw    0x2
             movwr   porta
             call    tick
          
             movw    0x4
             movwr   porta
             call    tick
          
             movw    0x8
             movwr   porta 
             call    tick
          
             jmp     more
           
  tick:      inc    x
             movrw  x
             call   sevenseg
             ret

  sevenseg:  movwr l ;        code from lab3
             andw  0x0f
             movwr r
             call  sevensegr
             movrw l
             andw  0xf0
             movwr l
             call  sevensegl
             movrw tr
             movwr PORTB
             movrw tl
             movwr PORTB
             ret
  
  sevensegr: movwr r
             andw  0x0f
             subw  0x00
             jpz   rzero
             movrw r
             subw  0x01
             jpz   rone
             movrw r
             subw  0x02
             jpz   rtwo
             movrw r
             subw  0x03
             jpz   rthree
             movrw r
             subw  0x04
             jpz   rfour
             movrw r
             subw  0x05
             jpz   rfive
             movrw r
             subw  0x06
             jpz   rsix
             movrw r
             subw  0x07
             jpz   rseven
             movrw r
             subw  0x08
             jpz   reight
             movrw r
             subw  0x09
             jpz   rnine
             movrw r
             subw  0x0a
             jpz   rten
             movrw r
             subw  0x0b
             jpz   releven
             movrw r
             subw  0x0c
             jpz   rtwelve
             movrw r
             subw  0x0d
             jpz   rthirteen
             movrw r
             subw  0x0e
             jpz   rfourteen
             movrw r
             subw  0x0f
             jpz   rfifteen

  rzero:     movw  0x7d
             movwr tr
             ret  
  rone:      movw  0x05
             movwr tr
             ret  
  rtwo:      movw  0x5b
             movwr tr
             ret  
  rthree:    movw  0x4f
             movwr tr
             ret  
  rfour:     movw  0x27
             movwr tr
             ret  
  rfive:     movw  0x6e
             movwr tr
             ret  
  rsix:      movw  0x7e
             movwr tr
             ret  
  rseven:    movw  0x45
             movwr tr
             ret  
  reight:    movw  0x7f
             movwr tr
             ret  
  rnine:     movw  0x6f
             movwr tr
             ret  
  rten:      movw  0x77
             movwr tr
             ret  
  releven:   movw  0x3e
             movwr tr
             ret  
  rtwelve:   movw  0x1a
             movwr tr  
             ret  
  rthirteen: movw  0x1f
             movwr tr
             ret  
  rfourteen: movw  0x7a
             movwr tr
             ret  
  rfifteen:  movw  0x72
             movwr tr
             ret  

  sevensegl: movwr l
             subw  0x00
             jpz   lzero
             movrw l
             subw  0x10
             jpz   lone
             movrw l
             subw  0x20
             jpz   ltwo
             movrw l
             subw  0x30
             jpz   lthree
             movrw l
             subw  0x40
             jpz   lfour
             movrw l
             subw  0x50
             jpz   lfive
             movrw l
             subw  0x60
             jpz   lsix
             movrw l
             subw  0x70
             jpz   lseven
             movrw l
             subw  0x80
             jpz   leight
             movrw l
             subw  0x90
             jpz   lnine
             movrw l
             subw  0xa0
             jpz   lten
             movrw l
             subw  0xb0
             jpz   leleven
             movrw l
             subw  0xc0
             jpz   ltwelve
             movrw l
             subw  0xd0
             jpz   lthirteen
             movrw l
             subw  0xe0
             jpz   lfourteen
             movrw l
             subw  0xf0
             jpz   lfifteen

  lzero:     movw  0xfd
             movwr tl
             ret  
  lone:      movw  0x85
             movwr tl
             ret  
  ltwo:      movw  0xdb
             movwr tl
             ret  
  lthree:    movw  0xcf
             movwr tl
             ret  
  lfour:     movw  0xa7
             movwr tl
             ret  
  lfive:     movw  0xee
             movwr tl
             ret  
  lsix:      movw  0xfe
             movwr tl
             ret  
  lseven:    movw  0xc5
             movwr tl
             ret  
  leight:    movw  0xff
             movwr tl
             ret  
  lnine:     movw  0xef
             movwr tl
             ret  
  lten:      movw  0xf7
             movwr tl
             ret  
  leleven:   movw  0xbe
             movwr tl
             ret  
  ltwelve:   movw  0x9a
             movwr tl  
             ret  
  lthirteen: movw  0x9f
             movwr tl
             ret  
  lfourteen: movw  0xfa
             movwr tl
             ret  
  lfifteen:  movw  0xf2
             movwr tl
             ret  
  
----------

Работа 06. Knightrider

Подключить к порту А линейку из 8 светодиодов.

           jmp   clean
         
  delay:   db    0x07
  tmp:     db    0x00
  
  clean:   movw  0x00
           movwr PORTA
         
  zero:    movw  0x00
           movwr PORTA
           call  wait
           
  one:     movw  0x18
           movwr PORTA
           call  wait          
         
  two:     movw  0x3c
           movwr PORTA
           call  wait          
         
  three:   movw  0x7e
           movwr PORTA
           call  wait
         
  four:    movw  0xff
           movwr PORTA
           call  wait
         
  five:    movw  0x7e
           movwr PORTA
           call  wait
         
  six:     movw  0x3c
           movwr PORTA
           call  wait
         
  seven:   movw  0x18
           movwr PORTA
           call  wait
           
           jmp   zero
          
  wait:    movrw delay
           movwr tmp
  waloop:  dec   tmp
           jpz   waout
           jmp   waloop
  waout:   ret

----------

Работа 07. Схемы с таймерами (DelayMS)

Показать на светодиодах меандр с заданным временем пребывания в нуле и единице.

           jmp   clean
         
  dlyon:   db    0x02
  dlyoff:  db    0x10
  tmp:     db    0x00
  
  clean:   movw  0x00
           movwr PORTA
         
  off:     movw  0x00
           movwr PORTA
           call  waitoff
           
  on:      movw  0xff
           movwr PORTA
           movw  0x05
           movwr PORTB
           call  waiton
           
           jmp   off
          
  waiton:  movrw dlyon
           movwr tmp
  wnloop:  dec   tmp
           jpz   wnout
           jmp   wnloop
  wnout:   ret

  waitoff: movrw dlyoff
           movwr tmp
  wfloop:  dec   tmp
           jpz   wfout
           jmp   wfloop
  wfout:   ret

----------

Работа 08. Знакомство с аналоговыми функциональными блоками.
           (нет)

----------
           
Работа 09. Аналоговые усилители и компаратор.  (нет)

----------

Работа 10. Цифровые фильтры

Байтовая don't care маска задана двумя байтами:

  dontcare   EQ    0x4c ;  01001100
  mask       EQ    0xd5 ;  11010101

тогда

  truemask   EQ    0x91 ;  10010001 - bits under 1 must be 1
  falsemask  EQ    0x22 ;  00100010 - bits under 1 must be 0 
  
На выход будут допущены байты вида: 1x01xx01 (8 из 256).

К порту PORTA подключена линейка из 8 светодиодов (показывает входное слово). К порту PORTB подключен светофор (показывает проходит байт на выход (зеленый свет) или нет (красный свет).

             jmp   clean
         
  counter:   db    0x00
  icounter:  db    0xff
  delay:     db    0x07
  tmp:       db    0x00
  
  clean:     movw  0x00
             movwr PORTB

  repeat:    movrw counter
             movwr PORTA
             xorw  0xff
             andw  0x91 ;  truemask
             jpz   checktrue
             jmp   red
  checktrue: movrw counter
             andw  0x22 ;  falsemask
             jpz   green
             jmp   red
  green:     movw  0x81
             movwr PORTB
             inc   counter
             jmp   repeat
            
  red:       movw  0x00
             movwr PORTA
             movw  0x24
             movwr PORTB
             inc   counter
             jmp   repeat

----------

Работа 11. Пи-регулятор. (нет)

----------

