Чт окт 19, 2017 22:39:11
Вс окт 22, 2017 16:22:15
Пн окт 23, 2017 16:38:15
Пн окт 23, 2017 16:47:59
Пн окт 23, 2017 16:56:46
; контроллер - PIC16F628A
#include "p16f628a.inc"
__CONFIG _FOSC_INTOSCIO & _WDTE_OFF & _PWRTE_OFF & _MCLRE_OFF & _BOREN_OFF & _LVP_OFF & _CPD_OFF & _CP_OFF ; конфигурация контроллера
; объявление регистров
Reg_3 equ h'0023'
DATA_OUT equ h'0010'
DATA_IN equ h'0020'
ERR equ h'0021'
COUNT equ h'0022'
Reg_1 equ h'0011'
Reg_2 equ h'0012'
org 0000h
goto START ; вектор сброса
org 0004h
retfie ; вектор прерывания
;основная программа инициализации контроллера
START
clrw ; сброс W
bcf STATUS,RP0
bcf STATUS,RP1 ; переход в банк 0
movwf INTCON ; запрет всех прерываний
movwf PIR1; сброс всех флагов прерываний
bsf STATUS,RP0 ; переход в банк 1
movwf PIE1 ; запрет прерываний от периферии
bcf STATUS,RP0 ; переход в банк 0
; отключение неиспользуемых модулей
movlw 07h
movwf CMCON ; отключение модуля компараторов
clrf T2CON ; отключение таймера 2
clrf CCP1CON ; отключение ШИМ
bsf STATUS,RP0 ; банк 1
clrf VRCON ; отключение источника опорного напряжения
bcf OPTION_REG,T0CS ;обнуляем бит T0CS, что соответствует тактированию TMR0 от внутреннего сигнала
bcf STATUS,RP0 ;0-й банк
clrf T1CON; отключение таймера 1
; настройка модуля USART
bsf STATUS,RP0 ; банк 1
movlw b'11111110' ;
movwf TRISB
movlw b'00011001'
movwf SPBRG ; 24. скорость обмена - 10400
movlw b'10000111'
movwf TXSTA ; внутреннее тактирование, 8 разрядная передача, !передача разрешена, асинхронный режим, высокоскоростной режим
bcf STATUS,RP0 ; банк 0
movlw b'11111111'
movwf PORTB
movlw b'10111000'
movwf RCSTA ; USART вкл, 8 разрядный прием, прием запрещен
bsf STATUS,RP0 ; банк 1
bsf OPTION_REG,NOT_RBPU ; вкл. подтяжку
bsf TXSTA,TXEN ; вкл. передачи
bcf STATUS,RP0 ; банк 0
; основной цикл
MAIN
call DELAY
;подпрограмма отправки запроса
movlw b'00000010' ;
movwf DATA_OUT ;
call DELAY
call TRANSFER ; передача 0x82
call DELAY
call RECIEVE
goto MAIN
; подпрограмма приема запроса
RECIEVE
clrf COUNT
clrf ERR ; обнуление признака ошибки
btfss PIR1,RCIF ; пришел ли символ?
goto RECIEVE ; если нет то повторная проверка
btfss RCSTA,FERR ; была ли ошибка кадрирования?
goto CHECK_OERR ; если нет, то проверка переполнения
movlw -1 ; иначе фиксирование ошибки
CHECK_OERR
btfss RCSTA,OERR ; было ли переполнение?
goto EXIT ; если нет, то завершение обработки ошибок
decf ERR,f ; иначе фиксация ошибки
decf ERR,f
bcf RCSTA,CREN
bsf RCSTA,CREN ; и сброс логики приемника
EXIT
movf RCREG,w
movwf DATA_IN
IN
bcf STATUS,Z ; проверка 82
movlw b'00000010'
subwf DATA_IN, w
btfss STATUS,Z
bsf PORTB,RB0
btfss STATUS,Z
return
call DELAY_2
bcf PORTB,RB0
return
DELAY
; Задержка 100 000 машинных циклов
; Длительность задержки 100 миллисекунд
; Частота задающего генератора 4 МГц
movlw .221
movwf Reg_1
movlw .130
movwf Reg_2
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
nop
nop
return
; подпрограмма передачи данных по USART
TRANSFER
btfss PIR1,TXIF ; пуст ли буфер передатчика?
goto TRANSFER ; если нет, то повторная проверка
call DELAY
movf DATA_OUT,w ; иначе считывание значения и копирование в буфер передатчика
movwf TXREG
return
DELAY_2
; Задержка 10 000 000 машинных циклов
; Длительность задержки 10 секунд
; Частота задающего генератора 4 МГц
movlw .223
movwf Reg_1
movlw .187
movwf Reg_2
movlw .51
movwf Reg_3
decfsz Reg_1,F
goto $-1
decfsz Reg_2,F
goto $-3
decfsz Reg_3,F
goto $-5
nop
nop
return
end
Ср окт 25, 2017 21:23:01
Ср ноя 01, 2017 21:11:20
Ср ноя 01, 2017 22:53:48
Чт ноя 02, 2017 08:03:20
cblock 0x20
name_1, ; name_1 будет иметь адрес 20
name_2, ; name_2 будет иметь адрес 21
name_3 ; name_3 будет иметь адрес 22
endc
Пт ноя 03, 2017 13:46:49
Пн ноя 06, 2017 14:29:16
Пт ноя 10, 2017 18:23:44
Чт май 05, 2022 16:08:41
Чт май 05, 2022 16:18:33
Чт май 05, 2022 17:33:04