Компиляция (с распечаткой всех файлов, полученных во время компиляции: obj, lst, erl, sym)

В ходе компиляции был получен объектный модуль и НЕХ – файл пригодный для прошивки в память микроконтроллера.

Приведем фрагменты файлов полученных во время компиляции:

Файл KURSOV.lst:

MPASM 02.50.02 Intermediate KURSOV.ASM 4-20-2006 9:09:06 PAGE 1

LOC OBJECT CODE LINE SOURCE TEXT

VALUE

 

                 00001 list p=16C72

                 00002 #include <P16C72.inc>

                 00001    LIST

                 00002; P16C72.INC Standard Header File, Version 1.01 Microchip Technology, Inc.

                 00249    LIST

                 00003

00000020       00004 TMP EQU 20H

00000021       00005 K1 EQU 21H

00000022       00006 K2 EQU 22H

                 00007

00000023       00008 SOTNI EQU 23H

00000024       00009 DESYATKI EQU 24H

00000025       00010 EDINICI EQU 25H

               00011

00000028       00012 SAVEW      EQU 28H

00000030       00013 SAVEW2     EQU 30H

00000029       00014 SAVESTATUS EQU 29H

00000031       00015 SAVESTATUS2 EQU 31H

                 00016

00000026       00017 SV EQU 26H; STACK VERTEX

00000027       00018 SP EQU 27H; STACK POINTER

                 00019

                 00020

00000032       00021 DINAMIK EQU 32H

                 00022

00000033       00023 CT EQU 33H; FOR DELAY

                 00024

                 00025;STK 40h-5Eh; STACK ADDRES FOR TEN BCD TRIADS

                 00026

Warning[205]: Found directive in column 1. (ORG)

0000             00027 ORG 0x00       ; processor reset vector

0000 28B5      00028    GOTO Start      ; go to beginning of program

                 00029

                 00030

00031; -------------IRQ

Warning[205]: Found directive in column 1. (ORG)

0004             00032 ORG 0x04               ; обработка прерывания осуществляется за 9 циклов (4,5 мкс)

0004 1C0C      00033    BTFSS PIR1, TMR1IF; анализ

0005 2818      00034    goto IRQTMR2   ; источника прерывания

                 00035

0006               00036 IRQTMR1                   ; обработчик прерывания от таймера

                00037;------ PUSH REGISTERS---------

0006 00A8      00038    MOVWF SAVEW

0007 0803      00039    MOVF STATUS,W

0008 00A9      00040    MOVWF SAVESTATUS

0009 0804      00041    MOVF FSR,W

000A 00A6      00042    MOVWF SV

                 00043;------------------------------

000B 1010      00044    BCF T1CON,TMR1ON; TIMER STPR

000C 3038      00045    MOVLW B'00111000'

000D 008E      00046    MOVWF TMR1L

000E 30A7      00047    MOVLW B'10100111'

000F 008F      00048    MOVWF TMR1H

MPASM 02.50.02 Intermediate KURSOV.ASM 4-20-2006 9:09:06    PAGE 2

 

LOC OBJECT CODE LINE SOURCE TEXT

 

VALUE

 

0010 1410      00049    BSF T1CON,TMR1ON; TIMER ON

0011 100C      00050    BCF PIR1, TMR1IF; сброс флага переполнения от таймера

0012 2116      00051    CALL INDICATION

                 00052

                 00053;------ POP REGISTERS ---------

0013 0826      00054    MOVF SV,W

0014 0084      00055    MOVWF FSR

0015 0829      00056    MOVF SAVESTATUS,W

0016 0083      00057    MOVWF STATUS

0017 0828      00058    MOVF SAVEW,W

                 00059;------------------------------

 

---------------------------------

---------------------------------

 

Файл KURSOV.err:

Warning[205] D:\MPLAB\KURSOV.ASM 27: Found directive in column 1. (ORG)

Warning[205] D:\MPLAB\KURSOV.ASM 32: Found directive in column 1. (ORG)

Warning[203] D:\MPLAB\KURSOV.ASM 83: Found opcode in column 1. (retfie)

Warning[205] D:\MPLAB\KURSOV.ASM 86: Found directive in column 1. (ORG)

Message[302] D:\MPLAB\KURSOV.ASM 107: Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:\MPLAB\KURSOV.ASM 109: Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:\MPLAB\KURSOV.ASM 111: Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:\MPLAB\KURSOV.ASM 167: Register in operand not in bank 0. Ensure that bank bits are correct.

Message[302] D:\MPLAB\KURSOV.ASM 168: Register in operand not in bank 0. Ensure that bank bits are correct.

