?? main.c
字號:
#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;//發(fā)射時頻率為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>:內(nèi)部振蕩器頻率選擇位
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:振蕩器起振超時狀態(tài)位(1)
1 = 器件運行在FOSC<2:0> 定義的外部時鐘之下
0 = 器件運行在內(nèi)部振蕩器之下(HFINTOSC 或LFINTOSC)
bit 2 HTS:HFINTOSC (高頻——8 MHz 到125 kHz)狀態(tài)位
1 = HFINTOSC穩(wěn)定
0 = HFINTOSC不穩(wěn)定
bit 1 LTS:LFINTOSC (低頻——31 kHz)狀態(tài)位
1 = LFINTOSC穩(wěn)定
0 = LFINTOSC不穩(wěn)定
bit 0 SCS:系統(tǒng)時鐘選擇位
1 = 內(nèi)部振蕩器用于系統(tǒng)時鐘
0 = 時鐘源由FOSC<2:0> 決定
注 1: 雙速啟動且選取LP、XT 或HS 為振蕩器模式時,或者故障保護模式使能時,該位
將復(fù)位為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:中斷觸發(fā)邊沿選擇位
1 = RA2/AN2/T0CKI/INT/C1OUT 引腳的上升沿觸發(fā)中斷
0 = RA2/AN2/T0CKI/INT/C1OUT 引腳的下降沿觸發(fā)中斷
bit 5 T0CS:TMR0 時鐘源選擇位
1 = RA2/AN2/T0CKI/INT/C1OUT 引腳上的電平跳變
0 = 內(nèi)部指令周期時鐘(CLKOUT)
bit 4 T0SE:TMR0 信號源邊沿選擇位
1 = 在RA2/AN2/T0CKI/INT/C1OUT 引腳信號從高至低跳變時,遞增計數(shù)
0 = 在RA2/AN2/T0CKI/INT/C1OUT 引腳信號從低至高跳變時,遞增計數(shù)
bit 3 PSA:預(yù)分頻器分配控制位
1 = 預(yù)分頻器分配給WDT
0 = 預(yù)分頻器分配給Timer0 模塊
bit 2-0 PS<2:0>:預(yù)分頻器倍率選擇位
*/
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:外設(shè)中斷允許位
1 = 使能所有非屏蔽外設(shè)中斷
0 = 禁止所有外設(shè)中斷
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 外部中斷已經(jīng)發(fā)生(必須用軟件清零)
0 = RA2/INT 外部中斷沒有發(fā)生
bit 0 RABIF: PORTA/PORTB 電平變化中斷標志位
1 = 至少有一個PORTA 或PORTB 通用I/O 引腳狀態(tài)發(fā)生變化時(必須用軟件清零)
0 = PORTA 或PORTB 通用I/O 引腳狀態(tài)均未發(fā)生變化
注 1:IOCA 或IOCB 寄存器也必須被使能。
2: 當Timer0 計數(shù)出現(xiàn)計滿返回時, T0IF 位將被置1。Timer0 計數(shù)值在復(fù)位時不變,
而且應(yīng)在清除T0IF 位之前對其進行初始化。
3: 包含ULPWU 中斷。
*/
PIE1 = 0x00;//——外設(shè)中斷允許寄存器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 轉(zhuǎn)換器中斷允許位
1 = 使能
0 = 禁止
bit 5 RCIE:EUSART 接收中斷允許位(2)
1 = 使能
0 = 禁止
bit 4 TXIE:EUSART 發(fā)送中斷允許位(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;//——外設(shè)中斷允許寄存器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;//——外設(shè)中斷請求寄存器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 轉(zhuǎn)換器中斷標志位
1 = A/D 轉(zhuǎn)換已完成(必須用軟件清零)
0 = A/D 轉(zhuǎn)換未完成
bit 5 RCIF:EUSART 接收中斷標志位(1)
1 = EUSART 接收緩沖器滿(通過讀取RCREG 清零)
0 = EUSART 接收緩沖器未滿
bit 4 TXIF: EUSART 發(fā)送中斷標志位(1)
1 = EUSART 發(fā)送緩沖器空(通過寫入TXREG 清零)
0 = EUSART 發(fā)送緩沖器滿
bit 3 SSPIF:同步串行口(SSP)中斷標志位(1)
1 = 發(fā)送/ 接收完成(必須用軟件清零)
0 = 等待發(fā)送/ 接收
bit 2 CCP1IF:CCP1 中斷標志位(2)
捕捉模式
1 = TMR1寄存器發(fā)生捕捉中斷(必須用軟件清零)
0 = TMR1寄存器未發(fā)生捕捉中斷
比較模式
1 = TMR1寄存器發(fā)生比較匹配中斷(必須用軟件清零)
0 = TMR1寄存器未發(fā)生比較匹配中斷
PWM 模式
未在此模式中使用。
bit 1 TMR2IF:TMR2 和PR2 中斷標志位(2)
1 = 發(fā)生TMR2 和PR2 匹配中斷(必須用軟件清零)
0 = 未發(fā)生TMR2 和PR2 匹配中斷
bit 0 TMR1IF:TMR1 溢出中斷標志位
1 = TMR1寄存器溢出(必須用軟件清零)
0 = TMR1寄存器未溢出
注 1: 僅限PIC16F687/PIC16F689/PIC16F690。
2: 僅限PIC16F685/PIC16F690。
*/
PIR2 = 0x00;//——外設(shè)中斷請求寄存器2 (地址:0Dh)
/*
OSFIF C2IF C1IF EEIF — — — —
0 0 0 0 0 0 0 0
bit 7 OSFIF:振蕩器故障中斷標志位
1 = 系統(tǒng)振蕩器故障,時鐘輸入切換至INTOSC (必須用軟件清零)
0 = 系統(tǒng)時鐘工作正常
bit 6 C2IF:比較器2 中斷標志位
1 = 比較器輸出(C2OUT 位)已經(jīng)改變(必須用軟件清零)
0 = 比較器輸出(C2OUT 位)沒有變化
bit 5 C1IF:比較器1 中斷標志位
1 = 比較器輸出(C1OUT 位)已經(jīng)改變(必須用軟件清零)
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:上電復(fù)位狀態(tài)位
1 = 無上電復(fù)位發(fā)生
0 = 發(fā)生上電復(fù)位(上電復(fù)位發(fā)生后,必須用軟件置1)
bit 0 BOR:欠壓復(fù)位狀態(tài)位
1 = 無欠壓復(fù)位發(fā)生
0 = 發(fā)生欠壓復(fù)位(欠壓復(fù)位發(fā)生后,必須用軟件置1)
注1: 配置字寄存器中的BOREN<1:0> = 01 時,該位控制BOR。
*/
TRISA = 0x3B;//——TRISA 三態(tài)寄存器(地址: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 三態(tài)控制位
1 = PORTA 引腳配置為輸入(三態(tài))
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三態(tài)寄存器(地址:86h或 186h)
/*
TRISB7 TRISB6 TRISB5 TRISB4 — — — —
0 1 0 0 0 0 0 0
bit 7-4 TRISB<7:4>:PORTB 三態(tài)控制位
1 = PORTB 引腳配置為輸入(三態(tài))
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三態(tài)寄存器(地址: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 三態(tài)控制位
1 = PORTC 引腳配置為輸入(三態(tài))
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 門控反轉(zhuǎn)位(1)
1 = Timer1 門控反轉(zhuǎn)
0 = Timer1 門控未反轉(zhuǎn)
bit 6 TMR1GE:Timer1 門控使能位(2)
如果TMR1ON = 0:
該位被忽略
如果TMR1ON = 1:
1 = 如果Timer1 門控不處于激活狀態(tài),則開啟Timer1
0 = 開啟Timer1
bit 5-4 T1CKPS<1:0>:Timer1 輸入時鐘預(yù)分頻比選擇位
11 = 1:8 預(yù)分頻比
10 = 1:4 預(yù)分頻比
01 = 1:2 預(yù)分頻比
00 = 1:1 預(yù)分頻比
bit 3 T1OSCEN:LP 振蕩器使能控制位
如果不帶CLKOUT 振蕩器的INTOSC 處于激活狀態(tài):
1 = LP 振蕩器使能作為Timer1 的時鐘
0 = LP 振蕩器關(guān)閉
否則:
該位被忽略
bit 2 T1SYNC:Timer1 外部時鐘輸入同步控制位
TMR1CS = 1:
1 = 不同步外部時鐘輸入
0 = 同步外部時鐘輸入
TMR1CS = 0:
該位被忽略。Timer1 使用內(nèi)部時鐘。
bit 1 TMR1CS:Timer1 時鐘源選擇位
1 = 使用來自T1CKI 引腳(在上升沿)的外部時鐘
0 = 內(nèi)部時鐘(FOSC/4)
bit 0 TMR1ON:Timer1 啟動控制位
1 = 使能Timer1
0 = 停止Timer1
注 1:T1GINV 位反轉(zhuǎn)Timer1 門控邏輯,無論其來源為何。
2: 要將T1G 引腳或C2OUT (選擇哪個由T1GSS 位(CM2CON1<1>)控制)用作
Timer1 門控源,必須將TMR1GE 位置1。
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -