代码编织梦想

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写进去即可;

可以参考下下图:

PIC单片机之定时器(TMR1)_pic18f452tmr1初始化设计步骤_superanters的博客-CSDN博客

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_45796666/article/details/131026657