📄 transmit_a.asm
字号:
;**********************************************************************
; *
; Filename:transmit_temp.asm *
; Date:05/07/28 *
; File Version:A *
; *
; Author:LuoKC *
; Company:burnon *
; *
; *
;**********************************************************************
; *
; Files required: only use for EEPROM testing *
; timer0 and timer1 initial have finished *
; *
; *
;**********************************************************************
; *
; Notes: *
; *
; EEPROM ADDRESS CONNECT *
; 11&41H ID HIGH BASIC VALUE *
; 12&42H ID HIGH RIGHT VALUE *
; 13&43H ID HIGH CRC VALUE *
; 14&44H ID MID BASIC VALUE *
; 15&45H ID MID RIGHT VALUE *
; 16&46H ID MID CRC VALUE *
; 17&47H ID LOW BASIC VALUE *
; 18&48H ID LOW RIGHT VALUE *
; 19&49H ID LOW CRC VALUE *
; 21&51h squence code *
; 61&71h learn sysmbol *
;***********************************************************************
list p=16F630 ; list directive to define processor
#include <P16F630.inc> ; processor specific variable definitions
__CONFIG _CPD & _WDT_OFF & _BODEN & _PWRTE_ON & _XT_OSC
; '__CONFIG' directive is used to embed configuration data within .asm file.
; The lables following the directive are located in the respective .inc file.
; See respective data sheet for additional information on configuration word.
;***** VARIABLE DEFINITIONS
w_temp EQU 0x20 ; variable used for context saving
status_temp EQU 0x21 ; variable used for context saving
PCLATH_TEMP EQU 0x22 ;variable used for PCLATH saving at interruption
porta_temp EQU 0x23
COUNT EQU 0X24
ACC_H EQU 0X25 ;initially acceleration value high
ACC_L EQU 0X26 ;initially acceleration value low
ACC_H_OLD EQU 0X27
ACC_L_OLD EQU 0X28
ACC_COMPEN EQU 0X29 ;acceleration value compensated
ACC_COMPEN_OLD EQU 0X2A
MEASURE_COMM EQU 0X2B ;measure command register
RD_SP12 EQU 0X2C ;read (temperature pressure) data from sp12 register
PRESS_H EQU 0X2D ;initially pressure data of sp12 high
PRESS_L EQU 0X2E ;initially pressure data of sp12 low
PRESS_H_OLD EQU 0X2F
PRESS_L_OLD EQU 0X30
PRESS_COMPEN EQU 0X31 ;pressure value after compensated
PRESS_COMPEN_OLD EQU 0X32
TEMP_H EQU 0X33 ;initially temperature value high
TEMP_L EQU 0X34 ;initially temperature value low
TEMP_H_OLD EQU 0X35
TEMP_L_OLD EQU 0X36
TEMP_COMPEN EQU 0X37 ;temperature value after compensated
TEMP_COMPEN_OLD EQU 0X38
PARIT_CODE EQU 0X39 ;parity code register
;*------------------RF REGISTER----------------------*
PREAM_CODE_H EQU 0X40
PREAM_CODE_L EQU 0X41
ID_CODE_H EQU 0X42
ID_CODE_MID EQU 0X43
ID_CODE_L EQU 0X44
PARITY_CODE EQU 0X45
DEL_COUNT EQU 0X46
DEL_COUNT1 EQU 0X47
RF_TRAN_COUNT EQU 0X48
RF_SEND EQU 0X49
FLAG EQU 0X4A
RF_NEED EQU 0
RF_NOT_NEED EQU 1
FLG_INTF EQU 2
EE_FLG_ERROR EQU 3
FLG_TIM1 EQU 4
KEY_PRESSED EQU 5
HOUR2_SY EQU 6
SECOND_SY EQU 7
SQUENCE_CODE EQU 0X4B
SYSMBOL_CODE EQU 0X4C
;*--------------------TIMER0 REGISTER----------------*
TIMER0_COUNT EQU 0X50
TIMER0_COUN1 EQU 0X51
TIMER0_COUN2 EQU 0X52
TIMER0_COUN3 EQU 0X53
TIMER1_COUNT EQU 0X51
TIMER1_1SECO EQU 0X52
TIMER1_1MIN EQU 0X53
TIMER1_52MIN EQU 0X54
;TIME_REG EQU 0X5A
;TIME_1SECO EQU 0
;TIME_1MIN EQU 1
;TIME_52MIN EQU 3
;*--------SP12 COMMUNITION REGISTER-------------------*
SP12_COMM_COUN EQU 0X5A
SP12_DATA_OUT1 EQU 0X51
SP12_DATA_OUT2 EQU 0X52
SP12_DATA_IN1 EQU 0X53
SP12_DATA_IN2 EQU 0X54
SP12_COMM EQU 0X55
SP12_SEND EQU 0X56
;*---------EEPROM DATA REGISTER-------------------------*
RD_EE_ADDR EQU 0XA0
RD_DATA EQU 0XA1
RD_DATA1 EQU 0XA2
RD_DATA2 EQU 0XA3
RD_BASIC EQU 0XA4
RD_CAL EQU 0XA5
RD_CRC EQU 0XA6
EE_COUNT EQU 0XA7
WR_EE_ADDR EQU 0XA8
WR_DATA EQU 0XA9
WR_BASIC EQU 0XAA
WR_CAL EQU 0XAB
WR_CRC EQU 0XAC
EE_RDTEMP EQU 0XB0
EE_RDTEMP1 EQU 0XB1
EE_RDTEMP2 EQU 0XB2
EE_REMAIN_DATA EQU 0XB5
EE_CRC_DATA EQU 0XB6
EE_DATA EQU 0XB7
EE_DATA_TEMP EQU 0XB8
EE_DATA_TEMP1 EQU 0XB9
;*----------------PORTA AND PORTC BIT DEFINE-------------*
TRAN_RF EQU 2 ;PORTA
SP12_SDI EQU 1 ;PORTA
SP12_VDD EQU 5 ;PORTC
SP12_SDO EQU 4 ;PORTC
SP12_CLK EQU 3 ;PORTC
SP12_NCS EQU 1 ;PORTC
SP12_RFPOWER EQU 0 ;PORTC
LEARN_SW EQU 2 ;PORTC
;**********************************************************************
ORG 0x000 ; processor reset vector
clrf PCLATH ; ensure page bits are claared
goto main ; go to beginning of program
ORG 0x004 ; interrupt vector location
GOTO INT_ADDRESS
main:
; remaining code goes here
CALL intial_port
CALL CLRRAM
send_data
;call RF_DATA_SEND
MOVLW 0XF0
MOVWF SQUENCE_CODE
MOVWF SYSMBOL_CODE
MOVWF PREAM_CODE_H
MOVWF PREAM_CODE_L
MOVWF ID_CODE_H
MOVWF ID_CODE_MID
MOVWF ID_CODE_L
CALL RF_DATA_SEND
;MOVWF RF_SEND
;CALL PARITY_SEND
CALL WRITE_SQUENCE
CALL READ_SQUENCE
CALL WRITE_SYSMBOL
CALL READ_SYSMBOL
MOVLW 0X0E
MOVWF ID_CODE_H
MOVWF ID_CODE_MID
MOVWF ID_CODE_L
CALL WIRTE_IDHIGH
CALL WIRTE_IDMIDDLE
CALL WIRTE_IDLOW
CALL READ_IDCODE
;call RF_SEND
goto send_data
intial_port:
;*------------initial porta-----------------------------------*
bcf STATUS,RP0 ;Bank 0
clrf PORTA ;Init PORTA=00h
movlw 07h ;Set RA<2:0> to digital I/O
movwf CMCON ;digital I/O
MOVLW 05H ;porta,0 and porta,2 set to input the other set to output
bsf STATUS,RP0 ;Bank 1
MOVWF TRISA ;and set RA<5:4,1:0>
;RA5 and RA4 RA3 as special function port
movlw 04h ;PORTA,2 interrupt wakeup MCU working
movwf IOCA ;only porta.1 interrupt enable
;*---------------initial portC---------------------------------*
bcf STATUS,RP0 ;Bank 0
clrf PORTC ;Init PORTC
bsf STATUS,RP0 ;Bank 1
movlw 04h ;Set RC2 as inputs the other as output
movwf TRISC ;and set RC<5:4,1:0>
;as outputs
bcf STATUS,RP0 ;Bank 0
;*---------------initial special register----------------------*
clrwdt ;Clear WDT and
bsf STATUS,RP0 ;Bank1
movlw 0x87 ;0XC0
movwf OPTION_REG ;option_reg.7 PORTA Pull-up Enable bit
bcf STATUS,RP0 ;option_reg.6 Interrupt Edge Select bit
;option_reg.5 TMR0 Clock Source Select bit
;option_reg.4 TMR0 Source Edge Select bit
;option_reg.3 Prescaler Assignment bit
;option_reg.2-.0 Prescaler Rate Select bits
movlw B'11110000' ;B'1111000' ;int interrupt is not need
movwf INTCON ;INTCON.7 Global Interrupt Enable bit
;INTCON.6 Peripheral Interrupt Enable bit
;INTCON.5 TMR0 Overflow Interrupt Enable bit
;INTCON.4 RA2/INT External Interrupt Enable bit
;INTCON.3 Port Change Interrupt Enable bit(1)
;INTCON.2 TMR0 Overflow Interrupt Flag bit(2)
;INTCON.1 RA2/INT External Interrupt Flag bit
;INTCON.0 Port Change Interrupt Flag bit
movlw 00h ;PIE1.7 EE Write Complete Interrupt Enable bit
movwf PIE1 ;PIE1.6 A/D Converter Interrupt Enable bit (PIC16F676 only)
;PIE1.3 Comparator Interrupt Enable bit
;PIE1.0 TMR1 Overflow Interrupt Enable bit ,timer1 use to need
MOVLW 00H
MOVWF PIR1 ;PIR1.7 EEPROM Write Operation Interrupt Flag bit
;PIR1.6 A/D Converter Interrupt Flag bit (PIC16F676 only)
;PIR1.5-4 Unimplemented: Read as ‘0’
;PIR1.3 Comparator Interrupt Flag bit
;PIR1.2 -1 Unimplemented: Read as ‘0’
;PIR1.0 TMR1 Overflow Interrupt Flag bit
MOVLW 0X80 ;
MOVWF OSCCAL ;6-bit Signed Oscillator Calibration bits
MOVLW 0X04
MOVWF WPUA ;SET WAKE UP ENABLE
BCF STATUS,RP0 ;CHANGE BANK TO BANK0
;-------timer0-------------------
MOVLW 0X06
MOVWF TMR0 ;SET TIMER0 INITIAL VALUE USE FOR TRANSIMT DATA
bsf STATUS,RP0 ;Bank 1
movlw b'00000000' ;Select TMR0
; prescale, and
; clock source
movwf OPTION_REG ;
bcf STATUS,RP0 ;Bank 0
;---------timer1------------------ USER FOR CLOCK REFRESH
MOVLW 0XEC ;SET TIMER1 10MS INTERRUPT
MOVWF TMR1H
MOVLW 0X77
MOVWF TMR1L
MOVLW 0X10
MOVWF T1CON
;----------interrupt---------------
MOVLW 0X00
MOVWF EECON1
return
;*-----------------CLEAR ALL OF GENERAL STATIC RAM REGISTER--------------
CLRRAM: ;clr ram 20h~05fh
bcf STATUS,RP0
movlw 0x20
movwf FSR
LOOPRAM0:
CLRWDT
clrf INDF
incf FSR,F
BTFSS FSR,6
goto LOOPRAM0
BTFSS FSR,4
GOTO LOOPRAM0
; movlw 0xA0
; movwf FSR
LOOPRAM1:
;; clrwdt
; clrf INDF
; incf FSR
; BTFSS FSR,7
; goto LOOPRAM1
; BTFSS FSR,6
; GOTO LOOPRAM1
; BTFSS FSR,4
; GOTO LOOPRAM1
MOVLW 0XFF
MOVWF PREAM_CODE_H
MOVLW 0XFE
MOVWF PREAM_CODE_L
RETURN
;*-----------TRANSMIT 1LOGIC SUBROUTINE--------*
TRAN_1BIT:
BSF PORTA,1
CALL DELAY_256US
BCF PORTA,1
CALL DELAY_768US
RETURN
;*----------TRANSMIT 0LOGIC SUBROUTINE----------*
TRAN_0BIT:
BSF PORTA,1
CALL DELAY_256US
CALL DELAY_256US
BCF PORTA,1
CALL DELAY_256US
CALL DELAY_256US
RETURN
;*------------TRANSMIT PREAMCODE DATA SUBROUTINE---*
TRAN_1BYTE:
MOVLW 0X08
MOVWF RF_TRAN_COUNT
COUNTINUE_SEND:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -