T
t2imoor
Guest
코드 :
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; 개요 ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
; 파이널을 변경할 필요가 : 주석 LVDEN
; 리뷰 논평 부품
; RB0 : 방해에 다른 MCU를 생성
; EEPROM을 통한 의사 소통 프로그램의 I2C;;;;;;; 어셈블러 지시어 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;리스트 P = PIC18F452로, F = INHX32는 C = 160, N = 0, ST는 = 끄기, MM은 = 끄기, 연구 = 12, 엑스 = 켜기
# 포함 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; 리셋
__CONFIG _CONFIG2H, _WDT_OFF_2H; 워치독 타이머 장애
__CONFIG _CONFIG3H, _CCP2MX_ON_3H; RC1을 CCP2 (내걸 RB3보다)
__CONFIG _CONFIG4L, _LVP_OFF_4L; RB5 난을 활성화 / O를;;;;;;; VARIABLES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;CBLOCK 0X000; 교통의 RAM의 시작
온도
SENREG
HIREG
LOREG
RECREG
CONREG
ENDC;;;;;;; MACRO 정의 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;MACRO MOVLF DEST는, LITERAL
MOVLW LITERAL
DEST는 MOVWF
ENDM
MACRO SETWATCH
; 워치독 타이머 활성화
BSF WDTCON, SWDTEN
ENDM
MACRO CLRWATCH
BCF WDTCON, SWDTEN
ENDM
; 보내 비아의 I2C
I2CSEND MACRO Data1, ADDRESSH, ADDRESSL
외침 GENSTART; 시작 조건 생성
MOVLF CONREG, H'A0 '
외침 CALLEEPROM하며 EEPROM이 소
MOVLF HIREG, ADDRESSH; 주소 하이 바이트
MOVLF LOREG, ADDRESSL; 하한가 ADD가
외침 SENDADDR
MOVLF 온도, Data1, 데이터
외침 SendData
외침 GENSTOP
ENDM;;;;;;; 벡터 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;ORG를이 0x0000; 리셋 벡터
놉
GOTO 스타트ORG를 0x0008; 높은 우선순위 인터럽트 벡터
CLRWDT
CLRWATCH
GOTO HPINTORG를 0X0018; 낮은 우선 순위 인터럽트 벡터
$; TRAP GOTO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; 메인 코드 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 초기화
ORG를 H'30 '
스타트 CLRF TRISB
CLRF PORTB
CLRF TRISD
CLRF TMR1L
CLRF TMR1H
BSF TRISA, 0; 아날로그 입력 채널
; 인터럽트
MOVLF INTCON, B'11000000 '
; TIMER1 설정 - TIMER1 원인은 A / D 업데이트
BSF PIE1, TMR1IE; TIMER1 인터럽트 활성화
BSF IPR1, TMR1IP
; BSF T1CON, TMR1ON
; ADC를 설정
MOVLF ADCON0, B'00000000 '
MOVLF ADCON1, B'01000001 '
CLRF ADRESH
CLRF ADRESL
BSF ADCON0, ADON
;의 I2C 설정의 I2C 모드, SCL과 SDA는 - 라인이있다
; 조작에 의해 MSSP 하드웨어하지만 아직 ...
: (
MOVLF SSPSTAT, B'10000000 '; 슬루율 제어 사용 중지
MOVLF SSPCON1, B'00101000 '; 마스터 모드, SSP를 활성화
MOVLF SSPCON2, B'01100000 '; ACKSTAT, ACKDT의 SET
MOVLF SSPADD, H'13 '; 50kHz 보오드 레이트
; TIMER0 초기화
MOVLF T0CON, B'11000101 '; 저전압 DETECT 모듈 (LVD) 구성
MOVLF LVDCON, B'00001101 '; 4.2 - 4.45 브이는 TRIGGER 수준이다
BCF PIE2, LVDIE
; BSF LVDCON, LVDEN
LVDENPOLL BTFSS LVDCON, 5
; GOTO LVDENPOLL
BCF PIR2, LVDIF
BSF IPR2, LVDIP
BSF PIE2, LVDIE; 단계 데이터 시트은 다음과
; ALL을 참조 당신은 내 대답을하지 않습니다
; 데이터 시트를 ...;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;; 실제 코드는 여기 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BEGINS ;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRWDT
; SETWATCH
루프; 푹
; CLRWDT
I2CSEND H'AB ', H'01', H'00 '
외침 기다
I2CSEND H'15 ', H'00', H'00 '
외침 기다
외침 기다
외침 GETI2C
MOVWF PORTDGOTO $
;;;;;;;;;;; 서브루틴 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
;의 I2C 서브루틴
SENI2C 외침 GENSTART
MOVLF CONREG, H'A0 '
외침 CALLEEPROM
외침 SENDADDR
외침 SendData
외침 GENSTOP
전화를 기다
반환
WAITFORACK BTFSC SSPCON2, ACKSTAT
GOTO WAITFORACK
BSF SSPCON2, ACKSTAT
반환
GETI2C 외침 GENSTART
MOVLF CONREG, H'A0 '
외침 CALLEEPROM
외침 SENDADDR
외침 GENSTOP
외침 기다
외침 기다
외침 GENSTART
MOVLF CONREG, H'A1 '
외침 CALLEEPROM
BSF SSPCON2, RCEN
전화 POLLBUFF
; BFCHK BTFSS SSPSTAT, BF
; GOTO BFCHK
BSF SSPCON2, ACKDT;는 ACK = 1
BSF SSPCON2, ACKEN;는 ACK 보내기
; BCF PIR1, SSPIF
; 외침 POLLBUFF
외침 GENSTOP
MOVF SSPBUF, 승
반환
; 생성 시작 조건
GENSTART BCF PIR1, SSPIF; SSPIF CLEAR를
BSF SSPCON2, ACKSTAT
BSF SSPCON2, 센; 시작 조건 생성
외침 POLLBUFF; 시작 조건 완전히 생성
반환
; EEPROM이 소
CALLEEPROM BCF PIR1, SSPIF; A0 A1과 A2 그러고있을거야
MOVFF CONREG, SSPBUF
외침 WAITFORACK
외침 POLLBUFF
BSF SSPCON2, ACKSTAT; 그는 ACK 가정할 경우가 발생했습니다
반환
; 위치 주소 'HIREG'및 'LOREG'들이대고
SENDADDR BCF PIR1, SSPIF
MOVFF HIREG, SSPBUF
외침 WAITFORACK
BSF SSPCON2, ACKSTAT
외침 POLLBUFF
BSF SSPCON2, ACKSTAT; 그는 ACK 가정할 경우가 발생했습니다
MOVFF LOREG, SSPBUF
외침 WAITFORACK
외침 POLLBUFF
BSF SSPCON2, ACKSTAT
반환
;은 데이터의 '온도'의 위치를 들이대고 'HIREG'및 'LOREG'쓴다
SendData BCF PIR1, SSPIF
MOVFF 온도, SSPBUF
외침 WAITFORACK
외침 POLLBUFF
BSF SSPCON2, ACKSTAT
반환
;는 멈춰 조건 생성
GENSTOP BCF PIR1, SSPIF
BSF SSPCON2 펜
외침 POLLBUFF
반환; 20 마이크로 초 지연 : 필수 ADC를위한
DEL20U MOVLF 온도, 다봉 20 '
온도 LOOP_ADCACQ DECF
BNZ LOOP_ADCACQ
BCF 상태, 지
반환
; POLL SSPIF
POLLBUFF BTFSS PIR1, SSPIF
GOTO POLLBUFF
BCF PIR1, SSPIF
반환GETADC 외침 DEL20U
BSF ADCON0, 바로 GO
LOOPGETADC BTFSC ADCON0, 바로 GO
GOTO LOOPGETADC
MOVF ADRESH, 0
반환; (소요 시간 내부로 작성하지) 10ms TWR 기다
기다려 놉
MOVLW 다봉 156 '; 가치 스타팅의 SET
MOVWF TMR0L; 및 부하에 타이머
BCF INTCON, T0IF; 리셋 타이머 출력 FLAG
WEM BTFSS INTCON, T0IF; 10ms 기다
GOTO WEM; 대한되면 TIMEOUT
반환; 바이트 적고 끝내고 ....;;;;;;;;;; 인터럽트 서비스 루틴 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
; 높은 우선순위 인터럽트 POLL
HPINT BTFSC PIR2, LVDIF
GOTO LVDINT
BTFSC PIR1, TMR1IF
GOTO TMR1INT
SETWATCH
RETFIE
TMR1INT
BCF PIR1, TMR1IF
외침 GETADC
; ROM과에 저장
MOVWF 온도
INCF LOREG
외침 SENI2C
외침 기다
GOTO HPINTLVDINT
BTG PORTB, 0
BTG PORTB, 0
GOTO HPINT
최종
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;; 개요 ;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
; 파이널을 변경할 필요가 : 주석 LVDEN
; 리뷰 논평 부품
; RB0 : 방해에 다른 MCU를 생성
; EEPROM을 통한 의사 소통 프로그램의 I2C;;;;;;; 어셈블러 지시어 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;리스트 P = PIC18F452로, F = INHX32는 C = 160, N = 0, ST는 = 끄기, MM은 = 끄기, 연구 = 12, 엑스 = 켜기
# 포함 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; 리셋
__CONFIG _CONFIG2H, _WDT_OFF_2H; 워치독 타이머 장애
__CONFIG _CONFIG3H, _CCP2MX_ON_3H; RC1을 CCP2 (내걸 RB3보다)
__CONFIG _CONFIG4L, _LVP_OFF_4L; RB5 난을 활성화 / O를;;;;;;; VARIABLES ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;CBLOCK 0X000; 교통의 RAM의 시작
온도
SENREG
HIREG
LOREG
RECREG
CONREG
ENDC;;;;;;; MACRO 정의 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;MACRO MOVLF DEST는, LITERAL
MOVLW LITERAL
DEST는 MOVWF
ENDM
MACRO SETWATCH
; 워치독 타이머 활성화
BSF WDTCON, SWDTEN
ENDM
MACRO CLRWATCH
BCF WDTCON, SWDTEN
ENDM
; 보내 비아의 I2C
I2CSEND MACRO Data1, ADDRESSH, ADDRESSL
외침 GENSTART; 시작 조건 생성
MOVLF CONREG, H'A0 '
외침 CALLEEPROM하며 EEPROM이 소
MOVLF HIREG, ADDRESSH; 주소 하이 바이트
MOVLF LOREG, ADDRESSL; 하한가 ADD가
외침 SENDADDR
MOVLF 온도, Data1, 데이터
외침 SendData
외침 GENSTOP
ENDM;;;;;;; 벡터 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;ORG를이 0x0000; 리셋 벡터
놉
GOTO 스타트ORG를 0x0008; 높은 우선순위 인터럽트 벡터
CLRWDT
CLRWATCH
GOTO HPINTORG를 0X0018; 낮은 우선 순위 인터럽트 벡터
$; TRAP GOTO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;; 메인 코드 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;
; 초기화
ORG를 H'30 '
스타트 CLRF TRISB
CLRF PORTB
CLRF TRISD
CLRF TMR1L
CLRF TMR1H
BSF TRISA, 0; 아날로그 입력 채널
; 인터럽트
MOVLF INTCON, B'11000000 '
; TIMER1 설정 - TIMER1 원인은 A / D 업데이트
BSF PIE1, TMR1IE; TIMER1 인터럽트 활성화
BSF IPR1, TMR1IP
; BSF T1CON, TMR1ON
; ADC를 설정
MOVLF ADCON0, B'00000000 '
MOVLF ADCON1, B'01000001 '
CLRF ADRESH
CLRF ADRESL
BSF ADCON0, ADON
;의 I2C 설정의 I2C 모드, SCL과 SDA는 - 라인이있다
; 조작에 의해 MSSP 하드웨어하지만 아직 ...
: (
MOVLF SSPSTAT, B'10000000 '; 슬루율 제어 사용 중지
MOVLF SSPCON1, B'00101000 '; 마스터 모드, SSP를 활성화
MOVLF SSPCON2, B'01100000 '; ACKSTAT, ACKDT의 SET
MOVLF SSPADD, H'13 '; 50kHz 보오드 레이트
; TIMER0 초기화
MOVLF T0CON, B'11000101 '; 저전압 DETECT 모듈 (LVD) 구성
MOVLF LVDCON, B'00001101 '; 4.2 - 4.45 브이는 TRIGGER 수준이다
BCF PIE2, LVDIE
; BSF LVDCON, LVDEN
LVDENPOLL BTFSS LVDCON, 5
; GOTO LVDENPOLL
BCF PIR2, LVDIF
BSF IPR2, LVDIP
BSF PIE2, LVDIE; 단계 데이터 시트은 다음과
; ALL을 참조 당신은 내 대답을하지 않습니다
; 데이터 시트를 ...;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;;;;;;;;; 실제 코드는 여기 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;; BEGINS ;;;;;;;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CLRWDT
; SETWATCH
루프; 푹
; CLRWDT
I2CSEND H'AB ', H'01', H'00 '
외침 기다
I2CSEND H'15 ', H'00', H'00 '
외침 기다
외침 기다
외침 GETI2C
MOVWF PORTDGOTO $
;;;;;;;;;;; 서브루틴 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;
;의 I2C 서브루틴
SENI2C 외침 GENSTART
MOVLF CONREG, H'A0 '
외침 CALLEEPROM
외침 SENDADDR
외침 SendData
외침 GENSTOP
전화를 기다
반환
WAITFORACK BTFSC SSPCON2, ACKSTAT
GOTO WAITFORACK
BSF SSPCON2, ACKSTAT
반환
GETI2C 외침 GENSTART
MOVLF CONREG, H'A0 '
외침 CALLEEPROM
외침 SENDADDR
외침 GENSTOP
외침 기다
외침 기다
외침 GENSTART
MOVLF CONREG, H'A1 '
외침 CALLEEPROM
BSF SSPCON2, RCEN
전화 POLLBUFF
; BFCHK BTFSS SSPSTAT, BF
; GOTO BFCHK
BSF SSPCON2, ACKDT;는 ACK = 1
BSF SSPCON2, ACKEN;는 ACK 보내기
; BCF PIR1, SSPIF
; 외침 POLLBUFF
외침 GENSTOP
MOVF SSPBUF, 승
반환
; 생성 시작 조건
GENSTART BCF PIR1, SSPIF; SSPIF CLEAR를
BSF SSPCON2, ACKSTAT
BSF SSPCON2, 센; 시작 조건 생성
외침 POLLBUFF; 시작 조건 완전히 생성
반환
; EEPROM이 소
CALLEEPROM BCF PIR1, SSPIF; A0 A1과 A2 그러고있을거야
MOVFF CONREG, SSPBUF
외침 WAITFORACK
외침 POLLBUFF
BSF SSPCON2, ACKSTAT; 그는 ACK 가정할 경우가 발생했습니다
반환
; 위치 주소 'HIREG'및 'LOREG'들이대고
SENDADDR BCF PIR1, SSPIF
MOVFF HIREG, SSPBUF
외침 WAITFORACK
BSF SSPCON2, ACKSTAT
외침 POLLBUFF
BSF SSPCON2, ACKSTAT; 그는 ACK 가정할 경우가 발생했습니다
MOVFF LOREG, SSPBUF
외침 WAITFORACK
외침 POLLBUFF
BSF SSPCON2, ACKSTAT
반환
;은 데이터의 '온도'의 위치를 들이대고 'HIREG'및 'LOREG'쓴다
SendData BCF PIR1, SSPIF
MOVFF 온도, SSPBUF
외침 WAITFORACK
외침 POLLBUFF
BSF SSPCON2, ACKSTAT
반환
;는 멈춰 조건 생성
GENSTOP BCF PIR1, SSPIF
BSF SSPCON2 펜
외침 POLLBUFF
반환; 20 마이크로 초 지연 : 필수 ADC를위한
DEL20U MOVLF 온도, 다봉 20 '
온도 LOOP_ADCACQ DECF
BNZ LOOP_ADCACQ
BCF 상태, 지
반환
; POLL SSPIF
POLLBUFF BTFSS PIR1, SSPIF
GOTO POLLBUFF
BCF PIR1, SSPIF
반환GETADC 외침 DEL20U
BSF ADCON0, 바로 GO
LOOPGETADC BTFSC ADCON0, 바로 GO
GOTO LOOPGETADC
MOVF ADRESH, 0
반환; (소요 시간 내부로 작성하지) 10ms TWR 기다
기다려 놉
MOVLW 다봉 156 '; 가치 스타팅의 SET
MOVWF TMR0L; 및 부하에 타이머
BCF INTCON, T0IF; 리셋 타이머 출력 FLAG
WEM BTFSS INTCON, T0IF; 10ms 기다
GOTO WEM; 대한되면 TIMEOUT
반환; 바이트 적고 끝내고 ....;;;;;;;;;; 인터럽트 서비스 루틴 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;
; 높은 우선순위 인터럽트 POLL
HPINT BTFSC PIR2, LVDIF
GOTO LVDINT
BTFSC PIR1, TMR1IF
GOTO TMR1INT
SETWATCH
RETFIE
TMR1INT
BCF PIR1, TMR1IF
외침 GETADC
; ROM과에 저장
MOVWF 온도
INCF LOREG
외침 SENI2C
외침 기다
GOTO HPINTLVDINT
BTG PORTB, 0
BTG PORTB, 0
GOTO HPINT
최종