Розробка програми управління

Автор: Пользователь скрыл имя, 19 Февраля 2012 в 20:08, курсовая работа

Описание работы

По суті, мікроконтролер складається з простого мікропроцесорного ядра всією необхідною пам'яттю програм і даних. До цього додається периферія, що забезпечує необхідні інтерфейси. Сюди відносяться цифрове і аналогове введення-виведення, елементи синхронізації і рахунку та ін. Як і будь-яка електронна схема, мікроконтролер вимагає схеми живлення і йому необхідний синхронізуючий сигнал для управління внутрішніми логічними схемами (у деяких мікроконтролерах він генерується вбудованими компонентами).

Содержание

Вступ 5
1 Загальний розділ 7
2 Опис пристрою 15
3 Розробка алгоритму роботи 17
3.1 Опис елементної бази 17
3.2 Опис принципової електричної схеми пристрою 22
3.3 Опис алгоритму управління 26
4 Розробка програми управління 27
Висновки 34
Література 35

Работа содержит 1 файл

Генератор.doc

— 976.00 Кб (Скачать)

       При натисненні  кнопки "*" значення частоти і позиція курсора зберігаються в незалежній пам'яті мікроконтролера, завдяки чому при наступному включенні живлення перерваний режим роботи автоматично відновлюється .

       Оскільки обчислювальні здібності мікроконтролера обмежені, значення вихідної частоти виставляється з точністю близько 1 Гц, що достатньо для більшості випадків. Щоб повною мірою реалізувати можливості синтезатора, їм можна управляти за допомогою ПК. Для цього генератор необхідно допрацювати, доповнивши його вузлом, схема якого показана на мал. 3. ПК (або інший пристрій, що керує) підключають до розетки XS1. При низькому логічному рівні на адресних входах А мультиплексори мікросхеми DD3 підключають входи управління синтезатором до мікроконтролера DD1, а при високому - до зовнішнього пристрою. Сигнали управління поступають через контакт "ENABLE" розетки XS1. Резистор R19 забезпечує низький логічний рівень на адресних входах DD3 при непідключеному пристрої управління.

     

       Генератор зібраний  і випробуваний  на макетній платі.  Якщо не вдасться  придбати плату  під корпус SSOP для мікросхеми DD2, можна використовувати для підключення її виводів до відповідних контактних майданчиків короткі (завдовжки 10 15 мм) відрізки лудженого дроту діаметром 0,2 мм. Виводи 1,2,5,10,19, 24, 26, 27, 28 сполучають із загальним дротом одним відрізком більшої довжини.

       РК індикатор HG1 – ITM-1601A (16-символьний однорядковий з вбудованим контролером). НA1 - будь-який п'єзоелектричний випромінювач звуку з вбудованим генератором, розрахований на напругу 5 В. Як тактовий генератор (G1) можна використовувати мікрозборку кварцевого генератора на частоту до 125 Мгц, допустиме застосування подібного вузла з кварцевою стабілізацією і на дискретних елементах.

 

       3.3 Опис алгоритму  управління

      Схема алгоритму управління представлена на рисунку 3.5:

      

                    Рисунок 3.5 - Алгоритм управління

      

      4 Розробка програми  управління

     Програма  мікроконтролера, що керує, залежить від частоти тактового генератора.

       При програмуванні  мікроконтролера  в конфігураційному  слові встановлюють  наступні значення  битів: тип генератора (OSC) - RC. сторожовий таймер (WDT) - вимкнений, затримка після включення живлення (PWRTE) - дозволена.

      Далі  привдена програма керованого генератора прямокутного сигналу.  

        LIST P=16C63A, R=DEC

        include "p16c63a.inc"

        __CONFIG _WDT_OFF & _XT_OSC & _PWRTE_ON & _BODEN_ON

        __IDLOCS H'1200'

StartByte  EQU 0x20

Cnt0  EQU 0x21

Cnt1  EQU 0x22

Cnt2  EQU 0x23

TimeH0Loaded  EQU 0x24

