Ср дек 05, 2012 20:19:32
FreshMan писал(а):но ведь таймер не юзает всякие сишные файлы, он не использует функции типа старт, стоп....., мы его рас сконфигурировали и он ПАШЕТApparatchik писал(а): но таймер не перестает быть аппаратным!
Ср дек 05, 2012 20:21:20
Сб дек 08, 2012 23:41:12
Вт мар 13, 2018 13:15:46
;=========================
; Частота генератора - 4 МГц, внутренний RC
;==============
; DEFINITIONS
;==============
#include p18f2320.inc ; Include register definition file
;----------
; Конфигурирование.
;----------
CONFIG MCLRE = ON ; MCLR pin enabled, RE3 input pin disabled
;CONFIG DEBUG = OFF ; Disabled
CONFIG WDT = OFF ; WDT disabled (control is placed on the SWDTEN bit)
CONFIG PBAD = DIG ; PORTB<4:0> pins are configured as digital I/O on Reset
CONFIG LVP=OFF ; Single-Supply ICSP disabled
CONFIG BOR = ON ; Brown-out Reset enabled
CONFIG BORV = 27 ; VBOR set to 2.7V
CONFIG PWRT = ON ; PWRT enabled
CONFIG OSC = INTIO1 ; Internal oscillator block, CLKO function on RA6, port function on RA7
CONFIG FSCM = OFF ; Fail-Safe Clock Monitor disabled
.......
;=========================
; CODE SEGMENT
;=========================
;----------
; инициализация процессора
;----------
Start
clrf PORTA
MOVLW b'00001111' ;
MOVWF ADCON1 ; Порт А - цифровой
movlw b'00100000' ; RA5 - на ввод, остальные на вывод
movwf TRISA ;
movlw b'00000001' ; RB7-RB1 - на вывод, RB0 - на ввод
movwf TRISB
clrf PORTC
movlw b'11011101' ; RC5 RC1 - на вывод, остальные - ввод
movwf TRISC
bcf INTCON2,7 ; Включение подтягивающих резисторов порта В.
bsf INTCON, INT0IE ; Прерывание от INT0 (RB0)
bsf INTCON2, INTEDG0 ; по нарастанию
bsf INTCON, GIEL ; Прерывание от периферии
bsf OSCCON, 6 ; Переключение на работу
bsf OSCCON, 5 ; на частоте 4 МГц
;bsf OSCCON, 4
;bsf OSCTUNE, 1 ; С помощью осццилографа или частотометра подстроить
bsf OSCTUNE, 0 ; частоту на RA6 до значения 1 МГц.
bsf OSCTUNE, 2
;---------- ШИМ-------------------------------------------------
movlw .82 ; Период ШИМ 328 мкс (3045 Гц)
movwf PR2
movlw .41 ; Рабочий цикл ШИМ 50% (164 мкс = 0010100100
movwf CCPR2L ; 00101001 = 41 в CCPR2L
bcf CCP2CON, 4 ; 00 - в битах 4, 5 CCP2CON
bcf CCP2CON, 5
movlw b'00000101' ; Запускаем TMR2
movwf T2CON
bsf CCP2CON, 2 ; Запускаем модуль CCP2 для формирования
bsf CCP2CON, 3 ; частоты 3045 Гц для питания нити накала индикатора
;----------
; ИНИЦИАЛИЗАЦИЯ интерфейса І2С
;----------
clrf SSPSTAT
bsf SSPSTAT,SMP ; Управление длительностью фронта выключено,
; т.к. выбрана стандартная скорость(100 Кгц.).\
movlw .9 ; Установка стандартной скорости обмена:
movwf SSPADD ; Fosc/{4*(SSPAdd+1)}=4МГц/40=100Кгц.
movlw b'00101000' ; Включение модуля MSSP (SSPEN=1),
movwf SSPCON1 ; в режиме I2C-ведущего (SSPM3..SSPM0=1000).
clrf SSPCON2 ; Clear control bits
bcf PIR1,SSPIF ; Clear SSP interrupt flag
bcf PIR2,BCLIF ; Clear Bit Collision flag
;=========
; ИНИЦИАЛИЗАЦИЯ DS1307
;=========
call START ; Начало формирования условия "START".
movlw b'11010000' ; Передача режимного байта:
call WR_I2C ; 1101000 - адрес DS1307, 0 - режим записи.
movlw 0x07 ; адрес управляющего регистра
call WR_I2C
movlw b'00010011' ; включаем выход частоты 32768 Гц на SOUT
call WR_I2C
call STOP ; Начало формирования условия "STOP".
call START ; Начало формирования условия "START".
movlw b'11010000' ; Передача режимного байта:
call WR_I2C ; 1101000 - адрес DS1307, 0 - режим записи.
movlw 0x00 ; адрес регистра секунд
call WR_I2C
movlw 0x00 ; пуск часов
call WR_I2C
call STOP ; Начало формирования условия "STOP".
; Где-то здесь зацикливается, потому что весь дальнейшей код не исполняется....
......
;----------
; БЛОК ПОДПРОГРАММ
;----------
;=========================
; ПП передачи байта по I2C и анализа отклика ведомого.
;=========================
WR_I2C
bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP.
movwf SSPBUF ; Загрузка буфера байтом любой функциональности
; (начало передачи текущего байта).
Zhd1 btfss PIR1,SSPIF ; Передача текущего байта завершена или нет?
bra Zhd1 ; Если нет, то ожидание.
; Если завершено, то программа исполняется далее.
; Анализ отклика ведомого.
btfsc SSPCON2,ACKSTAT; Подтверждение от ведомого (ACK)принято или нет?
bra WR_I2C ; Если нет, то повтор передачи текущего байта.
; Если есть, то возврат по стеку.
return
;=========================
; ПП формирования условия "START" I2C.
;=========================
START
bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP.
bsf SSPCON2,SEN ; Начало формирования условия "START".
Zhd2 btfss PIR1,SSPIF ; Формирование условия "START" завершено?
bra Zhd2 ; Если нет, то ожидание.
; Если завершено, то программа исполняется далее.
return ; Возврат по стеку.
;=========================
; ПП формирования условия "RESTART" I2C.
;=========================
RESTART bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP.
bsf SSPCON2,RSEN ; Начало формирования условия "RESTART".
Y2 btfss PIR1,SSPIF ; Формирование условия "RESTART" завершено?
bra Y2 ; Если нет, то ожидание.
; Если завершено, то программа исполняется далее.
return ; Возврат по стеку.
;=========================
; ПП формирования условия "STOP" I2C.
;=========================
STOP bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP.
bsf SSPCON2,PEN ; Начало формирования условия "STOP".
Zhd3 btfss PIR1,SSPIF ; Формирование условия "STOP" завершено?
bra Zhd3 ; Если нет, то ожидание.
; Если завершено, то программа исполняется далее.
return ; Возврат по стеку.
;=========================
; ПП приема байта по I2C.
;=========================
RD2_I2C
bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP.
bsf SSPCON2,RCEN ; Разрешение приема текущего байта от BMP180.
bs1 btfss PIR1,SSPIF ; Прием текущего байта завершен или нет?
bra bs1 ; Если нет, то ожидание.
; Если завершен, то принятый байт аппаратно копируется в SSPBuf
; и программа исполняется далее.
movf SSPBUF, w ; Копирование принятого байта из SSPBuf в BytTemp.
movwf BytTemp
;----------
; Формирование отклика ведущего.
;----------
bcf PIR1,SSPIF ; Сброс флага перерываний от модуля MSSP.
bsf SSPCON2,ACKEN ; Формирование подтверждения (АСК) принятого байта.
bs2 btfss PIR1,SSPIF ; 9-й импульс закончился или нет?
bra bs2 ; Если нет, то ожидание.
; Если закончился, то программа исполняется далее.
return
Вс мар 18, 2018 06:37:48
Вс мар 18, 2018 12:51:04