⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 f6.inc

📁 用PIC单片机18F6520+ADE7755实现的一个大安培、锂离子电池的化程器。全部源码
💻 INC
📖 第 1 页 / 共 2 页
字号:
;//********************************************************************************************************
RESET_V		equ	0x0000
ISR_V		equ	0x0004
High2k		equ	0x0800

;//*********************************************************************
;常数定义
_ClkIn		equ	D'5068800'		; OSC=5.0688MHz
_ClkOut		equ	(_ClkIn >> 2)

;MaxLength=DataLength+8
DataLength	equ	D'18'		; length of data(include DI0,DI1)
StartDelay	equ	D'10'		; 充电开始有个延迟,否则工作电流超不过截止电流
V_StartDelay	equ	D'3'		; 放电开始有个延迟,否则工作电流超不过截止电流
C_arrived	equ	D'3'		; 达到判据的次数

LSB		equ	0x00
MSB		equ	0x07
AT24C02		equ	0xA0			; CAT24C02 芯片
PWM_WIN		equ	0x06			; 占空比还有5个周期就要跳变

;//#define	Percent100		; 占空比100%
#ifdef	Percent100
TriScope	equ	H'03FF'		;三角波上到100%
HalfScope	set	(TriScope>>1)	;中点采样
#endif

#define	Percent40			; 占空比40%
#ifdef	Percent40
TriScope	equ	H'0199'		;三角波只能上到5V的40%,即2V,1024*0.4=409=H'0199'
HalfScope	set	(TriScope>>1)	;中点采样
#endif

;#define	Percent10		; 占空比10%
#ifdef	Percent10
TriScope	equ	H'0066'		;三角波只能上到5V的10%,即2V,1024*0.1=102=H'0066'
HalfScope	set	(TriScope>>1)	;中点采样
#endif

; //--------------------    定时器 T1 设置     -------------------------------
;TMR1H:TMR1L=65536-累加次数=65536-(延迟时间/tc)=65536-T*_ClkOut (分频比为1:1)
;	1tc=4/5068800=0.789us

;#define	Timer50ms		; 定时50毫秒
;#define	Timer20ms			; 定时20毫秒
;#define	Timer10ms			; 定时10毫秒
#define	Timer5ms			; 定时5毫秒

#ifdef	Timer50ms
;例:T=50ms	T1_TICK=65536-T*_ClkOut=65536-0.05*5068800/4=65536-63360=2176=H'0880'
T1_TICK		equ	H'0880'
SEC1divTimer	equ	D'10'
RevTime		equ	D'4'		; 接收超时 4*50ms=200ms
#endif

#ifdef	Timer20ms
;例:T=20ms	T1_TICK=65536-T*_ClkOut=65536-0.02*5068800/4=65536-22344=40192=H'9D00'
T1_TICK		equ	H'9D00'
SEC1divTimer	equ	D'25'
RevTime		equ	D'10'		; 接收超时 10*20ms=200ms
#endif

#ifdef	Timer10ms
;例:T=10ms	T1_TICK=65536-T*_ClkOut=65536-0.01*5068800/4=65536-12672=52864=H'CE80'
T1_TICK		equ	H'CE80'
SEC1divTimer	equ	D'50'
RevTime		equ	D'20'		; 接收超时 20*10ms=200ms
#endif

#ifdef	Timer5ms
;例:T=5ms	T1_TICK=65536-T*_ClkOut=65536-0.005*5068800/4=65536-6336=59200=H'E740'
T1_TICK		equ	H'E740'
SEC1divTimer	equ	D'100'
RevTime		equ	D'40'		; 接收超时 40*5ms=200ms
#endif

T1CON_INIT	equ	B'00000001'	; 分频比为1:1,定时器方式,TMR1ON=1
;T1CON_INIT	equ	B'00000000'	; 分频比为1:1,定时器方式,TMR1ON=0
;//----- T1CON Bits ---------------------------------------------------------
;T1CKPS1                      EQU     H'0005'
;T1CKPS0                      EQU     H'0004'
;T1OSCEN                      EQU     H'0003'
;NOT_T1SYNC                   EQU     H'0002'
;T1INSYNC                     EQU     H'0002'    ; Backward compatibility only
;TMR1CS                       EQU     H'0001'
;TMR1ON                       EQU     H'0000'

; //--------------------     波特率设置     ------------------------------------------------------------
; 5.0688MHz crystal,
#define	HighSpeed		;Baud Rates for Asynchronous Mode (BRGH = 1)
#ifdef	HighSpeed
;BRGH=1,高速: SPBRG=fosc/(16x 波特率)-1
TXSTA_INIT	equ	B'01000100'	;bit2(BRGH)=1

;SPBRG_INIT	equ	0x41		;4800bps,error=0
SPBRG_INIT	equ	0x20		;9600bps,error=0
;SPBRG_INIT	equ	0x10		;19200bps,error=-2.94%
#else
;	BRGH=0,低速: SPBRG=fosc/(64x 波特率)-1
TXSTA_INIT	equ	B'01000000'

SPBRG_INIT	equ	0x41		;1200bps,error=0
;SPBRG_INIT	equ	0x20		;2400bps,error=
;SPBRG_INIT	equ	0x10		;4800bps,error=
;SPBRG_INIT	equ	0x07		;9600bps,error=

#endif

RCSTA_INIT	equ	B'11010000'

;// --------------------     PWM设置     ------------------------------------------------------------
;#define	fPWM		;PWM的频率=4.95K,分辨率10位
;#ifdef	fPWM
PR2_INIT	equ	0xFF		;Period register
CCPR1L_INIT	equ	B'00000000'	;占空比00%
CCP1CON_INIT	equ	B'00001100'	;ccp2X(bit5)=0,ccp2Y(bit4)=0

;#endif

OPTION_INIT	equ	B'10001001'	; weak pull-ups are disabled,
					; Prescaler(1:2) to WDT ,WDT timeout=36ms
					; bit6=INTEDG:=0表示RB0为下降沿触发					
INTCON_INIT	equ	B'11010000'
;bit7:	GIE	on
;bit6:	PEIE	on
;bit5:	T0IE	off
;bit4:	INTE	on
;bit3:	RBIE	off

T2CON_INIT	equ	B'00000000'	; setup Timer2,1:1 prescale, int clock

; //-----------------------------------------------------------------------------------------------

;
;>>>>	PORTA	<<<<
#define	R46		PORTA,0		;PWM的四个微调电阻R46,R47,R48,RR49
#define	R47		PORTA,1		;输出0接通
#define CH		PORTA,2		;充电控制:输出0有效,1关闭
#define DISCH		PORTA,3		;放电控制:输出0有效,1关闭
#define	BUTTON		PORTA,4		;设置/校准允许键(24wc02'wp)
#define	WP		PORTA,4		;24wc02'wp(设置/校准允许键),复用
#define	Enable485	PORTA,5		; '1':485接收,'0':485发送 

#define	R46_TRIS	TRISA,0
#define	R47_TRIS	TRISA,1
#define	CH_TRIS		TRISA,2
#define	DISCH_TRIS	TRISA,3
#define	WP_TRIS		TRISA,4
#define	BUTTON_TRIS	TRISA,4

PORTA_TRIS	equ	B'00010011'	; =0:output(复位为高阻)
PORTA_LATCH	equ	B'00111100'
;>>>>	PORTA	<<<<

;>>>>	PORTB	<<<<
; //--------7756 control setup I/O--------------------------

#define irqb  		PORTB,0		;IRQ Bit的意思, 波形寄存器满
#define csb   		PORTB,1		;CS Bit的意思
#define RedLed 		PORTB,2		;高亮	
#define GreenLed	PORTB,3
#define RST7756		PORTB,4
;//#define	CF		PORTB,5

