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

📄 main.c

📁 台湾义隆公司的EM198810 2.4G无线程序
💻 C
📖 第 1 页 / 共 2 页
字号:
#define	EX_GLOBAL
#include "Main.H"

	__CONFIG(INTIO & WDTDIS & PWRTEN & MCLRDIS &  UNPROTECT &  BORDIS & IESODIS & FCMDIS);
	
	
//#define		_tx_

void MCU_Ini(void)
{
//	#ifdef rf_tx
//	OSCCON = 0x70;//发射时频率为1M//——振荡器控制寄存器(地址:8Fh)
//	#else
	OSCCON = 0x40;//接收时频率为8MHz
//	#endif

		/*
			— IRCF2 IRCF1 IRCF0 OSTS(1) HTS LTS SCS
			0   0     0     0     0      0   0   0
			bit 7 未用:读为0
			bit 6-4 IRCF<2:0>:内部振荡器频率选择位
				000 = 31 kHz
				001 = 125 kHz
				010 = 250 kHz
				011 = 500 kHz
				100 = 1 MHz
				101 = 2 MHz
				110 = 4 MHz (缺省值)
				111 = 8 MHz
			bit 3 OSTS:振荡器起振超时状态位(1)
				1 = 器件运行在FOSC<2:0> 定义的外部时钟之下
				0 = 器件运行在内部振荡器之下(HFINTOSC 或LFINTOSC)
			bit 2 HTS:HFINTOSC (高频——8 MHz 到125 kHz)状态位
				1 = HFINTOSC稳定
				0 = HFINTOSC不稳定
			bit 1 LTS:LFINTOSC (低频——31 kHz)状态位
				1 = LFINTOSC稳定
				0 = LFINTOSC不稳定
			bit 0 SCS:系统时钟选择位
				1 = 内部振荡器用于系统时钟
				0 = 时钟源由FOSC<2:0> 决定
			注	1: 双速启动且选取LP、XT 或HS 为振荡器模式时,或者故障保护模式使能时,该位
			将复位为0。

		*/
	OPTION = 0xCF;//选项寄存器(地址:81h 或181h)
			/*
			RABPU INTEDG T0CS T0SE PSA PS2 PS1 PS0
			  1      1     0    0   1    0   1   0
			bit 7 RABPU:PORTA/PORTB 上拉使能位
				1 = 禁止PORTA/PORTB 上拉
				0 = 通过单独的端口锁存值使能PORTA/PORTB 上拉
			bit 6 INTEDG:中断触发边沿选择位
				1 = RA2/AN2/T0CKI/INT/C1OUT 引脚的上升沿触发中断
				0 = RA2/AN2/T0CKI/INT/C1OUT 引脚的下降沿触发中断
			bit 5 T0CS:TMR0 时钟源选择位
				1 = RA2/AN2/T0CKI/INT/C1OUT 引脚上的电平跳变
				0 = 内部指令周期时钟(CLKOUT)
			bit 4 T0SE:TMR0 信号源边沿选择位
				1 = 在RA2/AN2/T0CKI/INT/C1OUT 引脚信号从高至低跳变时,递增计数
				0 = 在RA2/AN2/T0CKI/INT/C1OUT 引脚信号从低至高跳变时,递增计数
			bit 3 PSA:预分频器分配控制位
				1 = 预分频器分配给WDT
				0 = 预分频器分配给Timer0 模块
			bit 2-0 PS<2:0>:预分频器倍率选择位
			*/

	INTCON = 0x00;//中断控制寄存器(地址:0Bh、8Bh、10Bh 或18Bh)
			/*
			GIE PEIE T0IE INTE RABIE T0BIE T0IF INTF RABIF
		     0   0    0     0    0     0    0     0    0
			bit 7 GIE:全局中断允许位
				1 = 使能所有非屏蔽中断
				0 = 禁止所有中断
			bit 6 PEIE:外设中断允许位
				1 = 使能所有非屏蔽外设中断
				0 = 禁止所有外设中断
			bit 5 T0IE:TMR0 溢出中断允许位
				1 = 使能TMR0 中断
				0 = 禁止TMR0 中断
			bit 4 INTE:RA2/INT 外部中断允许位
				1 = 使能RA2/INT 外部中断
				0 = 禁止RA2/INT 外部中断
			bit 3 RABIE:PORTA/PORTB 电平变化中断允许位(1, 3)
				1 = 使能PORTA/PORTB 电平变化中断
				0 = 禁止PORTA/PORTB 电平变化中断
			bit 2 T0IF:TMR0 溢出中断标志位(2)
				1 = TMR0 寄存器溢出(必须用软件清零)
				0 = TMR0 寄存器没有溢出
			bit 1 INTF:RA2/INT 外部中断标志
				1 = RA2/INT 外部中断已经发生(必须用软件清零)
				0 = RA2/INT 外部中断没有发生
			bit 0 RABIF: PORTA/PORTB 电平变化中断标志位
				1 = 至少有一个PORTA 或PORTB 通用I/O 引脚状态发生变化时(必须用软件清零)
				0 = PORTA 或PORTB 通用I/O 引脚状态均未发生变化
			注	1:IOCA 或IOCB 寄存器也必须被使能。
				2: 当Timer0 计数出现计满返回时, T0IF 位将被置1。Timer0 计数值在复位时不变,
			而且应在清除T0IF 位之前对其进行初始化。
				3: 包含ULPWU 中断。
			*/
	PIE1 = 0x00;//——外设中断允许寄存器1 (地址:8Ch)
			/*
			— ADIE RCIE(2) TXIE(2) SSPIE(2) CCP1IE(1) TMR2IE(1) TMR1IE
			0   0    0       0       0         0         0         0
			bit 7 未用:读为0
			bit 6 ADIE:A/D 转换器中断允许位
				1 = 使能
				0 = 禁止
			bit 5 RCIE:EUSART 接收中断允许位(2)
				1 = 使能
				0 = 禁止
			bit 4 TXIE:EUSART 发送中断允许位(2)
				1 = 使能
				0 = 禁止
			bit 3 SSPIE:同步串行口(SSP)中断允许位(2)
				1 = 使能
				0 = 禁止
			bit 2 CCP1IE:CCP1 中断允许位(1)
				1 = 使能
				0 = 禁止
			bit 1 TMR2IE: TMR2 到PR2 匹配中断允许位(1)
				1 = 使能
				0 = 禁止
			bit 0 TMR1IE:TMR1 溢出中断允许位
				1 = 使能
				0 = 禁止
			注1: 仅限PIC16F685/PIC16F690。
			2: 仅限PIC16F687/PIC16F689/PIC16F690

			*/
	PIE2 = 0x00;//——外设中断允许寄存器2 (地址:8Dh)
			/*
			OSFIE C2IE C1IE EEIE — — — —
			   0   0    0    0   0 0 0 0
			bit 7 OSFIE:振荡器故障中断允许位
				1 = 使能
				0 = 禁止
			bit 6 C2IE:比较器2 中断允许位
				1 = 使能比较器2 中断
				0 = 禁止比较器2 中断
			bit 5 C1IE:比较器1 中断允许位
				1 = 使能比较器1 中断
				0 = 禁止比较器1 中断
			bit 4 EEIE:EE 写操作中断允许位
				1 = 使能
				0 = 禁止
			bit 3-0 未用:读为0
			*/

	PIR1 = 0x00;//——外设中断请求寄存器1 (地址:0Ch)
			/*
			— ADIF RCIF(1) TXIF(1) SSPIF(1) CCP1IF(2) TMR2IF(2) TMR1IF
			0  0     0       0        0        0         0        0
			bit 7 未用:读为0
			bit 6 ADIF:A/D 转换器中断标志位
				1 = A/D 转换已完成(必须用软件清零)
				0 = A/D 转换未完成
			bit 5 RCIF:EUSART 接收中断标志位(1)
				1 = EUSART 接收缓冲器满(通过读取RCREG 清零)
				0 = EUSART 接收缓冲器未满
			bit 4 TXIF: EUSART 发送中断标志位(1)
				1 = EUSART 发送缓冲器空(通过写入TXREG 清零)
				0 = EUSART 发送缓冲器满
			bit 3 SSPIF:同步串行口(SSP)中断标志位(1)
				1 = 发送/ 接收完成(必须用软件清零)
				0 = 等待发送/ 接收
			bit 2 CCP1IF:CCP1 中断标志位(2)
				捕捉模式
				1 = TMR1寄存器发生捕捉中断(必须用软件清零)
				0 = TMR1寄存器未发生捕捉中断
				比较模式
				1 = TMR1寄存器发生比较匹配中断(必须用软件清零)
				0 = TMR1寄存器未发生比较匹配中断
				PWM 模式
				未在此模式中使用。
			bit 1 TMR2IF:TMR2 和PR2 中断标志位(2)
				1 = 发生TMR2 和PR2 匹配中断(必须用软件清零)
				0 = 未发生TMR2 和PR2 匹配中断
			bit 0 TMR1IF:TMR1 溢出中断标志位
				1 = TMR1寄存器溢出(必须用软件清零)
				0 = TMR1寄存器未溢出
			注	1: 仅限PIC16F687/PIC16F689/PIC16F690。
				2: 仅限PIC16F685/PIC16F690。
			*/

	PIR2 = 0x00;//——外设中断请求寄存器2 (地址:0Dh)
			/*
			OSFIF C2IF C1IF EEIF — — — —
			  0    0     0   0   0 0 0 0

			bit 7 OSFIF:振荡器故障中断标志位
				1 = 系统振荡器故障,时钟输入切换至INTOSC (必须用软件清零)
				0 = 系统时钟工作正常
			bit 6 C2IF:比较器2 中断标志位
				1 = 比较器输出(C2OUT 位)已经改变(必须用软件清零)
				0 = 比较器输出(C2OUT 位)没有变化
			bit 5 C1IF:比较器1 中断标志位
				1 = 比较器输出(C1OUT 位)已经改变(必须用软件清零)
				0 = 比较器输出(C1OUT 位)没有变化
			bit 4 EEIF:EE 写操作中断标志位
				1 = 写操作完成(必须用软件清零)
				0 = 写操作未完成或尚未开始
			bit 3-0 未用:读为0
			*/

	PCON = 0x10;//——电源控制寄存器(地址:8Eh)
			/*
				— — ULPWUE SBOREN(1) — — POR BOR
				0 0    0      1      0 0  0   0
				bit 7 bit 0
				bit 7-6 未用:读为0
				bit 5 ULPWUE:超低功耗唤醒使能位
					1 = 使能超低功耗唤醒
					0 = 禁止超低功耗唤醒
				bit 4 SBOREN:软件BOR 使能位(1)
					1 = 使能BOR
					0 = 禁止BOR
				bit 3-2 未用:读为0
				bit 1 POR:上电复位状态位
					1 = 无上电复位发生
					0 = 发生上电复位(上电复位发生后,必须用软件置1)
				bit 0 BOR:欠压复位状态位
					1 = 无欠压复位发生
					0 = 发生欠压复位(欠压复位发生后,必须用软件置1)
				注1: 配置字寄存器中的BOREN<1:0> = 01 时,该位控制BOR。
			*/


	TRISA = 0x3B;//——TRISA 三态寄存器(地址:85h 或185h)
			/*
			— — TRISA5 TRISA4 TRISA3 TRISA2 TRISA1 TRISA0
			0 0   1      1       1      0      1     1
			bit 7-6 未用:读为0
			bit 5-0 TRISA<5:0>:PORTA 三态控制位
			1 = PORTA 引脚配置为输入(三态)
			0 = PORTA 引脚配置为输出
			注: 在XT、HS 和LP 振荡器模式下, TRISA<5:4> 总是读为1。
			*/
	PORTA = 0x00;//——PORTA 寄存器(地址:05h 或105h)
			/*
			— — RA5 RA4 RA3 RA2 RA1 RA0
			0 0  0   0   0   0   0   0
			bit 7-6: 未用:读为0
			bit 5-0: RA<5:0>:PORTA I/O 引脚位
				1 = 端口引脚> VIH
				0 = 端口引脚< VIL
			*/

	WPUA = 0x00;//——弱上拉PORTA 寄存器(地址:95h)
			/*
			— — WPUA5 WPUA4 — WPUA2 WPUA1 WPUA0
			0 0   0      0  0   0     0     0
			bit 7-6 未用:读为0
			bit 5-4 WPUA<5:4>:弱上拉寄存器位
				1 = 上拉使能
				0 = 上拉禁止
			bit 3 未用:读为0
			bit 2-0 WPUA<2:0>:弱上拉寄存器位
				1 = 上拉使能
				0 = 上拉禁止
			注	1:必须使能全局RABPU 位才能使能单独的上拉功能。
				2:如果引脚处于输出模式,则自动禁止弱上拉器件(TRISA = 0)。
				3:当在配置字中引脚配置为MCLR时,RA3 上拉被使能,引脚配置为I/O时则被禁止。
				4:在XT、HS 和LP 振荡器模式下, WPUA<5:4> 总是读为1。
			*/

	IOCA = 0x00;//——电平变化中断PORTA 寄存器(地址:96h)
			/*
			— — IOCA5 IOCA4 IOCA3 IOCA2 IOCA1 IOCA0
			0 0   0     0     0     0     0     0
			bit 7-6 未用:读为0
			bit 5-0 IOCA<5:0>:电平变化中断PORTA 控制位
				1 = 使能电平变化中断
				0 = 禁止电平变化中断
			注1:要使各中断能够被识别,必须使能全局中断允许控制位(GIE)。
			*/

	
	TRISB = 0x40;//——TRISB三态寄存器(地址:86h或 186h)
			/*
			TRISB7 TRISB6 TRISB5 TRISB4 — — — —
			  0      1       0      0   0 0 0 0
			bit 7-4 TRISB<7:4>:PORTB 三态控制位
				1 = PORTB 引脚配置为输入(三态)
				0 = PORTB 引脚配置为输出
			bit 3-0 未用:读为0

			*/
	PORTB = 0x00;//——PORTB 寄存器(地址:06h 或106h)
			/*
			RB7 RB6 RB5 RB4 — — — —
			 0   0   0   0  0 0 0 0
			bit 7-4 RB<7:4>:PORTB I/O 引脚位
				1 = 端口引脚> VIH
				0 = 端口引脚< VIL
			bit 3-0 未用:读为0
			*/
	WPUB = 0x00;//——弱上拉PORTB 寄存器(地址:115h)
			/*
			WPUB7 WPUB6 WPUB5 WPUB4 — — — —
			  0     0     0     0   0 0 0 0
			bit 7-4 WPUB<7:4>:弱上拉寄存器位
				1 = 上拉使能
				0 = 上拉禁止
			bit 3-0 未用:读为0
			注	1:必须使能全局RABPU 位,从而使能单独的上拉功能。
				2:如果引脚处于输出模式(TRISB<7:4> = 0),则自动禁止弱上拉器件。
			*/

	IOCB = 0x00;//——电平变化中断PORTB 寄存器(地址:116h)
			/*
			IOCB7 IOCB6 IOCB5 IOCB4 — — — —
			  0     0     0     0
			bit 7-4 IOCB<7:4>:电平变化中断位
				1 = 使能电平变化中断
				0 = 禁止电平变化中断
			bit 3-0 未用:读为0

			*/
	
	TRISC = 0x36;//——TRISC三态寄存器(地址:87h或 187 h )
			/*
			TRISC7 TRISC6 TRISC5 TRISC4 TRISC3 TRISC2 TRISC1 TRISC0
			   0      0      1      1      0      1      1      0
			bit 7-0 TRISC<7:0>:PORTC 三态控制位
				1 = PORTC 引脚配置为输入(三态)
				0 = PORTC 引脚配置为输出
			*/
	PORTC = 0x00;//——PORTC 寄存器(地址:07h 或107h)
			/*
			RC7 RC6 RC5 RC4 RC3 RC2 RC1 RC0
			 0   0   0   0   0   0   0   0
			bit 7-0 RC<7:0>:PORTC 通用I/O 引脚位
				1 = 端口引脚> VIH
				0 = 端口引脚< VIL
			*/
	T1CON = 0x00;//——TIMER1 控制寄存器(地址:10h)
			/*
			T1GINV(1) TMR1GE(2) T1CKPS1 T1CKPS0 T1OSCEN T1SYNC TMR1CS TMR1ON
			   0         0         1       1       0       0      0      0
			bit 7 T1GINV:Timer1 门控反转位(1)
				1 = Timer1 门控反转
				0 = Timer1 门控未反转
			bit 6 TMR1GE:Timer1 门控使能位(2)
				如果TMR1ON = 0:
				该位被忽略
				如果TMR1ON = 1:
				1 = 如果Timer1 门控不处于激活状态,则开启Timer1
				0 = 开启Timer1
			bit 5-4 T1CKPS<1:0>:Timer1 输入时钟预分频比选择位
				11 = 1:8 预分频比
				10 = 1:4 预分频比
				01 = 1:2 预分频比
				00 = 1:1 预分频比
			bit 3 T1OSCEN:LP 振荡器使能控制位
				如果不带CLKOUT 振荡器的INTOSC 处于激活状态:
				1 = LP 振荡器使能作为Timer1 的时钟
				0 = LP 振荡器关闭
				否则:
				该位被忽略
			bit 2 T1SYNC:Timer1 外部时钟输入同步控制位
				TMR1CS = 1:
				1 = 不同步外部时钟输入
				0 = 同步外部时钟输入
				TMR1CS = 0:
				该位被忽略。Timer1 使用内部时钟。
			bit 1 TMR1CS:Timer1 时钟源选择位
				1 = 使用来自T1CKI 引脚(在上升沿)的外部时钟
				0 = 内部时钟(FOSC/4)
			bit 0 TMR1ON:Timer1 启动控制位
				1 = 使能Timer1
				0 = 停止Timer1
			注	1:T1GINV 位反转Timer1 门控逻辑,无论其来源为何。
				2: 要将T1G 引脚或C2OUT (选择哪个由T1GSS 位(CM2CON1<1>)控制)用作
			Timer1 门控源,必须将TMR1GE 位置1。

⌨️ 快捷键说明

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