pic单片机学习第二天-爱代码爱编程
PIC单片机学习第二天
首先补充一下其一的实际配置过程代码:
void Pin_manager_initialization(void) //???????
{
//输出数据锁存寄存器
LATA = 0x00; //??A??0
LATB = 0x00; //??B??0
LATC = 0x00; //??C??0
//方向控制寄存器
TRISA = 0x00; //??A?????0输出1输入
TRISB = 0x00; //??B?????
TRISC = 0x00; //??C?????
//模/数控制寄存器
ANSELA = 0x00; //??A???????0数字I/O口1模拟输入口
ANSELB = 0x00; //??B???????
ANSELC = 0x00; //??C???????
//弱上拉寄存器--这个寄存器不是所有端口都有的,所以可有可无
WPUA = 0x00; //??A????0失能1使·1能
WPUB = 0x00; //??B????
//选择寄存器
OPTION_REGbits.nWPUEN = 0x00; //?WPUx???????这个可有可无
}
还有一种写法:大家看到代码的时候可能都有这个疑惑,下面解答一下;上面是按字节进行配置I/O,比较迅速;下面是按位进行配置,比较一对一;我刚开始见到这种也是很懵逼,怎么还有俩配置方式,后来进行学习才明白的。
void Pin_manager_initialization(void) //???????
{
LATAbits.LATA0 = 0 ;
LATAbits.LATA1 = 0 ;
LATBbits.LATB4 = 0 ;
TRISAbits.TRISA1 = 0;
}
以上就是对于I/O口最基本的配置了;
接下来说一下TMR1定时器,TMR1定时器是一个16位定时器,由两个8位寄存器 TMRH 和TRMRL组成。
看下图,TME1控制寄存器----T1CON的介绍;
首先就要初始化设置 T1CON:TIMER1控制寄存器,其实应该最重要的就是设置分频比和开启TMR1定时器了,根据手册可以看出,T1CON的bit0是TMR1的使能位,bit5-4是用来设置预分频比的;我们只需要将对应位对照手册进行写1操作,就可以进行配置了;
值得一提的是bit7-6,用于对TMR1时钟源选择,00=TIM1时钟源为指令时钟(FOSC/4),这一点千万注意,我自己在这里犯错了,刚开始不明白指令时钟和系统时钟;
最重要的是,如何初始化,即对于TMRH 和TRMRL这两个寄存器如何配置,这两个寄存器涉及到我们所想要的定时时间,这两个寄存器里面存放的是TMR1定时器的初始值,也可以说是重装载值,在这里可以把二者看成一个意思;
说到这里就要说明一下TMRH 和TRMRL这两个寄存器是干嘛的了?它俩组成一个16位二进制数,它可以理解为STM32单片机里面的重装载值(arr);
设置TMR1定时器的初始值,初始值的作用即是设置TMR1的溢出时间;
下面就要说明一下这个初始值如何计算了?
先举个例子:
·目标期望为一次定时为0.5s!!
·系统时钟选择4MHZ,预分频比为1:8;
系统时钟周期=1/4MHZ; 0.25us
指令时钟周期= 4 × 系统时钟周期; 1us
预分频器溢出周期= 预分频比 × 指令时钟周期 8us
2个8位的寄存器,所以是 256 × 256
最大定时时间 = 8 * 256 * 256 = 524288us
初始值的时间 = 最大 - 目标期望定时时间
= 524288us - 5000000us
= 24288us
初始值 = 初始值时间 / 预分频器溢出的周期
=24288 / 8 = 3036
将3036 转化16进制数为0x0BDC
所以将TMR1H=0x0B;
TMR1L=0xDC写进去即可;
可以参考下下图: