Вивчення принципу роботи аналого-цифрового перетворювача на прикладі мікроконтролера PIC16C71, страница 2

        movlw b'11101110'     ;все разряды PORTB кроме RB0 и RB4

       TRIS PORTB            ;на ввод

       return                 

Convert

delay  call Delay30us        ;задержка 30 мкс

       bsf ADCON0,GO_DONE      ;запуск АЦП (начать перобразование)

m1      btfsc ADCON0,GO_DONE  ;ожидаем конца переобразования      

        goto m1

       movf ADRES,W          ;копируем полученный результат в W

       return

Delay30us             ;подпрограмма реализующая задержку 30 мкс

       nop

       nop

       nop

       nop

        return

proc_B                ;подпрограмма выполняющая декпемент 16-розрядно счетчика  

       decfsz counter_l        ;декремент младшего байта счетчика

        goto m2                 ;переход если нет переполнения

        decf counter_h          ;декремент старшего байта счетчика

m2      movf counter_l,0

       return

proc_E         ;подпрограмма формирующая импульс ti=5*tц

       bcf PORTB,0           ;сброс RB0

       bsf PORTB,0           ;установка RB0

       nop                   ;пустая команда

       nop                   ;пустая команда

       nop                   ;пустая команда

        nop                  ;пустая команда

        nop                   ;пустая команда

       bcf PORTB,0           ;сброс RB0

       return

analog         ;вызов подпрограммы формирующей на RB4 сигнал

               ;с периодом Т=32 мсек и числом уровней квантования 256

       movlw .255

       movwf an2

n3     decfsz an2

       goto n1

       goto n2

n1     bcf PORTB,4           ;сброс RB4

       call t_32mc           ;задежка 32 мсек

       bsf PORTB,4           ;установка RB4

       call t_32mc           ;задежка 32 мсек

       goto n3

n2     return

t_32mc                ;подпрграмма формирующая задержку 32 мсек

       movlw .45

       movwf an1

k2     decfsz an1

       goto m4

       goto m5

m4     movlw .241

       movwf del

m3     decfsz del       

        goto m3            ;переход если нет переполнения

        goto k2

m5     return

       END                   ;конец программы

Тект файлу лістинга цієї програми має наступний вигляд:

MPASM 02.20 Released             LAB6.ASM   5-25-2004  19:46:50         PAGE  1

LOC  OBJECT CODE     LINE SOURCE TEXT

  VALUE

                    00001         list p=16с71            ;определение типа мк

                    00002         #include P16c71.inc     ;подключение файла p16с71.inc

                    00001         LIST

                    00002 ; P16C71.INC  Standard Header File, Version 1.00    Microchip Technology, Inc.

                    00142         LIST

  0000000C          00003         counter_l EQU 0x0c      ;младший байт 16-розрядного счетчика

  0000000D          00004              T_U1 EQU 0x0d      ;ячейка в которой будет сохранено значение первого аналогового сигнала

  0000000E          00005               del EQU 0x0e      ;дополнительная ячейка

  0000000F          00006              T_U2 EQU 0x0f      ;ячейка в которой будет сохранено значение второго аналогового сигнала

  00000010          00007         counter_h EQU 0x10      ;старший байт 16-розрядного счетчика

  00000011          00008              test EQU 0x11      ;дополнительная ячейка

  00000012          00009               an1 EQU 0x12      ;дополнительная ячейка

  00000013          00010               an2 EQU 0x13      ;дополнительная ячейка

                    00011

0000 138B           00012         bcf INTCON, GIE         ;запрет прерываний

0001 2802           00013         goto start

                    00014        

0002 2011           00015 start   call initAD             ;вызов подпрограммы

0003 201A           00016         call Convert            ;вызов подпрограммы

0004 008D           00017         movwf T_U1       ;сохраняем значени первого аналогового сигнала

0005 201A           00018         call Convert            ;вызов подпрограммы

0006 008F           00019         movwf T_U2       ;сохраняем значени второго аналогового сигнала