TimeH1Loaded  EQU 0x25

TimeH2Loaded  EQU 0x26

TimeL0Loaded  EQU 0x27

TimeL1Loaded  EQU 0x28

TimeL2Loaded  EQU 0x29

TimeH0  EQU 0x30

TimeH1  EQU 0x31

TimeH2  EQU 0x32

TimeL0  EQU 0x33

TimeL1  EQU 0x34

TimeL2  EQU 0x35

      ORG     0

Start ;Встановка початкових значень змінних і SFR

      BCF  PORTC,3 ; заборона видачі частоти синхронізації для CC 60

      CLRF  PORTB ; виключення світлодіодів і живлення картки

                BSF    STATUS,RP0      ;вибір другого банку пам'яті

      MOVLW 0x01

                MOVWF  TRISA           ;порт A налаштований на роботу як вихід окрім RA0 (I/O)

                MOVWF  TRISB           ;усі виводи порту В налаштовані на роботу як виходи окрім RB0

      MOVLW 0xB6

                MOVWF  TRISC ;RC2 = MCLR

      BCF  OPTION_REG,7 ;дозволен Pull up резистори на порту B (~200K)

                BCF    STATUS, RP0 ; із за того що в команді адреса регістра задається тільки 7 бітами, а для адресації всієї пам'яті мікросхеми треба як мінімум 8, старші біти адреси зберігаються окремо в регістрі STATUS, це бити RP0 і RP1. Бит RP1 використовується тільки в мікросхемах з об'ємом RAM більше 256 байт. Бити RP0 і RP1 визначають використовуваний банк регістрів, а номер регистра всередині поточного банку береться з коду команди. Мікросхема має 2 банки регисров. Деякі регістри, що управляють, знаходяться в другому банку.

      MOVLW 0 ;0x90

                MOVWF  INTCON ;скидання не використовується

                MOVLW   0x15            ;налагодження таймера 1

                MOVWF  T1CON

                MOVLW  0x0B            ;налагодження модуля для скидання таймера 1

                MOVWF  CCP1CON

                MOVLW   0x64

                MOVWF  CCPR1L

                MOVLW   0x57

                MOVWF  CCPR1H

;                CLRF   TimeCardOn      ;сброс часу для вставки картки

                MOVLW   0x90; 0xD0 - for parity

                MOVWF  RCSTA           ;налагодження параметрів приймача USART. Регістр RCSTA керує настройкою приймача послідовного порту

                BSF    STATUS,RP0      ;вибір другого банку пам'яті

                MOVLW   0x24; 0x64 - for parity

                MOVWF  TXSTA           ;налагодження параметрів передавача USART

                MOVLW 0x01 ;(115200 бод)

                MOVWF  SPBRG           ;налагодження швидкості обміну по послідовному порту

                BCF    STATUS,RP0      ;после настройки SFR востанавливаем банк пам'яті

                CLRF   PORTA

      BSF  PORTC,0 ; видаємо сигнал комп'ютеру об отсутсвии картки

; BSF  Flags,SlotEmpty ; слот порожній

      MOVLW 0x20

      MOVWF  FSR 

      MOVLW  0xFF

      MOVWF  Cnt0

      MOVWF  Cnt1

      MOVWF  Cnt2

      MOVWF  TimeH0Loaded

      MOVWF  TimeH1Loaded

      MOVWF  TimeH2Loaded

      MOVWF  TimeL0Loaded

      MOVWF  TimeL1Loaded

      MOVWF  TimeL2Loaded

      MOVLW 10

      MOVWF  TimeH0

      MOVLW 10

      MOVWF  TimeH1

      MOVLW 10

      MOVWF  TimeH2

      MOVWF  TimeL0

      MOVWF  TimeL1

      MOVWF  TimeL2

; GOTO  NoCarryL

      ; Збільшуємо значення  лічильника TIMEH на одиницю

NoCarryH  BTFSC   PIR1,RCIF

                CALL   GetRSData

      MOVLW 1

      ADDWF  TimeH0,W

      MOVWF  TimeH0

      BTFSS  STATUS,C

      GOTO  NoCarryH

      MOVLW 1

      ADDWF  TimeH1,W

      MOVWF  TimeH1

      BTFSS  STATUS,C

      GOTO  NoCarryH

      MOVLW 1

      ADDWF  TimeH2,W

      MOVWF  TimeH2

      BTFSS  STATUS,C

      GOTO  NoCarryH

      ; Лічильник TIMEH переповнився, востанавлюємо його і починаємо рахувати TIMEL

      MOVF  TimeH0Loaded,W

      MOVWF  TimeH0

      MOVF  TimeH1Loaded,W

      MOVWF  TimeH1

      MOVF  TimeH2Loaded,W

      MOVWF  TimeH2

      BSF  PORTB,7 ; Виведення позитивного фронту імпульсу

      BCF  PORTB,6

; CALL  SetRSData

      NOP

      NOP

      NOP 

NoCarryL  BTFSC   PIR1,RCIF

               CALL   GetRSData

      MOVLW 1

      ADDWF  TimeL0,W

      MOVWF  TimeL0

      BTFSS  STATUS,C

      GOTO  NoCarryL

      MOVLW 1

      ADDWF  TimeL1,W

      MOVWF  TimeL1

      BTFSS  STATUS,C

      GOTO  NoCarryL

      MOVLW 1

      ADDWF  TimeL2,W

      MOVWF  TimeL2

      BTFSS  STATUS,C

      GOTO  NoCarryL

      MOVF  TimeL0Loaded,W

      MOVWF  TimeL0

      MOVF  TimeL1Loaded,W

      MOVWF  TimeL1

      MOVF  TimeL2Loaded,W

      MOVWF  TimeL2

      BCF  PORTB,7 ; Виведення негативного фронту імпульсу

      BSF  PORTB,6

; CALL  SetRSData

      ; Якщо кількість  імпульсів менше константи, рахуємо їх

      BTFSS  Cnt2,7

      GOTO  NoCarryH

NoCarryCnt  BTFSC   PIR1,RCIF

                CALL   GetRSData

      MOVLW 1

      ADDWF  Cnt0,W

      MOVWF  Cnt0

      BTFSS  STATUS,C

      GOTO  NoCarryH

      MOVLW 1

      ADDWF  Cnt1,W

      MOVWF  Cnt1

      BTFSS  STATUS,C

      GOTO  NoCarryH

      MOVLW 1

      ADDWF  Cnt2,W

      MOVWF  Cnt2

      BTFSS  STATUS,C

      GOTO  NoCarryH

      MOVLW  0xFF

      MOVWF  Cnt0

      MOVWF  Cnt1

      MOVWF  Cnt2

      GOTO  NoCarryCnt 

GetRSData

                BCF    PIR1,RCIF ; Прийом і запис в пам'ять байта

                MOVF   RCREG,W

      MOVWF  INDF

;                MOVWF  TXREG 

      MOVLW 0x20 ; Перевірка приходу стартовго байта

      SUBWF  StartByte,W

      BTFSS  STATUS,Z

      RETURN  

      INCF  FSR,F ; Збільшення адреси з

      MOVF  FSR,W ; перевіркою на переповнювання

      SUBLW  0x2A

      BTFSS  STATUS,Z

      RETURN

      MOVLW 0x20

      MOVWF  FSR

      GOTO  NoCarryH 

;SetRSData

;                BTFSS  PIR1,TXIF       ;очикування закінчення передачі

;                RETURN

; MOVF  PORTB,W

;                MOVWF   TXREG

;                BCF     PIR1,TXIF

;                RETURN 

            END 
 

 

       Висновки

     В процесі розробки курсового проекту, був розроблений генератор на мікроконтролері PIC16F4A і AD9850, були проведені всі етапи курсового проектування пристроїв, розроблена структурна принципова схема, чимала увага приділена вибору елементної бази та розробці програми, алгоритму управління пристроєм.

Информация о работе Розробка програми управління