T
t2imoor
Guest
Код:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; ОБЗОР ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
, Заключительный требуемых изменений: Разкомментируйте LVDEN
: Обзор КОММЕНТИРОВАННЫЕ ЧАСТЕЙ
; RB0: генерирует прерывание ДРУГОЙ MCU
, Программа связывается с VIA EEPROM I2C;;;;;;; Директивы ассемблера ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;LIST P = PIC18F452, F = INHX32, С = 160, N = 0, ST = OFF, MM = OFF, R = DEC, X = ON
# INCLUDE P18F452.INC
; __CONFIG _CONFIG1H, _HS_OSC_1H; HS OSCILLATOR
__CONFIG _CONFIG1H, _XT_OSC_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_42_2L; RESET
__CONFIG _CONFIG2H, _WDT_OFF_2H; Сторожевой таймер ИНВАЛИДОВ
__CONFIG _CONFIG3H, _CCP2MX_ON_3H; CCP2 К RC1 (а не на RB3)
__CONFIG _CONFIG4L, _LVP_OFF_4L; RB5 включена для ввода / вывода;;;;;;; ПЕРЕМЕННЫЕ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;CBLOCK 0x000, начало ДОСТУПА ОЗУ
TEMP
SENREG
HIREG
LOREG
RECREG
CONREG
ENDC;;;;;;; Макроопределений ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;MOVLF MACRO DEST, буквальный
MOVLW БУКВАЛЬНОЙ
MOVWF DEST
ENDM
SETWATCH MACRO
; Сторожевой таймер ENABLE
BSF WDTCON, SWDTEN
ENDM
CLRWATCH MACRO
КБК WDTCON, SWDTEN
ENDM
; Отправить по I2C
I2CSEND MACRO data1, ADDRESSH, ADDRESSL
CALL GENSTART; GENERATE СНВ СОСТОЯНИЕ
MOVLF CONREG, H'A0 '
CALL CALLEEPROM, Адрес EEPROM
MOVLF HIREG, ADDRESSH; старший байт адреса
MOVLF LOREG, ADDRESSL, добавить LOW
CALL SENDADDR
MOVLF TEMP, DATA1; ДАННЫХ
CALL SendData
CALL GENSTOP
ENDM;;;;;;; ВЕКТОРЫ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;ORG 0x0000; RESET VECTOR
NOP
GOTO СНВORG 0x0008; Приоритетные вектор прерывания
CLRWDT
CLRWATCH
GOTO HPINTORG 0X0018; низкий приоритет вектор прерывания
GOTO $; TRAP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; Основной код ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ИНИЦИАЛИЗАЦИИ
ORG H'30 '
НАЧАЛО CLRF TRISB
CLRF PORTB
CLRF TRISD
CLRF TMR1L
CLRF TMR1H
BSF TRISA, 0; аналоговый вход CHANNEL
; Прерываний
MOVLF INTCON, B'11000000 '
; Timer1 SETTINGS - timer1 ПРИЧИНЫ / D UPDATE
BSF PIE1, TMR1IE; ENABLE timer1 ПРЕРВАТЬ
BSF IPR1, TMR1IP
; ЧФ T1CON, TMR1ON
; ADC НАСТРОЙКИ
MOVLF ADCON0, B'00000000 '
MOVLF ADCON1, B'01000001 '
CLRF ADRESH
CLRF ADRESL
BSF ADCON0, ADON
; I2C SETTINGS - В I2C MODE, SCL и СДА линий
; Манипулируют MSSP аппаратуры, но все же ...
: (
MOVLF SSPSTAT, B'10000000 '; Slew Rate Control ИНВАЛИДОВ
MOVLF SSPCON1, B'00101000 '; MASTER MODE, SSP ENABLED
MOVLF SSPCON2, B'01100000 '; ACKSTAT, ACKDT SET
MOVLF SSPADD, H'13 '; 50 КГц BAUD ТАРИФ
; Timer0 ИНИЦИАЛИЗАЦИИ
MOVLF T0CON, B'11000101 '; НИЗКОВОЛЬТНЫЕ DETECT МОДУЛЬ (LVD) конфигурации
MOVLF LVDCON, B'00001101 '; 4,2 - 4,45 V IS уровня переключения
КБК PIE2, LVDIE
; ЧФ LVDCON, LVDEN
LVDENPOLL BTFSS LVDCON, 5
; GOTO LVDENPOLL
КБК PIR2, LVDIF
BSF IPR2, LVDIP
BSF PIE2, LVDIE; ШАГИ ПРИДЕРЖИВАТЬСЯ AS данных ЛИСТ
, Все мои ответы он направит вас
; В технических спецификациях ...;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;; Фактический код НАЧИНАЕТСЯ ЗДЕСЬ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRWDT
; SETWATCH
LOOP; СНА
; CLRWDT
I2CSEND H'AB ', H'01', H'00 '
Ожидание
I2CSEND H'15 ', H'00', H'00 '
Ожидание
Ожидание
CALL GETI2C
MOVWF PORTDGOTO $
;;;;;;;;;;; Подпрограмм ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
; I2C подпрограмм
SENI2C CALL GENSTART
MOVLF CONREG, H'A0 '
CALL CALLEEPROM
CALL SENDADDR
CALL SendData
CALL GENSTOP
ожидание вызова
ВОЗВРАЩЕНИЕ
WAITFORACK BTFSC SSPCON2, ACKSTAT
GOTO WAITFORACK
BSF SSPCON2, ACKSTAT
ВОЗВРАЩЕНИЕ
GETI2C CALL GENSTART
MOVLF CONREG, H'A0 '
CALL CALLEEPROM
CALL SENDADDR
CALL GENSTOP
Ожидание
Ожидание
CALL GENSTART
MOVLF CONREG, H'A1 '
CALL CALLEEPROM
BSF SSPCON2, RCEN
вызова POLLBUFF
; BFCHK BTFSS SSPSTAT, Б. Ф.
; GOTO BFCHK
BSF SSPCON2, ACKDT; АСК = 1
BSF SSPCON2, ACKEN, отправьте ACK
; КБК PIR1, SSPIF
; Призыва POLLBUFF
CALL GENSTOP
MOVF SSPBUF, W
ВОЗВРАЩЕНИЕ
; GENERATE СНВ СОСТОЯНИЕ
GENSTART КБК PIR1, SSPIF; CLEAR SSPIF
BSF SSPCON2, ACKSTAT
BSF SSPCON2, SEN; GENERATE СНВ СОСТОЯНИЕ
CALL POLLBUFF; СНВ СОСТОЯНИЕ полностью сформирован
ВОЗВРАЩЕНИЕ
Адресная EEPROM
CALLEEPROM КБК PIR1, SSPIF; A0 A1 и A2 основаны
MOVFF CONREG, SSPBUF
CALL WAITFORACK
CALL POLLBUFF
BSF SSPCON2, ACKSTAT; предполагая, что произошло ACK
ВОЗВРАЩЕНИЕ
; АДРЕСА МЕСТО указывает 'HIREG' LOREG и '
SENDADDR КБК PIR1, SSPIF
MOVFF HIREG, SSPBUF
CALL WAITFORACK
BSF SSPCON2, ACKSTAT
CALL POLLBUFF
BSF SSPCON2, ACKSTAT; предполагая, что произошло ACK
MOVFF LOREG, SSPBUF
CALL WAITFORACK
CALL POLLBUFF
BSF SSPCON2, ACKSTAT
ВОЗВРАЩЕНИЕ
; Записывает данные в 'TEMP' ТО МЕСТО которую указывает 'HIREG' LOREG и '
SendData КБК PIR1, SSPIF
MOVFF TEMP, SSPBUF
CALL WAITFORACK
CALL POLLBUFF
BSF SSPCON2, ACKSTAT
ВОЗВРАЩЕНИЕ
; Генерировать выключенное положение
GENSTOP КБК PIR1, SSPIF
BSF SSPCON2, ПЕН
CALL POLLBUFF
ВОЗВРАЩЕНИЕ; 20 микросекунд DELAY: НЕОБХОДИМЫЕ ДЛЯ АЦП
DEL20U MOVLF TEMP, D'20 '
LOOP_ADCACQ DECF TEMP
BNZ LOOP_ADCACQ
BCF STATUS, Z
ВОЗВРАЩЕНИЕ
; ГОЛОСОВАНИЕ SSPIF
POLLBUFF BTFSS PIR1, SSPIF
GOTO POLLBUFF
КБК PIR1, SSPIF
ВОЗВРАЩЕНИЕGETADC CALL DEL20U
BSF ADCON0, ГО
LOOPGETADC BTFSC ADCON0, ГО
GOTO LOOPGETADC
MOVF ADRESH, 0
ВОЗВРАЩЕНИЕ, Ждут 10МС TWR (ВРЕМЯ требуется написать самостоятельно)
WAIT NOP
MOVLW D'156 '; SET Начальное значение
MOVWF TMR0L; И нагрузки в TIMER
КБК INTCON, T0IF; таймер сброса OUT ФЛАГ
ОРЭ BTFSS INTCON, T0IF, ждут 10МС
GOTO ОРЭ; ДЛЯ TIMEOUT
RETURN; BYTE WRITE СОВЕРШЕНО ....;;;;;;;;;; Подпрограммы обслуживания прерываний ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
Высокая приоритетных прерываний ГОЛОСОВАНИЕ
HPINT BTFSC PIR2, LVDIF
GOTO LVDINT
BTFSC PIR1, TMR1IF
GOTO TMR1INT
SETWATCH
RETFIE
TMR1INT
КБК PIR1, TMR1IF
CALL GETADC
, Сохранять К ROM
MOVWF TEMP
INCF LOREG
CALL SENI2C
Ожидание
GOTO HPINTLVDINT
BTG PORTB, 0
BTG PORTB, 0
GOTO HPINT
КОНЕЦ
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; ОБЗОР ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
, Заключительный требуемых изменений: Разкомментируйте LVDEN
: Обзор КОММЕНТИРОВАННЫЕ ЧАСТЕЙ
; RB0: генерирует прерывание ДРУГОЙ MCU
, Программа связывается с VIA EEPROM I2C;;;;;;; Директивы ассемблера ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;LIST P = PIC18F452, F = INHX32, С = 160, N = 0, ST = OFF, MM = OFF, R = DEC, X = ON
# INCLUDE P18F452.INC
; __CONFIG _CONFIG1H, _HS_OSC_1H; HS OSCILLATOR
__CONFIG _CONFIG1H, _XT_OSC_1H
__CONFIG _CONFIG2L, _PWRT_ON_2L & _BOR_ON_2L & _BORV_42_2L; RESET
__CONFIG _CONFIG2H, _WDT_OFF_2H; Сторожевой таймер ИНВАЛИДОВ
__CONFIG _CONFIG3H, _CCP2MX_ON_3H; CCP2 К RC1 (а не на RB3)
__CONFIG _CONFIG4L, _LVP_OFF_4L; RB5 включена для ввода / вывода;;;;;;; ПЕРЕМЕННЫЕ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;CBLOCK 0x000, начало ДОСТУПА ОЗУ
TEMP
SENREG
HIREG
LOREG
RECREG
CONREG
ENDC;;;;;;; Макроопределений ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;MOVLF MACRO DEST, буквальный
MOVLW БУКВАЛЬНОЙ
MOVWF DEST
ENDM
SETWATCH MACRO
; Сторожевой таймер ENABLE
BSF WDTCON, SWDTEN
ENDM
CLRWATCH MACRO
КБК WDTCON, SWDTEN
ENDM
; Отправить по I2C
I2CSEND MACRO data1, ADDRESSH, ADDRESSL
CALL GENSTART; GENERATE СНВ СОСТОЯНИЕ
MOVLF CONREG, H'A0 '
CALL CALLEEPROM, Адрес EEPROM
MOVLF HIREG, ADDRESSH; старший байт адреса
MOVLF LOREG, ADDRESSL, добавить LOW
CALL SENDADDR
MOVLF TEMP, DATA1; ДАННЫХ
CALL SendData
CALL GENSTOP
ENDM;;;;;;; ВЕКТОРЫ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;ORG 0x0000; RESET VECTOR
NOP
GOTO СНВORG 0x0008; Приоритетные вектор прерывания
CLRWDT
CLRWATCH
GOTO HPINTORG 0X0018; низкий приоритет вектор прерывания
GOTO $; TRAP;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; Основной код ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; ИНИЦИАЛИЗАЦИИ
ORG H'30 '
НАЧАЛО CLRF TRISB
CLRF PORTB
CLRF TRISD
CLRF TMR1L
CLRF TMR1H
BSF TRISA, 0; аналоговый вход CHANNEL
; Прерываний
MOVLF INTCON, B'11000000 '
; Timer1 SETTINGS - timer1 ПРИЧИНЫ / D UPDATE
BSF PIE1, TMR1IE; ENABLE timer1 ПРЕРВАТЬ
BSF IPR1, TMR1IP
; ЧФ T1CON, TMR1ON
; ADC НАСТРОЙКИ
MOVLF ADCON0, B'00000000 '
MOVLF ADCON1, B'01000001 '
CLRF ADRESH
CLRF ADRESL
BSF ADCON0, ADON
; I2C SETTINGS - В I2C MODE, SCL и СДА линий
; Манипулируют MSSP аппаратуры, но все же ...
: (
MOVLF SSPSTAT, B'10000000 '; Slew Rate Control ИНВАЛИДОВ
MOVLF SSPCON1, B'00101000 '; MASTER MODE, SSP ENABLED
MOVLF SSPCON2, B'01100000 '; ACKSTAT, ACKDT SET
MOVLF SSPADD, H'13 '; 50 КГц BAUD ТАРИФ
; Timer0 ИНИЦИАЛИЗАЦИИ
MOVLF T0CON, B'11000101 '; НИЗКОВОЛЬТНЫЕ DETECT МОДУЛЬ (LVD) конфигурации
MOVLF LVDCON, B'00001101 '; 4,2 - 4,45 V IS уровня переключения
КБК PIE2, LVDIE
; ЧФ LVDCON, LVDEN
LVDENPOLL BTFSS LVDCON, 5
; GOTO LVDENPOLL
КБК PIR2, LVDIF
BSF IPR2, LVDIP
BSF PIE2, LVDIE; ШАГИ ПРИДЕРЖИВАТЬСЯ AS данных ЛИСТ
, Все мои ответы он направит вас
; В технических спецификациях ...;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;; Фактический код НАЧИНАЕТСЯ ЗДЕСЬ ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRWDT
; SETWATCH
LOOP; СНА
; CLRWDT
I2CSEND H'AB ', H'01', H'00 '
Ожидание
I2CSEND H'15 ', H'00', H'00 '
Ожидание
Ожидание
CALL GETI2C
MOVWF PORTDGOTO $
;;;;;;;;;;; Подпрограмм ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
; I2C подпрограмм
SENI2C CALL GENSTART
MOVLF CONREG, H'A0 '
CALL CALLEEPROM
CALL SENDADDR
CALL SendData
CALL GENSTOP
ожидание вызова
ВОЗВРАЩЕНИЕ
WAITFORACK BTFSC SSPCON2, ACKSTAT
GOTO WAITFORACK
BSF SSPCON2, ACKSTAT
ВОЗВРАЩЕНИЕ
GETI2C CALL GENSTART
MOVLF CONREG, H'A0 '
CALL CALLEEPROM
CALL SENDADDR
CALL GENSTOP
Ожидание
Ожидание
CALL GENSTART
MOVLF CONREG, H'A1 '
CALL CALLEEPROM
BSF SSPCON2, RCEN
вызова POLLBUFF
; BFCHK BTFSS SSPSTAT, Б. Ф.
; GOTO BFCHK
BSF SSPCON2, ACKDT; АСК = 1
BSF SSPCON2, ACKEN, отправьте ACK
; КБК PIR1, SSPIF
; Призыва POLLBUFF
CALL GENSTOP
MOVF SSPBUF, W
ВОЗВРАЩЕНИЕ
; GENERATE СНВ СОСТОЯНИЕ
GENSTART КБК PIR1, SSPIF; CLEAR SSPIF
BSF SSPCON2, ACKSTAT
BSF SSPCON2, SEN; GENERATE СНВ СОСТОЯНИЕ
CALL POLLBUFF; СНВ СОСТОЯНИЕ полностью сформирован
ВОЗВРАЩЕНИЕ
Адресная EEPROM
CALLEEPROM КБК PIR1, SSPIF; A0 A1 и A2 основаны
MOVFF CONREG, SSPBUF
CALL WAITFORACK
CALL POLLBUFF
BSF SSPCON2, ACKSTAT; предполагая, что произошло ACK
ВОЗВРАЩЕНИЕ
; АДРЕСА МЕСТО указывает 'HIREG' LOREG и '
SENDADDR КБК PIR1, SSPIF
MOVFF HIREG, SSPBUF
CALL WAITFORACK
BSF SSPCON2, ACKSTAT
CALL POLLBUFF
BSF SSPCON2, ACKSTAT; предполагая, что произошло ACK
MOVFF LOREG, SSPBUF
CALL WAITFORACK
CALL POLLBUFF
BSF SSPCON2, ACKSTAT
ВОЗВРАЩЕНИЕ
; Записывает данные в 'TEMP' ТО МЕСТО которую указывает 'HIREG' LOREG и '
SendData КБК PIR1, SSPIF
MOVFF TEMP, SSPBUF
CALL WAITFORACK
CALL POLLBUFF
BSF SSPCON2, ACKSTAT
ВОЗВРАЩЕНИЕ
; Генерировать выключенное положение
GENSTOP КБК PIR1, SSPIF
BSF SSPCON2, ПЕН
CALL POLLBUFF
ВОЗВРАЩЕНИЕ; 20 микросекунд DELAY: НЕОБХОДИМЫЕ ДЛЯ АЦП
DEL20U MOVLF TEMP, D'20 '
LOOP_ADCACQ DECF TEMP
BNZ LOOP_ADCACQ
BCF STATUS, Z
ВОЗВРАЩЕНИЕ
; ГОЛОСОВАНИЕ SSPIF
POLLBUFF BTFSS PIR1, SSPIF
GOTO POLLBUFF
КБК PIR1, SSPIF
ВОЗВРАЩЕНИЕGETADC CALL DEL20U
BSF ADCON0, ГО
LOOPGETADC BTFSC ADCON0, ГО
GOTO LOOPGETADC
MOVF ADRESH, 0
ВОЗВРАЩЕНИЕ, Ждут 10МС TWR (ВРЕМЯ требуется написать самостоятельно)
WAIT NOP
MOVLW D'156 '; SET Начальное значение
MOVWF TMR0L; И нагрузки в TIMER
КБК INTCON, T0IF; таймер сброса OUT ФЛАГ
ОРЭ BTFSS INTCON, T0IF, ждут 10МС
GOTO ОРЭ; ДЛЯ TIMEOUT
RETURN; BYTE WRITE СОВЕРШЕНО ....;;;;;;;;;; Подпрограммы обслуживания прерываний ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
Высокая приоритетных прерываний ГОЛОСОВАНИЕ
HPINT BTFSC PIR2, LVDIF
GOTO LVDINT
BTFSC PIR1, TMR1IF
GOTO TMR1INT
SETWATCH
RETFIE
TMR1INT
КБК PIR1, TMR1IF
CALL GETADC
, Сохранять К ROM
MOVWF TEMP
INCF LOREG
CALL SENI2C
Ожидание
GOTO HPINTLVDINT
BTG PORTB, 0
BTG PORTB, 0
GOTO HPINT
КОНЕЦ