Для демонстрации внутрисхемного программирования и отладки микроконтроллера соберём простую схему. Задача данного прибора будет сводится к миганию светодиода.
Данный прибор может быть собран на демонстрационной (отладочной) плате фирмы 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 Кб)