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

📄 main.c

📁 台湾义隆公司的EM198810 2.4G无线程序
💻 C
📖 第 1 页 / 共 2 页
字号:
			*/

	CM1CON0 = 0x00;//——比较器C1 的控制寄存器0 (地址:119h)
			/*
			C1ON C1OUT C1OE C1POL — C1R C1CH1 C1CH0
			  0    0     0   0    0  0    0     0
			bit 7 C1ON:比较器C1 使能位
				1 = C1 比较器使能
				0 = C1 比较器禁止
			bit 6 C1OUT:比较器C1 输出位
				如果C1POL = 1 (极性反相):
				C1OUT = 1, C1VP < C1VN
				C1OUT = 0, C1VP > C1VN
				如果C1POL = 0 (极性非反相):
				C1OUT = 1, C1VP > C1VN
				C1OUT = 0, C1VP < C1VN
			bit 5 C1OE:比较器C1 输出使能位
				1 = C1OUT 出现在RA2/AN2/T0CKI/INT/C1OUT 引脚上(1)
				0 = C1OUT 仅在内部有效
			bit 4 C1POL:比较器C1 输出极性选择位
				1 = C1OUT 逻辑反相
				0 = C1OUT 逻辑未反相
			bit 3 未用:读为0
			bit 2 C1R:比较器C1 参考选择位(非反相输入)
				1 = C1VP 连接至C1VREF 输出
				0 = C1VP 连接至RA0/AN0/C1IN+/ICSPDAT/ULPWU
			bit 1-0 C1CH<1:0>:比较器C1 通道选择位
				00 = C1 的C1VN 连接至RA1/AN1/C12IN-/VREF/ICSPCLK
				01 = C1 的C1VN 连接至RC1/AN5/C12IN-
				10 = C1 的C1VN 连接至RC2/AN6/P1D
				11 = C1 的C1VN 连接至RC3/AN7/P1C
			注	1:C1OUT 仅在以下情况时驱动RA2/AN2/T0CKI/INT/C1OUT:
			C1OE = 1, C1ON = 1 且TRISA<2> = 0。

			*/
	CM2CON0 = 0x00;//——比较器2 的控制寄存器0 (地址:11AH)
			/*
			C2ON C2OUT C2OE C2POL — C2R C2CH1 C2CH0
			 0     0    0     0   0  0    0     0
			bit 7 C2ON:比较器C2 使能位
				1 = C2 比较器使能
				0 = C2 比较器禁止
			bit 6 C2OUT:比较器C2 输出位
				如果C2POL = 1 (极性反相):
				C2OUT = 1, C2VP < C2VN
				C2OUT = 0, C2VP > C2VN
				如果C2POL = 0 (极性非反相):
				C2OUT = 1, C2VP > C2VN
				C2OUT = 0, C2VP < C2VN
			bit 5 C2OE:比较器C2 输出使能位
				1 = C2OUT 出现在RC4/C2OUT/P1B 上(1)
				0 = C2OUT 仅在内部有效
			bit 4 C2POL:比较器C2 输出极性选择位
				1 = C2OUT 逻辑反相
				0 = C2OUT 逻辑未反相
			bit 3 未用:读为0
			bit 2 C2R:比较器C2 参考选择位(非反相输入)
				1 = C2VP 连接至C2VREF
				0 = C2VP 连接至RC0/AN4/C2IN+
			bit 1-0 C2CH<1:0>:比较器C2 通道选择位
				00 = C2 的C2VN 连接至RA1/AN1/C12IN-/VREF/ICSPCLK
				01 = C2 的C2VN 连接至RC1/AN5/C12IN-
				10 = C2 的C2VN 连接至RC2/AN6/P1D
				11 = C2 的C2VN 连接至RC3/AN7/P1C
			注	1:C2OUT 仅在以下情况驱动RC4/C2OUT/P1B:
			C2OE = 1, C2ON = 1 且TRISC<4> = 0。

			*/
	CM2CON1 = 0x00;//——比较器2 的控制寄存器1 (地址:11Bh)
			/*
			MC1OUT MC2OUT — — — — T1GSS C2SYNC
			   0     0    0 0 0 0   0     0
			bit 7 MC1OUT:C1OUT 位的镜像副本(CM1CON0<6>)
			bit 6 MC2OUT:C2OUT 位的镜像副本(CM2CON0<6>)
			bit 5-2 未用:读为0
			bit 1 T1GSS:Timer1 门控源选择位
				1 = Timer1 门控源为RA4/AN3/T1G/OSC2/CLKOUT
				0 = Timer1 门控源为C2OUT
			bit 0 C2SYNC:C2 输出同步模式位
				1 = C2 输出与Timer1 时钟下降沿同步
				0 = C2 输出异步

			*/

//	SRCON = 0x00;//——SR 锁存器控制寄存器(地址:19Eh)
//			/*
//			SR1(2) SR0(2) C1SEN C2REN PULSS PULSR — —
//
//			bit 7-6 SR<1:0>:SR 锁存器配置位(2)
//				00 = SR锁存器禁止
//				01 = SR锁存器使能。C1OUT 引脚为锁存非反相输出。C2OUT 引脚为C2 比较器输出。
//				10 = SR锁存器使能。C1OUT 引脚为C1 比较器输出。C2OUT 引脚为锁存反相输出。
//				11 = SR锁存器使能。C1OUT 引脚为锁存非反相输出。C2OUT 引脚为锁存反相输出。
//			bit 5 C1SEN:C1 置1 使能位
//				1 = C1比较器输出将SR 锁存器置1
//				0 = C1比较器输出对SR 锁存器没有影响
//			bit 4 C2REN:C2 复位使能位
//				1 = C2比较器输出将SR 锁存器复位
//				0 = C2比较器输出对SR 锁存器没有影响
//			bit 3 PULSS:为SR 锁存器位提供置位输入脉冲
//				1 = 脉冲输入
//				0 = 始终读回0
//			bit 2 PULSR:为SR 锁存器位提供复位输入脉冲
//				1 = 脉冲输入
//				0 = 始终读回0
//			bit 1-0 未用:读为0。
//			注	1: 不管SR 锁存器的操作如何,CM1CON0 和CM2CON0 寄存器的C1OUT 或C2OUT
//			位总是反映实际的比较器输出(不是引脚)。
//				2: 要在引脚上使能SR 锁存器输出,相应的C1OE、C2OE、TRISA2 和TRISC4 位
//			(分别位于CM1CON0、CM2CON0、TRISA 和TRISC 寄存器中)必须正确配置。
//			*/
//
//	VRCON = 0x00;//——电压参考控制寄存器(地址:118h)
//			/*
//			C1VREN C2VREN VRR VP6EN VR3 VR2 VR1 VR0
//
//			bit 7 C1VREN:比较器1 参考电压使能位
//				1 = CVREF 电路上电并路由到比较器1 的C1VREF 输入
//				0 = 0.6 伏常量参考电压路由到比较器1 的C1VREF 输入
//			bit 6 C2VREN:比较器2 参考电压使能位
//				1 = CVREF 电路上电并路由到比较器2 的C2VREF 输入
//				0 = 0.6 伏常量参考电压路由到比较器2 的C2VREF 输入
//			bit 5 VRR:比较器参考电压CVREF 范围选择位
//				1 = 低电平范围
//				0 = 高电平范围
//			bit 4 VP6EN:0.6V 参考电压使能位
//				1 = 使能
//				0 = 禁止
//			bit 3-0 VR<3:0>:比较器参考电压CVREF 值选择0 ≤ VR<3:0> ≤ 15
//				当VRR = 1:CVREF = (VR<3:0>/24) * VDD
//				当VRR = 0:CVREF = VDD/4 + (VR<3:0>/32) * VDD
//
//			*/
	ANSEL = 0x00;//——模拟选择寄存器(地址:11Eh)
			/*
			ANS7 ANS6 ANS5 ANS4 ANS3 ANS2 ANS1 ANS0
			 0     0    0    0    0   0     0    0
			bit 7-0 ANS<7:0>:模拟选择位
			可将AN<7:0> 引脚的功能分别选为模拟或数字。
			1 = 模拟输入。分配引脚为模拟输入。(1)
			0 = 数字I/O。分配引脚为端口或特殊功能。
			注1: 将引脚设置为模拟输入将自动禁止数字输入电路、弱上拉和电平变化中断(如果可
			用)。必须将相应的TRIS 位设置为输入模式,以允许从外部控制引脚电压。

			*/
	ANSELH = 0x00;//——模拟选择高位寄存器(地址:11Fh)
			/*
			— — — — ANS11 ANS10 ANS9 ANS8
			0 0 0 0   0     0     0    0

			bit 7-4 未用:读为0。
			bit 3-0 ANS<11:8>:模拟选择位
			可将AN<11:8> 引脚的功能分别选为模拟或数字。
			1 = 模拟输入。分配引脚为模拟输入。(1)
			0 = 数字I/O。分配引脚为端口或特殊功能。
			注1: 将引脚设置为模拟输入将自动禁止数字输入电路、弱上拉和电平变化中断(如果可
			用)。必须将相应的TRIS 位设置为输入模式,以允许从外部控制引脚电压。
			*/
	ADCON0 = 0x0D;//——A/D 控制寄存器(地址:1Fh)
			/*
			ADFM VCFG CHS3 CHS2 CHS1 CHS0 GO/DONE ADON
			  0   0     0    0    1    1    0      1
			bit 7 ADFM:A/D 结果格式选择位
				1 = 右对齐
				0 = 左对齐
			bit 6 VCFG:参考电压位
				1 = VREF 引脚
				0 = VDD
			bit 5-2 CHS<3:0>:模拟通道选择位
				0000 = 通道00 (AN0)
				0001 = 通道01 (AN1)
				0010 = 通道02 (AN2)
				0011 = 通道03 (AN3)
				0100 = 通道04 (AN4)
				0101 = 通道05 (AN5)
				0110 = 通道06 (AN6)
				0111 = 通道07 (AN7)
				1000 = 通道08 (AN8)
				1001 = 通道09 (AN9)
				1010 = 通道10 (AN10)
				1011 = 通道11 (AN11)
				1100 = CVREF
				1101 = VP6
				1110 = 保留。不使用。
				1111 = 保留。不使用。
			bit 1 GO/DONE:A/D 转换状态位
				1 = A/D 转换正在进行。将该位置1 可启动A/D 转换。
				A/D 转换完成后,该位由硬件自动清零。
				0 = A/D 转换已完成/ 未进行。
			bit 0 ADON: A/D 使能位
				1 = A/D 转换器模块正在运行
				0 = A/D 转换器被关闭且不消耗工作电流

			*/

	ADCON1 = 0x30;//——A/D 控制寄存器1 (地址:9Fh)
			/*
			— ADCS2 ADCS1 ADCS0 — — — —
			0   0     1     1   0 0 0 0
			bit 7 未用:读为0
			bit 6-4 ADCS<2:0>:A/D 转换时钟选择位
				000 = FOSC/2
				001 = FOSC/8
				010 = FOSC/32
				x11 = FRC (由专用内部振荡器产生的时钟,其频率的最大值为500 kHz)
				100 = FOSC/4
				101 = FOSC/16
				110 = FOSC/64
			bit 3-0 未用:读为0

			*/