#define	RST7756_TRIS	TRISB,4

PORTB_TRIS	equ	B'00100001'
PORTB_LATCH	equ	B'00110001'
;>>>>	PORTB	<<<<

;>>>>	PORTC	<<<<
#define	SDA		PORTC,0
#define	SCL		PORTC,1
#define	PWM		PORTC,2		; CCP1用作PWM output
#define	SCK		PORTC,3
#define	SDI		PORTC,4
#define	SDO		PORTC,5
#define	TX		PORTC,6
#define	RX		PORTC,7

#define	SDA_TRIS	TRISC,0
#define	SCL_TRIS	TRISC,1
#define	PWM_TRIS	TRISC,2

PORTC_TRIS	equ	B'10010000'
PORTC_LATCH	equ	B'11011011'
;////	PORTC	<<<<

#define	TRUE		1
#define	FALSE		0

; //--------------------------------------------------------------------------------------------
;			Register File Variables

BFIIC	equ	0x20			; IIC数据缓冲区 20H--27H
; //--------------------------------------------------------------------------------
	CBLOCK	0x28			; EEPROM
		BYTES
		SourcePointer
		DestPointer
		SubAddress		; sub-address of slave (used in I2C_HIGH.ASM)
		EETEMP			; load this reg with the data to be transmitted
		ByteNumber		; 发送字节计数
		tempCount		; The bit number (0:7) transmitted or received
		I			;
; ---------------------------------------------------------------------
		LoadOn			; 流程加载寄存器
		WorkFlag		; 工作标志
		fCOMM			; 通信标志字节
		ByteReceived		; 串行通信已收字节数
		RevTemp			; 发送时,因为关闭了接收中断,也可以调用
		OVERTIME
		SecsPassed		; 流程已进行时间(满StartDelay秒之后再判截止电流)
		C_SEC			; 记满 SEC1divTimer是1秒
; ---------------------------------------------------------------------
        	C_MIN			; 记满60是1分
		Minutes			; 分的累加器,静置用
		PWRUP55			; registers to test at power up to
		PWRUPAA			; see if warm start or cold start
		spi   			; spi reg data =0c hex 
		wordlen			; word length for rotate 
		VI_CSamp
		I_sample_low		; lsb
; ---------------------------------------------------------------------
		I_sample_middle		; 
		I_sample_high		; msb
		V_sample_low		; lsb
		V_sample_middle		; 
		V_sample_high		; msb
		PWM_LOW			; New PWM1 duty cycle value
		PWM_HI			; New PWM1 duty cycle value
		DC_LOW
		KeepValue_MID
		DC_HI
		ResistNet		; 记录R46~R49的值
		outd1			; out to 7756 1st byte (msb 1st) of word
		outd2			; out to 7756 2st byte (msb 1st) of word	
		insd1			; in from 7756 1st byte (msb 1st) of word
		insd2			; in from 7756 2st byte (msb 1st) of word
		insd3			; in from 7756 3st byte (msb 1st) of word
	ENDC
; ---------------------------------------------------------------------
	CBLOCK	0x50			;通讯缓冲区50H-6FH:32 bytes
		SERIALBUFFER		;通讯缓冲区首地址
		A0			;从站地址low
		A1			;从站地址middle
		A2			;从站地址high
		CCODE			;控制码
		SBL			;数据长度
		DI0			;数据标识高位
		DI1			;数据标识高位
		SDATA			;有效数据区
	ENDC
; ---------------------------------------------------------------------

	CBLOCK	0x71			; EEPROM
		fFLAG			; 通用标志
		fFLAG2
		TEMP
		C_IVariety		; 电流采样大于100mA的次数
		C_LowerTerm		; 小于截止电流的次数
		T1use			; used in timer1 interrupt
		J
		M
		C_T
		C_TermT_LOW		; 充放电计时
		C_TermT_HI
;不能超过7FH
	ENDC

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -