额,首先拿定时器开刀。仍旧是led闪烁为实验现象。但是实现的方法使用使用时钟中断和timer对比两种方法。
首先看一下ld1-ld4管脚控制。
led部分
对开发板的具体管脚说明,手册里面很清楚:
因此设置PORTB的第10-13(对应led1-led4)为output,对应为为1即可点亮。
timer部分
timer的编程可以使用库函数:
还是自己动手吧
查看datasheet,timer1的框图如下:
主要是T1CON时钟的设定。
#include <p32xxxx.h>
/*
* delaytime设置的是timer中的上限值,当timer到达这个值就将其清零,
* 从而达到反复计时的效果
*/
#define DELAY 300
void timer_init()
{
//T1CON |= 1;//T1CON[15]=1,ennable
T1CON = 0x8030;
}
void main_init()
{
timer_init();
TRISB = 0;//LED1-4 output
AD1PCFG = 0xffff;//all PORTB as digital
PORTB = 0xff;
PR1 = 0xffff;//set period register to max
}
void delay(int i)
{
TMR1 = 0;
while(TMR1 < i)
{
;
}
}
void delay4(int num)
{
int i = 0;
while(i < num){
i++;
}
}
void delay1(int i)
{
while(i>0)
{
i--;
}
}
main()
{
int j;
int delaytime = DELAY;
main_init();
while(1)
{
//all leds on
//PORTB = 0xff;
PORTBSET |= ((1 << 10) | (1 << 11) | (1 << 13));
delay(delaytime);
//all leds off
PORTB = 0;
// PORTB &= ( (~(1 << 10)) & (~(1 << 11)) & (~(1 << 12)) & (~(1 << 13)) );
delay(delaytime);
}
}