//	PSTRCON = 0x10;//——脉冲转向控制寄存器(1, 2) (地址:19Dh)
			/*
			— — — STRSYNC STRD STRC STRB STRA
			0 0 0    1      0   0     0    0
			bit 7-5 未用:读为0
			bit 4 STRSYNC:转向同步位
				1 = 在下一个PWM 周期发生输出转向更新
				0 = 在指令周期边界的开始发生输出转向更新
			bit 3 STRD:转向使能位D
				1 = P1D 引脚的PWM 波形极性受CCPM<1:0> 控制
				0 = P1D 引脚分配为端口引脚
			bit 2 STRC:转向使能位C
				1 = P1C 引脚的PWM 波形极性受CCPM<1:0> 控制
				0 = P1C 引脚分配为端口引脚
			bit 1 STRB:转向使能位B
				1 = P1B 引脚的PWM 波形极性受CCPM<1:0> 控制
				0 = P1B 引脚分配为端口引脚
			bit 0 STRA:转向使能位A
				1 = P1A 引脚的PWM 波形极性受CCPM<1:0> 控制
				0 = P1A 引脚分配为端口引脚

			*/
//	PWM1CON = 0x00;//——增强型PWM 配置寄存器(1) (地址:1Ch)
			/*
			PRSEN PDC6 PDC5 PDC4 PDC3 PDC2 PDC1 PDC0
			  0    0    0     0    0    0    0    0
			bit 7 bit 0
			bit 7 PRSEN:PWM 重新启动使能位
				1 = 自动关闭时,一旦关闭事件消失, ECCPASE 位自动清零; PWM 自动重新启动。
				0 = 自动关闭时, ECCPASE 必须用软件清零以重新启动PWM。
			bit 6-0 PDC<6:0>:PWM 延时计数位
				PDCn = 在PWM 信号应该转换为有效的预定时间和转换为有效的实际时间之间的FOSC/4
				(4*TOSC) 周期数。
			注1: 仅限PIC16F685/PIC16F690
			*/

