📄 initial.c
字号:
#include <pic.h>
persistent unsigned int pwmold,setdataC;
unsigned int pwmhigh,pwmlow,setdataA;
unsigned char CCPXYNEW;
//CCP1模块的PWM工作方式初始化子程序
void CCP1INIT1()
{
CCPR1L=0X7F;
//CCPR1L=pwm2;
setdataC=0X01E0;
setdataA=0X01FF;
CCP1CON=0X3C; //设置CCP1模块为PWM工作方式,且其工作
//循环的低2位为11,高8位为01111111=7F//
INTCON=0X00; //禁止总中断和外围中断//
PR2=0XFF; //设置PWM的工作周期//
TRISC=0XFB; //设置CCP1引脚为输出方式//
}
void CCP1INIT2()
{
setdataC=0X01FC;
setdataA=pwmold;
pwmlow=pwmold&0X0003; //提取pwm的低两位。
pwmhigh=pwmold>>2; //右移2位,提取pwm高8位。
pwmlow=pwmlow<<4; //新的CCP1X:CCP1Y
CCPXYNEW=CCP1CON&0XCF; //清CCP1X:CCO1Y
CCPXYNEW=CCPXYNEW|pwmlow;//获取新的CCP1CON,存储于CCPXYNEW中。
// CCPR1L=0X7F;
CCPR1L=pwmhigh;
//CCP1CON=0X3C; //设置CCP1模块为PWM工作方式,且其工作
CCP1CON=CCPXYNEW; //循环的低2位为11,高8位为01111111=7F
INTCON=0X00; //禁止总中断和外围中断
PR2=0XFF; //设置PWM的工作周期
TRISC=0XFB; //设置CCP1引脚为输出方式
}
//串行通信初始化子程序
void sciint()
{
SPBRG=0X77; ///将传输的波特率设为约9 600位/秒(20M晶振 0x81),(18.432M晶振 0x77)
TXSTA=0X04; ///选择异步高速方式传输8位数据
RCSTA=0X80; ///允许同步串行口工作
TRISC6=1;
TRISC7=1; ///将RC6、RC7设置为输入方式,对外部呈高阻状态
}
//A/D转换初始化子程序
void adinitial()
{
ADCON0=0x89; //选择A/D通道为RA1,且打开A/D转换器
//在工作状态,使A/D转换时钟为32Tosc
ADCON1=0X84; //转换结果右移,及ADRESH寄存器的高6位为"0"
//把RA1口设置为模拟量输入方式
//ADIE=1; //A/D转换中断允许
//PEIE=1; //外围中断允许
TRISA1=1; //设置RA1为输入方式
}
void i2c_init()
{
SSPSTAT=0x00;
TRISC=0xD8; //RC3,RC4 input mode
SSPADD=12; //计算波特率,clock=OSC/4(SSPADD+1)
SSPIE=0;
SSPCON=0x28; //IIC使能,主模式
}
/////////////////////////////////////////////////////////////////////
void slavei2c_init()
{
SSPSTAT=0X00; //
TRISC=0xD8; //RC3,RC4 input mode
SSPADD=0x7E; //从机地址-0X7E
SSPIE=1; //SSP中断使能
SSPCON=0X36; //7位地址,slave-mode,enable-clock,SSP模块使能
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -