Разблокировка Билайн Таб 2
Разблокировка Билайн Таб 2


1000 рублей PSN PlayStation Network
1000 рублей PSN PlayStation Network


Разблокировка Alcatel Idol 2S
Разблокировка Alcatel Idol 2S


В начало

Лабораторная  работа

Генерация прямоугольных сигналов  на 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.