分类: C/C++
2015-03-31 17:09:59
一、寄存器
1、IO口 3个
2、PxSEL 功能选择
0普通IO(输入输出,外部中断)
1 外设(串口和定时器)
3、PxDIR方向选择
0输入,1输出
4、Px数据寄存器,可以位寻址
5、P1INP 电路上拉或者下拉 0开启 1三态
6、IENI Px口使能
7、PxIEN Px中断掩码(掩码就是屏蔽,相当于一个开关)
8、PICTL 中断方式选择 0上升沿 1下降沿
9、PxIFG 中断标志位,需要手动清零
二、系统时钟:
1、CLK0NCMD时钟控制寄存器,用于选择系统工作的频率,复位16M
2、OSC选择系统时钟源 0是32M外部, 1是16M内部
3、CLKSPD 始终速度,是真正的系统工作频率,不能高于OSC
三、中断
1、写法:
#pragma vector = P0INT_VECTOR
//格式:#pragma vector = 中断向量,紧接着是中断处理程序
__interrupt void P0_ISR(void)
{
清除中断标志,否则系统会一直停留在中断中
}
2、向量
/* ------------------------------------------------------------------------------------------------
* Interrupt Vectors
* ------------------------------------------------------------------------------------------------
*/
RFERR_VECTOR /* RFID模块串口中断 */
ADC_VECTOR /* AD转换 */
URX0_VECTOR /* 串口0接收中断 */
URX1_VECTOR /* 串口1接收中断 */
ENC_VECTOR /* AES Encryption/Decryption Complete */
ST_VECTOR /* 睡眠定时器比较中断 */
P2INT_VECTOR /* P2外部中断 */
_VECTOR /* UTX0串口0接收中断 */
DMA_VECTOR /* DMA接收中断 */
T1_VECTOR /* 定时器1中断 */
T2_VECTOR /* Timer 2 (MAC Timer) */
T3_VECTOR /* 定时器3中断 */
T4_VECTOR /* 定时器4中断 */
P0INT_VECTOR /* P0外部中断 */
UTX1_VECTOR /* 串口1发送中断 */
P1INT_VECTOR /*P1外部中断 */
RF_VECTO /* RFID外部中断 */
WDT_VECTOR /* 看门狗溢出中断 */
四、定时器
输入捕捉:可以用来捕获外部事件,并为其赋予时间标记以说明此事件的发生时刻。 外部事件发生的触发信号由单片机中对应的引脚输入(具体可以参考单片机的datasheet),也可以通过单元来实现。 时间标记可用来计算频率,及信号的其他特征,以及为事件创建日志
输出比较:中计数在初始化完后会自动的计数。从计数到top。并且有不同的工作模式。 另外还有个比较寄存器。一旦计数寄存器在从bottom到top计数过程中与比较寄存器匹配则会产生比较中断(比较中断使能的情况下)。 然后根据不同的工作模式计数寄存器将清零或者计数到top值。
1、定时器1
2、定时器2
3、定时器3
五、串口
1、串口1
2、串口2
六、看门狗
,又叫 watchdog timer,是一个电路,一般有一个输入,叫(kicking the dog or service the dog),一个输出到MCU的RST端,MCU正常工作的时候,每隔一段时间输出一个信号到喂狗端,给 WDT 清零,如果超过规定的时间不喂狗,(一般在程序跑飞时),WDT 定时超过,就会给出一个到MCU,使MCU复位. 防止MCU死机. 看门狗的作用就是防止程序发生死循环,或者说程序跑飞。
七、ADC模数转换
按键:
/**************************************/
/* WeBee团队 */
/* Zigbee学习例程 */
/*例程名称:外部中断 */
/*建立时间:2012/04/24 */
/*描述:按键S1外部中断方式改变LED1状态
**************************************/
#include
uint unsigned int
uchar unsigned char
//定义控制LED灯的端口
LED1 P1_0 //定义LED1为P1.0口控制
KEY1 P0_4 //中断口
//函数声明
void Delayms(uint); //延时函数
void InitLed(void); //初始化P1口
void KeyInit(); //按键初始化
uchar KeyValue=0;
/****************************
//延时函数
*****************************/
void Delayms(uint xms) //i=xms 即延时i毫秒
{
uint i,j;
for(i=xms;i>0;i--)
for(j=587;j>0;j--);
}
/****************************
LED初始化程序
*****************************/
void InitLed(void)
{
P1DIR |= 0x01; //P1_0、P1_1定义为输出
P1INP &= 0xfe; //打开上拉功能
P1SEL &= 0Xfe; //将P10设置为普通IO
LED1 = 1; //LED1灯熄灭
}
/****************************
KEY初始化程序--外部中断方式
*****************************/
void InitKey()
{
P0IEN |= 0X10; //P04 设置为中断方式
PICTL &=~ 0X10; // 下降沿触发
IEN1 |= 0X20; // 允许P0口中断;
P0IFG = 0x00; // 初始化中断标志位
EA = 1;
}
/****************************
中断处理函数
*****************************/
#pragma vector = P0INT_VECTOR
//格式:#pragma vector = 中断向量,紧接着是中断处理程序
__interrupt void P0_ISR(void)
{
Delayms(10); //去除抖动
LED1=~LED1; //改变LED1状态
P0IFG = 0; //清中断标志
P0IF = 0; //清中断标志
}
/***************************
主函数
***************************/
void main(void)
{
InitLed(); //调用初始化函数
InitKey();
while(1)
{
}
}