void Init_Interrupt(void) // 中断初始化
{
// INTCON = 0x00;
// TMR0 = TIMER0_COUNT;
// OPTION = TIMER0_CONFIG; // T0定时器设置200uS
OPTION = 0x0F; // 如用T1则用此句关掉上3句
/* PS0 OPTION,0 //
PS1 OPTION,1 //
PS2 OPTION,2 //
PSA OPTION,3 // 预分频分配 1-给WDT,0-给Timer0
T0SE OPTION,4 // TMER0时钟边沿选择 1-高至低,0-低至高 递增计数
T0CS OPTION,5 // TMER0时钟源选择, 1-T0CKL或CPSOSC信号,0-内部时钟(Fosc/4)
INTEDG OPTION,6 // 中断边沿选择, 1-上升沿,0-下降沿,触发
RBPU OPTION,7 // PORTB 弱上拉选择 1-使能,0-禁止,
*/
// INTEDG = true; // 上升沿中断
INTEDG = false; // 下降沿中断
T1CON = 0x00; // Timer1控制寄存器
/* TMR1ON T1CON,0 // Timer1使能位 1-使能,0-禁止
T1SYNC T1CON,2 // Timer1外部时钟输入同步控制位
T1OSCEN T1CON,3 // LP振荡使能控制位 1-使能,0-禁止
T1CKPS0 T1CON,4 //
T1CKPS1 T1CON,5
TMR1CS0 T1CON,6 //
TMR1CS1 T1CON,7
TMR1CS1 TMR1CS0 T1OSCEN
1 1 X // 时钟源为容性传感振荡器
0 1 X // 时钟源为系统时钟(Fosc)
0 0 X // 时钟源为指令时钟(Fosc/4)
1 0 0 // 时钟源为T1CKI引脚的外部时钟(上升沿触发计数)
1 0 1 // 时钟源为T1OSC/T1OSO引脚上的晶振
TMR1CS1 TMR1CS0 T1SYNC
0 X 0 // 将外部时钟输入与系统时钟同步(Fosc)
0 X 1 // 不同步外部时钟输入
T1CKPS1 T1CKPS0
0 0 // 1:1预分频比
0 1 // 1:2预分频比
1 0 // 1:4预分频比
1 1 // 1:8预分频比
*/
TMR1L = T2msL;
TMR1H = T2msH;
TMR1ON = true; // 开T1计数
T2CON = 0x00; // Timer2控制寄存器
/* T2CKPS0 T2CON,0 // 时钟预分频选择位
T2CKPS1 T2CON,1 //
TMR2ON T2CON,2 // Timer2使能位 1-使能,0-禁止
TOUTPS0 T2CON,3
TOUTPS1 T2CON,4 //
TOUTPS2 T2CON,5
TOUTPS3 T2CON,6 //
未用 T2CON,7
TMR1CS1 TMR1CS0
0 0 // 预分频比为 1
0 1 // 预分频比为 4
1 0 // 预分频比为 16
TOUTPS3 TOUTPS2 TOUTPS1 TOUTPS0
0 0 0 0 // 后分频比为 1:1
0 0 0 1 // 后分频比为 1:2
0 0 1 0 // 后分频比为 1:3
1 1 1 1 // 后分频比为 1:16
*/
TMR2 = 0x00;
PR2 = T100us;
// TMR2ON = true; // 开T2计数
// PORTB = 0x04;
//-----------------------------------------------------------------------------
TRISC |= 0xC0; //断开两个IO。
/* TXD8 TXSTA,0
TX9D TXSTA,0 // 1=发送第9位 0=不发送
TRMT TXSTA,1 // 1=发送移位寄存器空 0=满
BRGH TXSTA,2 // 1=高速 0=低速
SYNC TXSTA,4 // 1=同步 0=异步
TXEN TXSTA,5 // 1=使能发送功能 0=禁止
TX8_9 TXSTA,6 // 1=9位 0=8位
/_TX8 TXSTA,6
TX9 TXSTA,6
CSRC TXSTA,7 // 同步时钟选择 1=内部 0=外部
*/
TXSTA = 0x00; // 不选择9位数据发送,
TXEN = true; //使能串口发送;
BRGH = true; //选择串口为异步模式,低波特率
/* RX9D RCSTA,0
RCD8 RCSTA,0
OERR RCSTA,1
FERR RCSTA,2
CREN RCSTA,4 // 1=允许连续接收 0=禁止连续接收功能
SREN RCSTA,5 // 1=使能单字节接收功能 0=禁止 异步模式下此位未用
RC8_9 RCSTA,6 // 1=9位 0=8位
/_RC8 RCSTA,6
RC9 RCSTA,6
RX9 RCSTA,6
SPEN RCSTA,7 // 1=使能串口工作 0=禁止
*/
RCSTA = 0x00;
SPEN = true; // 开串口使能位;
CREN = true; //不选择9位数据;开启连续接收;取消地址匹配
SPBRG = UART_BAUD;
/* PIC16F73
TMR1IE PIE1,0 // 1=允许TMR1溢出中断
TMR2IE PIE1,1 // 1=允许TMR2溢出中断
CCP1IE PIE1,2 // 1=允许CCP1模块产生中断
SSPIE PIE1,3 // 串口SSP中断允许位
TXIE PIE1,4 // 1=允许SSP发送产生中断
RCIE PIE1,5 // 1=允许SSP接收产生中断
ADIE PIE1,6 // 1=允许AD中断
PSPIE PIE1,7 // 1=允许并口中断 0=屏蔽 只有40脚CPU有
*/
PIE1 = 0x00;
/* PIC16F723
TMR1IE PIE1,0 // Timer1中断允许位 1-允许,0-禁止
TMR2IE PIE1,1 // TMR2与PR2匹配中断位 1-允许,0-禁止
CCP1IE PIE1,2 // CCP1中断允许位 1-允许,0-禁止
SSPIE PIE1,3 // 同步串口(SSP)中断允许位 1-允许,0-禁止
TXIE PIE1,4 // USART发送中断允许位 1-允许,0-禁止
RCIE PIE1,5 // RCIE接收中断允许位 1-允许,0-禁止
ADIE PIE1,6 // AD转换器中断允许位 1-允许,0-禁止
TMR1GIE PIE1,7 // Timer1门控中断允许位 1-允许,0-禁止
*/
TXIF = false;
TXIE = false; // 串口发送中断位使能 1-允许,0-禁止
RCIF = false;
RCIE = true; // 串口接收中断位使能
TMR1IE = true; // 开T1中断
TMR2IE = true; // 开T2中断
/* RBIF INTCON,0 // RB端口状态变化中断标志位,保持,置位,只有通过读端口消除变化,然后用软件清0
INTF INTCON,1 // 外中断RB0/INT标志
T0IF INTCON,2 // 定时器0溢出中断标志,当被置位时,要用软件清0
RBIE INTCON,3 // RB端口状态变化中断允许位 1=允许
INTE INTCON,4 // 外中断RB0/INT允许
T0IE INTCON,5 // 定时器0溢出中断允许
PEIE INTCON,6 // 外围接口中断允许
GIE INTCON,7 // 全局中断允许
*/
INTCON = 0x00;
// T0IF = false;
// T0IE = true;
PEIE = true; // 外围接口中断允许
INTF = false;
INTE = true; // 外中断RB0/INT标志
//-----------------------------------------------------------------------------
#if PIC16F723
CPSCON0 =0x00; // 容性传感控制寄存器0
/* T0XCS CPSCON0,0 // Timer0外部时钟源选择位
CPSOUT CPSCON0,1 // 容性振荡器状态位 1-拉电流,0-灌电流
CPSRNG0 CPSCON0,2 //
CPSRNG1 CPSCON0,3
CPSON CPSCON0,7 // 容性传感模块使能位 1-工作,0-关闭
CPSRNG1 CPSRNG0
0 0 // 振荡器关闭
0 1 // 振荡器处于低量程。充/放电标称值0.1uA
1 0 // 振荡器处于中量程。充/放电标称值1.2uA
1 1 // 振荡器处于高量程。充/放电标称值18uA
*/ CPSON = false; // 禁止容性传感模块工作
#endif
} |