МК

Генерация прямоугольных сигналов на pic16f62x (Лабораторная работа)

 

Задание

На выводе RB0 необходимо сформировать меандр с f=100 Hz, а на RB1–RB3 трехфазную последовательность с f=50 Hz. Тактовая частота f=8 MHz.

 

Рис. 1. Краткие теоретические сведения

 

PIC16F62X имеет два порта ввода/вывода, PORTA и PORTB. Некоторые каналы портов мультиплицированы с периферийными модулями микроконтроллера. Когда периферийный модуль включен, вывод не может использоваться как универсальный канал ввода/вывода.

Регистры PORTA и TRISA

PORTA – 8-разрядный порт ввода вывода. RA4 имеет триггер Шмидта на входе и открытый сток на выходе, мультиплицирован с тактовым входом T0CKI. RA5 имеет триггер Шмидта на входе, без выходного буфера. Все остальные каналы PORTA имеют триггер Шмидта на входе и полнофункциональные выходные КМОП буферы. Все каналы PORTA имеют соответствующие биты направления в регистре TRISA, позволяющие настраивать канал как вход или выход.

Запись ‘1’ в TRISA переводит соответствующий выходной буфер 3-е состояние. Запись ‘0’ в регистр TRISA определяет соответствующий канал как выход, содержимое защелки PORTA передается на вывод микроконтроллера.

Чтение регистра PORTA возвращает состояние на выводах порта, а запись производится в защелку PORTA. Все операции записи в порт выполняются по принципу «чтение – модификация - запись», т.е. сначала производится чтение

состояния выводов порта, затем изменение и запись в защелку.

Каналы PORTA мультиплицированы с модулем компараторов и источником опорного напряжения. Настройка работы этих периферийных модулей определяется битами в регистрах CMCON (управляющий регистр компаратора) и

VRCON (управляющий регистр источника опорного напряжения). Когда компаратор включен, чтение состояние выводов PORTA будет давать

результат ‘00’.

Листинг 1. Код программы

list p=16f627 ; list directive to define processor

 #include P16f627.inc

 errorlevel -302

 cblock 20

temp

w_temp

status_temp

STATE_NUMBER

 endc

 org 0x00

 goto main

 org 0x04

 goto services

main

;настройка системы прерываний

 banksel PIE1

 bsf PIE1, TMR1IE

 banksel PIR1

 bcf PIR1, TMR1IF

 bsf INTCON, PEIE

 bsf INTCON, GIE

;настройка PORTB

 banksel TRISB

 movlw b'00000000'

 movwf TRISB

 movlw b'11100000'

 movwf INTCON

;настраиваем таймер1

 banksel T2CON

 movlw b'01111111'

 movwf T2CON

 banksel PR2

 movlw .39

 movwf PR2

services

 movwf w_temp ; save off current W register contents

 movf STATUS,w ; move status register into W register

 movwf status_temp ; save off contents of STATUS register

 banksel PIR1

 btfss PIR1, TMR2IF

 goto services_end

services_tmr2 ;тут 200 гц

 bcf PIR1, TMR2IF

 

;нулевой импульс

 movlw .0

 subwf STATE_NUMBER,w

 btfss STATUS,Z

 goto count_0

 movlw b'00000010'

 goto the_end

count_0

 

;первый импульс

 movlw .1

 subwf STATE_NUMBER,w

 btfss STATUS,Z

 goto count_1

 movlw b'00000011'

 goto the_end

count_1

 

;второй импульс

 movlw .2

 subwf STATE_NUMBER,w

 btfss STATUS,Z

 goto count_2

 movlw b'00000100'

 goto the_end

count_2

 

;третий импульс

 movlw .3

 subwf STATE_NUMBER,w

 btfss STATUS,Z

 goto count_3

 movlw b'00000101'

 goto the_end

count_3

 

;четвертый импульс

 movlw .4

 subwf STATE_NUMBER,w

 btfss STATUS,Z

 goto count_4

 movlw b'00001000'

 goto the_end

count_4

 

;пятый импульс

 movlw .5

 subwf STATE_NUMBER,w

 btfss STATUS,Z

 goto count_5

 movlw b'00001001'

 goto the_end

count_5

movwf PORTB

the_end

 incf STATE_NUMBER,f

 movlw .5

 subwf STATE_NUMBER,w

 btfsc STATUS,Z

 goto services_end

 movlw .5

 movwf STATE_NUMBER

goto services_end

 

services_end

 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

 retfie

 end

 

Выводы по работе

В данной лабораторной работе были сгенерированы 4 прямоугольных сигнала на выводах PORTB, основная часть программы написана в прерывании по таймеру с частотой f = 200 Hz.