//	ECCPAS = 0x80;//——增强型捕捉/ 比较/PWM+ 自动关闭控制寄存器(1) (地址:1Dh)
			/*
			ECCPASE ECCPAS2 ECCPAS1 ECCPAS0 PSSAC1 PSSAC0 PSSBD1 PSSBD0
			  1       0       0        0      0       0      0     0
			bit 7 ECCPASE:ECCP 自动关闭事件状态位
				1 = 发生了关闭事件; ECCP 输出为关闭状态
				0 = ECCP 输出正在操作
			bit 6-4 ECCPAS<2:0>:ECCP 自动关闭源选择位
				000 = 禁止自动关闭
				001 = 比较器1 输出更改
				010 = 比较器2 输出更改
				011 = 比较器1 或2 更改
				100 = INT 引脚的VIL
				101 = INT 引脚的VIL 或比较器1 更改
				110 = INT 引脚的VIL 或比较器2 更改
				111 = INT 引脚的VIL 或比较器1 或比较器2 更改
			bit 3-2 PSSACn:引脚P1A 和P1C 关闭状态控制位
				00 = 驱动引脚P1A 和P1C 为0
				01 = 驱动引脚P1A 和P1C 为1
				1x = 引脚P1A 和P1C 为三态
			bit 1-0 PSSBDn: 引脚P1B 和P1D 关闭状态控制位
				00 = 驱动引脚P1B 和P1D 为0
				01 = 驱动引脚P1B 和P1D 为1
				1x = 引脚P1B 和P1D 为三态
			注1: 仅限PIC16F685/PIC16F690。

			*/

	CCP1CON = 0x00;
}

/*
		LED 状态表
		-----------------------------------------------------------------
		|  MS7  |  MS6  |  MS5  |  MS4  |  MS3  |  MS2  |  MS1  |  MS0  |
		-----------------------------------------------------------------
		|   -   |   -   |   -   |   -   | LED4  | LED3  | LED2  | LED1  |
		-----------------------------------------------------------------
*/
void LEDState(INT8U State)
{
	ByteVar temp;
	temp.unByte = ~State;
	RB7 = temp.stBit.b0;
	RC7 = temp.stBit.b1;
	RC6 = temp.stBit.b2;
	RC3 = temp.stBit.b3;
}


void main(void)
{
	INT8U i,k,len;
	
	Delay_Xms(250);
	
	MCU_Ini();
	POWER_ON_RESET();
	
	SpiReadTest();
	LEDState(0x01);
	while(1);
	
//	Initial_RF();
	LEDState(0x01);
	k = 1;
	while(1)
	{
		#ifdef _tx_
		
		k = ~k;
		for(i=0;i<4;i++)
		{
			if(k)
			{
				TxBuf[i] = 0x99-i;
			}
			else
			{
				TxBuf[i] = 0x99-10-i;
			}
		}
//		Reset_Tx_FIFO();
//		Delay_Xms(13);
//		Enter_Tx_STATE();
//		Delay_Xms(13);
		TxD_RF(4,TxBuf);
		if(k)	LEDState(0x01);
		else	LEDState(0);
		Delay_Xms(100);
		
		#else
		
		len = 10;
		if(RxD_RF(&len,RxBuf))
		{
			k <<= 1;
			if(k >= 0x10) k = 1;
			LEDState(k);
		}
		else continue;
		#endif
	}
}






















	

⌨️ 快捷键说明

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