Warning[203] D:\MPLAB\KURSOV.ASM 322: Found opcode in column 1. (RETURN)

Warning[203] D:\MPLAB\KURSOV.ASM 399: Found opcode in column 1. (RETURN)

Warning[203] D:\MPLAB\KURSOV.ASM 419: Found opcode in column 1. (RETURN)

Warning[203] D:\MPLAB\KURSOV.ASM 434: Found opcode in column 1. (RETURN)

Warning[205] D:\MPLAB\KURSOV.ASM 438: Found directive in column 1. (END)

 

Файл KURSOV.hex:

:02000000B52821

:080008000C1C1828A8000308D5

:10001000A9000408A600101038308E00A7308F0009

:1000200010140C10162126088400290883002808C3

:100030008C1C2628B0000308B1001211003091007A

:0E00400012158C105C21310883003008090075

:0C01540082073F3406345B344F346634BD

:100160006D347D3407347F346F3403138316FF30CE

:10017000850000308600003087008312FF30A00029

:10018000A501A301A401B201850186018701073001

:100190008700FF30B3007830A2002D30A10040303E

:1001A0008400A700A60038308E00A7308F00900191

:1001B00010140C108B170B1783160C148C1483124D

:1001C000C1309F001F1534211F19E4287F309E0085

:1001D0001E08A000FF30B300000000000000000077

:1001E000000000000000000000000000000000000F

:1001F00000000000000000000000B30BEC2803101A

:1002000021082002031C0D29031020082202031CD0

:100210000D29121187150712DF2807168711920181

:100220008C101211FC3091001215DF282708840071

:1002300000080710860067210714840A0008871049

:10024000860067218714840A000807118600672149

:100250000715840A03105E300402031C3129403064

:1002600084000408A7000800A301A401A501A30AB3

:100270006430A00203183729A3036430A007A40A3E

:100280000A30A00203183F29A4030A30A00720085F

:10029000A500AA208000840A2408AA208000840ADD

:1002A0002308AA208000840A03105E300402031C85

:1002B0005B29403084000800031001303202031C27

:1002C0006429B20387120800B20A87160800FF30BB

:1002D000B30000000000000000000000000000006B

:0602E000B30B69290800C0

:00000001FF


6.5.2. Моделирование

Моделирование производилось в интегрированной среде разработки MPLAB (кратко в разделе 6.5 этого документа).

Для проверки состояния регистров мы использовали окно «watch», а для подсчета времени выполнения процедур в программе были расставлены breakpoint’ы и использовалось окно «stopwatch».

В результате моделирования установлена работоспособность программы. исследованы получившиеся временные характеристики:

Процедура BINTOSEVEN– в худшем случае (при преобразовании уровня 5В) – 99 мкс.

Процедура INDICATION– 7694 мкс

Интервал между вызовами INDICATION – 22741 мкс (44Гц)

Интервал между вызовами SOUNDINDICATION – 268 мкс (3731Гц)

Данные временные характеристики полностью удовлетворяют ТЗ.


СПИСОК ИСПОЛЬЗОВАННОЙ ЛИТЕРАТУРЫ

 

1) В.В.Скороделов "Проектирование устройств на однокристальных микроконтроллерах с RISC-архитектурой". Ч1,Ч2, Учебное пособие.

2) Угрюмов Е. П. Проектирование элементов и узлов ЭВМ. М.: Высшая школа, 1991.

3) Шило В. Л. Популярные цифровые микросхемы. М.: Радио и связь, 1988.

4) Тули М. Справочное пособие по цифровой электронике. М.: “Энергоатомиздат”, 1990.

5) Бирюков С.А. “Применение интегральных микросхем серии ТТЛ”. М.: “Патриот”, 1992.

6) Применение интегральных микросхем в электронной вычислительной технике. Справочник (под ред. Б.И.Файзулаева, –М, Радио и связь, 1989)

7) ГОСТ 2.102-68. Виды и комплектность конструкторской докуметации. М.: 1988.

8) ГОСТ 2.708-81. Правила выполнения электрических схем цифровой вычислительной техники. М.: 1988.

9) Разработка и оформление конструкторской документации. РЭА. Справочник (под ред. Э.Г.Романычевой – М.: Радио и связь, 1989)

10) Ю.В.Новиков, О.А.Калашников "Разработка устройств сопряжения". Издательство "ЭКОМ", Москва, 1998г. 355 с.


Заключение

 

В данном проекте был разработано устройство контроля за уровнями аналоговых сигналов.

Это устройство предназначено для измерения уровней входных аналоговых сигналов, проверки попадания уровня в определенные границы и отображения на цифровом табло текущего значения уровня сигнала.

Устройство реализовано на однокристальном микроконтроллере типа PIC16С71.

Применение в устройстве данного однокристального микроконтроллера привело к экономии элементов, возможности меняя программу работы в широких пределах корректировать алгоритм обработки данных. Также улучшились весогабаритные параметры.

Устройство имеет следующие характеристики:

Потребляемая мощность не более 0,5 Вт;

Наработка на отказ около 35000 часов;

Уровни входных сигналов 0-5 В.

Промоделировав работу программы и проанализировав, полученные при моделировании, временные характеристики можем сказать что устройство полностью удовлетворяет требованиям, поставленным в ТЗ.

В качестве улучшения можно предложить доработать устройство, а конкретнее добавить возможность контроля за уровнями аналоговых сигналов, уровень которых выше 5В.

В качестве решения можно предложить поставить на входе АЦП делитель уровня и учитывать его коэффициент деления в программе (для перевода результата отображения в семисегментный код).

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


 

Обозначение Наименование Количество
     
  Конденсаторы  
С1 K50-6-20 мкФ – 16В 1
С2-С3 МРТ-111-20 пФ±10%-63В 2
С4 КМ – 6 – 9 - 0,47 +- 10% ОЖО 464. 023 ТУ 1
     
  Микросхемы  
DD1 PIC16С72 1
HG АЛС324А 3
     
  Кварц  
ZQ1 4 МГц 1
     
     
     
  Разъемы  
ХТ1 СНО 4 1
     
  Телефон  
BF1 ТОН-2 1
     
  Кнопки  
SA1 П2К 1
     
  Резисторы  
R1 ОМЛТ 0,125 – 300 Ом 1
R2-R11 ОМЛТ 0,125 – 1,2 КОм 10
     
     






Приложение А

 

Текст программы:

 

list p=16C72

#include <P16C72.inc>

 

TMP EQU 20H

K1 EQU 21H

K2 EQU 22H

 

SOTNI  EQU 23H

DESYATKI EQU 24H

EDINICI EQU 25H

 

SAVEW         EQU 28H

SAVEW2       EQU 30H

SAVESTATUS EQU     29H

SAVESTATUS2 EQU 31H

 

SV EQU 26H; STACK VERTEX

SP EQU 27H; STACK POINTER

 

 

DINAMIK EQU 32H

 

CT EQU 33H; FOR DELAY

 

;STK 40h-5Eh; STACK ADDRES FOR TEN BCD TRIADS

 

ORG 0x00       ; processor reset vector

    GOTO Start      ; go to beginning of program

 

 

; -------------IRQ

ORG 0x04        ; обработка прерывания осуществляется за 9 циклов (4,5 мкс)

    BTFSS  PIR1, TMR1IF; анализ

    goto IRQTMR2     ; источника прерывания

 

IRQTMR1                       ; обработчик прерывания от таймера

;------ PUSH REGISTERS---------

    MOVWF SAVEW

    MOVF   STATUS,W

    MOVWF SAVESTATUS

    MOVF   FSR,W

    MOVWF SV

;------------------------------

    BCF T1CON,TMR1ON  ; TIMER STPR

    MOVLW B'00111000'

    MOVWF TMR1L

    MOVLW B'10100111'

    MOVWF TMR1H

    BSF T1CON,TMR1ON  ; TIMER ON

    BCF PIR1, TMR1IF; сброс флага переполнения от таймера

CALL    INDICATION

 

;------ POP REGISTERS ---------

    MOVF SV,W

    MOVWF FSR

    MOVF SAVESTATUS,W

    MOVWF STATUS

    MOVF   SAVEW,W

;------------------------------

IRQTMR2

    BTFSS  PIR1, TMR2IF; анализ

    goto RET 

T2BREAK

;------ PUSH REGISTERS---------

    MOVWF SAVEW2

    MOVF   STATUS,W

    MOVWF SAVESTATUS2

;------------------------------

    BCF T2CON,TMR2ON  ; TIMER2 STOP

    MOVLW B'00000000'

    MOVWF TMR2

    BSF T2CON,TMR2ON  ; TIMER2 ON

    BCF PIR1, TMR2IF; сброс флага переполнения от таймера

CALL    SOUNDINDICATION

 

;------ POP REGISTERS ---------

    MOVF SAVESTATUS2,W

    MOVWF STATUS

    MOVF   SAVEW2,W

;------------------------------

 

RET

retfie              ; возврат из прерывания

 

 

