Для демонстрации внутрисхемного программирования и отладки микроконтроллера соберём простую схему. Задача данного прибора будет сводится к миганию светодиода.
Данный прибор может быть собран на демонстрационной (отладочной) плате фирмы Microchip PICDEM 2 PLUS. Схему демонстрационной платы PICDEM 2 PLUS и техническую спецификацию программируемого микроконтроллера можно найти на сайте http://www.microchip.com/.Источник питания схемы должен давать напряжение 9-15В и ток не менее 0,5А. Стоит отметить, что конденсаторами C1 и C2 можно пренебречь, они обеспечивают стабильность работы кварцевого резонатора ZQ1.
Показана рабочая область MPLAB IDE v8.15.
В меню выбираем Configure -> Select Device…
Выбрав программируемый микроконтроллер PIC16F873A, нажимаем «OK».
В меню выбираем Project -> Project Wizard…
Нажимаем «Далее».
Подтверждаем выбранный микроконтроллер нажатием «Далее».
Выбрав компилятор, нажимаем «Далее».
Нажав «Browse…» выбираем папку и имя фала.
Указываем имя файла «LED» в папке«LED» и нажимаем «Сохранить».
Нажимаем «Далее».
Выбираем путь к файлу, где будет написан код программы (листинг)
C:Program FilesMicrochipMPASM SuiteTemplateCode16F873ATEMP.ASM
Нажимаем «Add>>», затем выбираем «С».
Нажимаем «Далее».
Появилась заключающие окно, нажимаем «Готово».
Файлы в созданном проекте «LED» указаны в окне (сверху справа)LED.mcw
Нажимаем на надпись «16F873ATEMP.ASM».
Открылся файл 16F873ATEMP.ASM, где будет написан код программы на ассемблере.
Изображен алгоритм. Время паузы должно быть достаточным для человека способного различить мигание светодиода.
;********************************************************************** ; This file is a basic code template for assembly code generation * ; on the PIC16F873A. This file contains the basic code * ; building blocks to build upon. * ; * ; Refer to the MPASM User's Guide for additional information on * ; features of the assembler (Document DS33014). * ; * ; Refer to the respective PIC data sheet for additional * ; information on the instruction set. * ; * ;********************************************************************** ; * ; Filename: xxx.asm * ; Date: * ; File Version: * ; * ; Author: * ; Company: * ; * ;********************************************************************** ; * ; Files Required: P16F873A.INC * ; * ;********************************************************************** ; * ; Notes: * ; * ;********************************************************************** list p=16f873A ; list directive to define processor #include ; processor specific variable definitions __CONFIG _CP_OFF & _WDT_OFF & _BODEN_OFF & _PWRTE_ON & _HS_OSC & _WRT_OFF & _LVP_ON & _CPD_OFF ; '__CONFIG' directive is used to embed configuration data within .asm file. ; The lables following the directive are located in the respective .inc file. ; See respective data sheet for additional information on configuration word. ;***** VARIABLE DEFINITIONS w_temp EQU 0x20 ; variable used for context saving w_temp1 EQU 0xA0 ; reserve bank1 equivalent of w_temp status_temp EQU 0x21 ; variable used for context saving pclath_temp EQU 0x22 ; variable used for context saving PAUSE1 equ 0x23 PAUSE2 equ 0x24 PAUSE3 equ 0x25 ;********************************************************************** ORG 0x000 ; processor reset vector nop ; nop required for icd goto main ; go to beginning of program ORG 0x004 ; interrupt vector location movwf w_temp ; save off current W register contents movf STATUS,w ; move status register into W register bcf STATUS,RP0 ; ensure file register bank set to 0 movwf status_temp ; save off contents of STATUS register movf PCLATH,w ; move pclath register into w register movwf pclath_temp ; save off contents of PCLATH register ; isr code can go here or be located as a call subroutine elsewhere bcf STATUS,RP0 ; ensure file register bank set to 0 movf pclath_temp,w ; retrieve copy of PCLATH register movwf PCLATH ; restore pre-isr PCLATH register contents movf status_temp,w ; retrieve copy of STATUS register movwf STATUS ; restore pre-isr STATUS register contents swapf w_temp,f swapf w_temp,w ; restore pre-isr W register contents retfie ; return from interrupt ;********************************************************************** main call Ports_Initialization Cycle bsf PORTB,0 call Pause bcf PORTB,0 call Pause goto Cycle ;********************************************************************** ;************************ Ports Initialization ************************ ;********************************************************************** Ports_Initialization clrf PORTA clrf PORTB clrf PORTC clrf CCP1CON bsf STATUS,RP0 bcf STATUS,RP1 movlw 0x06 movwf ADCON1 movlw 0x00 movwf TRISA movlw 0x00 movwf TRISB movlw 0x00 movwf TRISC bcf STATUS,RP0 return ;********************************************************************** ;******************************* Pause ******************************** ;********************************************************************** Pause clrf PAUSE1 clrf PAUSE2 movlw 0x04 movwf PAUSE3 Pause_1 decfsz PAUSE1,f goto Pause_1 decfsz PAUSE2,f goto Pause_1 decfsz PAUSE3,f goto Pause_1 return ;********************************************************************** END ; directive 'end of program'
Вот листинг, который должен быть в файле 16F873ATEMP.ASM.
В конфигурации микроконтроллера указываем _HS_OSC, так как внешний кварцевый резонатор будет с рабочей частотой 20 МГц. Присваиваем статической ОЗУ (SRAM) новые регистры PAUSE1 – PAUSE3.
В меню выбираем View-> File Registers, где отображается вся статическая ОЗУ (SRAM) микроконтроллера.
Для внутрисхемной отладки в меню нужно выбрать Debugger -> Select Tool -> 1 MPLAB ICD 2.
Собрав схему на демонстрационной плате и подключив к ней питание и внутрисхемный отладчик, нажмём «Reset and Connect to ICD», если устройство готово к работе нажимаем «Program target device» и запускаем отладку нажав «Run».
Структурная связь всех используемых компонентов для внутрисхемной отладки и программирования.
Показано подключение отладочной платы PICDEM 2 PLUS с микроконтроллером PIC16F873A к источнику питания и внутрисхемному отладчику MPLAB ICD 2. Во время отладки мигает светодиод, подключенный к выводу микроконтроллера RB0.
Для самостоятельной работы, микроконтроллер нужно запрограммировать. Для этого выбираем в меню Programmer -> Select Programmer -> MPLAB ICD 2. Затем «Reset and Connect to ICD», если устройство готово к работе нажимаем «Program target device», проверяем нажатием «Verify target device memory».
Теперь микроконтроллер самостоятельно выполняет запрограммированные в него инструкции. Внутрисхемный отладчик MPLAB ICD 2 отключен.
Прикрепленные файлы:
- PIC_debug.rar (13 Кб)