ORG 0xAA

 

TOSEVEN

       addwf PCL,F  ; W + PC -> PC

       retlw b'00111111';..FEDCBA = '0'

       retlw b'00000110';.....CB. = '1'

       retlw b'01011011';.G.ED.BA = '2'

       retlw b'01001111';.G..DCBA = '3'

       retlw b'01100110';.GF..CB. = '4'

       retlw b'01101101';.GF.DC.A = '5'

       retlw b'01111101';.GFEDC.A = '6'

       retlw b'00000111';.....CBA = '7'

       retlw b'01111111';.GFEDCBA = '8'

       retlw b'01101111';.GF.DCBA = '9'

 

 

Start

   BCF STATUS,6

   BSF STATUS,5; BANK1

 

    MOVLW B'11111111';INITA

    MOVWF TRISA

    MOVLW B'00000000';INITB

    MOVWF TRISB

    MOVLW B'00000000';INITC

    MOVWF TRISC

        

 

   BCF STATUS,5; BANK 0

;--------------------------- INIT VAR

 

;----------------- TESTS

    MOVLW B'11111111'

    MOVWF TMP

;----------------------

;   CLRF    TMP

 

    CLRF    EDINICI

    CLRF    SOTNI

    CLRF    DESYATKI

    CLRF    DINAMIK

    CLRF    PORTA

    CLRF    PORTB

    CLRF    PORTC

    MOVLW B'00000111'

    MOVWF PORTC

        

    MOVLW B'11111111'

    MOVWF CT   

    MOVLW.120

    MOVWF K2    

    MOVLW.45

    MOVWF K1    

 

;--------------------------- INIT STACK

    MOVLW 0x40

    MOVWF FSR

    MOVWF SP

    MOVWF SV

 

;--------------------------- INIT TIMER1

    MOVLW B'00111000'

    MOVWF TMR1L

    MOVLW B'10100111'

    MOVWF TMR1H

 

;------------------------------- INIT TIMER 2

 

; --------------------------- RUN TIMER1

 

    CLRF    T1CON

    BSF T1CON,TMR1ON; TIMER ON

 

    BCF    PIR1,TMR1IF

 

    BSF     INTCON,GIE

    BSF     INTCON,PEIE

 

   BSF STATUS,5; BANK1

    BSF     PIE1,TMR1IE

    BSF     PIE1,TMR2IE

 

;   MOVLW B'00000001'

;   MOVWF PIE1

 

 

MAIN

;--------------------------------------------- ADC ------------

 

    BCF STATUS,5; BANK0

    MOVLW B'11000001'

    MOVWF ADCON0

    BSF ADCON0,2; START CONV

 

    CALL    BINTOSEVEN

 

LOOP        

    BTFSC ADCON0,2

    GOTO   LOOP

 

 

;---------------------------- TEST VALUES

;   MOVLW B'1100100'; POADAET

;   MOVLW B'0000000'; NIJE

    MOVLW B'1111111'; VISHE

    MOVWF ADRES        

;---------------------------

    MOVF ADRES,W

    MOVWF TMP

 

;DELAY;----5106-CYCLES 1CYCLE=1us

    MOVLW.255

    MOVWF CT

D2    

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

 

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

 

    DECFSZ CT,1

    GOTO D2

 

COMP

; ----------------- COMPARE -----------

;   K1< ADC <K2????

 

;---- K1< ADC? ----------

    BCF STATUS,0

    MOVF   K1,W                  

    SUBWF TMP,0           ; ADFRES-K1

    BTFSS  STATUS,0; ЕСЛИ ADRES<ki, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРО

                                ; ПРОПУСТИТЬ СЛЕД КОМАНДУ) 

    GOTO   NO

 

;---- ADC <=K2? --------

    BCF STATUS,0

    MOVF   TMP,W               

    SUBWF K2,0     ; ADFRES-K1

    BTFSS  STATUS,0; ЕСЛИ ADRES>ki, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРО

                                ; ПРОПУСТИТЬ СЛЕД КОМАНДУ) 

    GOTO   NO

 

;YES

;--------------- TIMER 2 STOP

    BCF T2CON,TMR2ON; TIMER STOP

    BSF PORTC,3

    BCF PORTC,4

    GOTO MAIN

 

NO

;--------------- TIMER2 ON WITH IMMIDIATLY IRQ

 

    BSF PORTC,4

    BCF PORTC,3

        

    CLRF    T2CON

    BCF PIR1, TMR2IF; сброс флага переполнения от таймера         

    BCF T2CON,TMR2ON  ; TIMER2 STOP

    MOVLW B'11111100'

    MOVWF TMR2

    BSF T2CON,TMR2ON  ; TIMER2 ON

        

 

 

;--------------------------------------------------

 

 

    GOTO   MAIN

 

; -------------------- DYNAMIC INDICATION PROCEDURE

 

INDICATION

 

;----------- RESTORE SP VALUE-----------

    MOVF SP,W

    MOVWF FSR

;---------------------------------------

 

    MOVF   INDF,W

    BCF     PORTC,0

    MOVWF PORTB

    CALL    DELAY

    BSF PORTC,0  

    INCF     FSR,F

 

    MOVF   INDF,W

    BCF     PORTC,1  

    MOVWF PORTB

    CALL    DELAY

    BSF PORTC,1  

    INCF     FSR,F

 

    MOVF   INDF,W

    BCF     PORTC,2  

    MOVWF PORTB

    CALL    DELAY

    BSF PORTC,2  

    INCF     FSR,F

 

 

;-------------------CALCULATE SP (STACK POINTER)

;---- 5Eh< FSR? ----------

    BCF STATUS,0

    MOVLW 0x5E         

    SUBWF FSR,0            ; ADFRES-K1

    BTFSS  STATUS,0; ЕСЛИ FSR<70h, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРОПРОПУСТИТЬ СЛЕД КОМАНДУ) 

    GOTO   SPFSRNO

 

    MOVLW 0x40

    MOVWF FSR

 

SPFSRNO

;------------ PUSH SP VALUE ----------

    MOVF   FSR,W

    MOVWF SP

 

RETURN

 

;---------------------- BINARY TO SEVENSEGMENTS GODE CONVERTION

BINTOSEVEN

; ----------- MUL x2 --------------

    clrf SOTNI

    clrf DESYATKI

    clrf EDINICI

 

 

;   RLF TMP,1

;   BTFSS  STATUS,0;  

;   GOTO   M1

;

;   MOVLW.2       

;   MOVWF SOTNI

;   MOVLW.5       

;   MOVWF DESYATKI

;   MOVLW.6       

;   MOVWF EDINICI

 

M1

 

;----------- convert bin to bcd -------------

;   clrf SOTNI

pr0   

    incf SOTNI,f;разряд сотен

    movlw  .100

    subwf    TMP,f

    btfsc STATUS,0

    goto pr0

    decf SOTNI,f

    movlw  .100

    addwf    TMP,F

;   clrf DESYATKI

pr1

    incf DESYATKI,F;разряд десятков

    movlw  .10

    subwf    TMP,F

    btfsc STATUS,0

    goto pr1

    decf DESYATKI,F

    movlw  .10

    addwf    TMP,F

;   clrf EDINICI

 

    movf TMP,W

    movwf   EDINICI

 

;----------- convert bcd to seven segments code -------------

TTTT

    CALL    TOSEVEN

    MOVWF INDF

    INCF     FSR,F

 

    MOVF   DESYATKI,W

    CALL    TOSEVEN

    MOVWF INDF

    INCF     FSR,F        

 

    MOVF   SOTNI,W

    CALL    TOSEVEN

    MOVWF INDF

    INCF     FSR,F

 

;-------------------CALCULATE SV (STACK VERTEX)

;---- 5Eh< FSR? ----------

    BCF STATUS,0

    MOVLW 0x5E         

    SUBWF FSR,0            ; ADFRES-K1

    BTFSS  STATUS,0; ЕСЛИ FSR<70h, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРОПРОПУСТИТЬ СЛЕД КОМАНДУ) 

    GOTO   SVFSRNO

 

    MOVLW 0x40

    MOVWF FSR

 

SVFSRNO

RETURN

 

;---------------------- SOUND INDICATION PROCEDURE

SOUNDINDICATION

 

    BCF STATUS,0

    MOVLW 0x1            

    SUBWF DINAMIK,0            ; ADFRES-K1

    BTFSS  STATUS,0; ЕСЛИ FSR<70h, ТО ПЕРЕЙТИ НА NO (ИНАЧЕ ПРОПРОПУСТИТЬ СЛЕД КОМАНДУ) 

    GOTO   DIN

 

 

    DECF    DINAMIK,F

    BCF PORTC,5

    RETURN

 

DIN

    INCF     DINAMIK,F

    BSF PORTC,5

 

RETURN

 

DELAY;----2555-CYCLES 1CYCLE=1us

    MOVLW.255

    MOVWF CT

D1    

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    NOP

    DECFSZ CT,1

    GOTO D1

RETURN

 

 

END


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: