不如再贴上代码吸引人
/************************************************************************************
* File: main.c
* Purpose: Cortex-M0/0+/1 main file.
* Replace with your code.
* Date: 05 July 2013
* Info: If __NO_SYSTEM_INIT is defined in the Build options,
* the startup code will not branch to SystemInit()
* and the function can be removed
************************************************************************************/
/*---------------------------------------------------------------------------------------------------------*/
/* */
/* Copyright(c) 2010 Nuvoton Technology Corp. All rights reserved. */
/* */
/*---------------------------------------------------------------------------------------------------------*/
/***************************************************************************************
本代码演示GPIO功能,P0/1/2/3会输出高低电平
****************************************************************************************/
void SystemInit (void) {}
#include "common.h"
#define P0_MODE 0x5555
#define P1_MODE 0x5555
#define P2_MODE 0x5555
#define P3_MODE 0x5555
//void TMR0_Delay1ms(uint32_t ulCNT);
//void Timer0_Init(void);
/***************************************************************************************
参数 : ulCNT, 延迟时间,毫秒
描述 用Timer0定时
****************************************************************************************/
void TMR0_Delay1ms(uint32_t ulCNT)
{
TCMPR0 = 12000; //12MHz/96000 = 0.125KHz
TCSR0 |= CEN | TMR_IE; //启动定时器Timer0并使能Timer0中断
while (ulCNT != 1)
{
while((TISR0&TMR_TIF) != TMR_TIF); //定时时间到否?
TISR0 |= TMR_TIF; //定时器清标志位
ulCNT--;
}
TCSR0 &= ~CEN; //停止Timer0定时器
}
/***************************************************************************************
描述 : 初始化定时器Timer0,周期模式
****************************************************************************************/
void Timer0_Init()
{
APBCLK |= TMR0_CLKEN; //使能APB时钟
CLKSEL1 = CLKSEL1 & (~TM0_CLK) | TM0_12M; //选择外部晶振作为定时器时钟源
//CLKSEL1 |= TM0_12M;
TCSR0 |= CRST; //复位定时器
TCSR0 &= 0xFFFFFF00 ; //时钟不分频
TCSR0 = TCSR0 & (~TMR_MODE) | MODE_PERIOD; //周期模式
//TCSR0 |= MODE_PERIOD;
}
int main(void)
{
Un_Lock_Reg(); //解锁被保护的寄存器位,以便用户访问
PWRCON |= XTL12M_EN; //使能外部12MHz晶振
while((CLKSTATUS & XTL12M_STB) == 0); //等12M晶振时钟稳定
CLKSEL0 = (CLKSEL0 & (~HCLK)) | HCLK_12M; //选外部12MHz晶振为系统时钟
//CLKSEL0 |= HCLK_12M;
Lock_Reg(); //重新锁被保护的寄存器位
P0_PMD = P0_MODE; //配置P0口所有引脚为输出模式
P1_PMD = P1_MODE; //配置P1口所有引脚为输出模式
P2_PMD = P2_MODE; //配置P2口所有引脚为输出模式
//P3_PMD = P3_MODE; //配置P3口所有引脚为输出模式
P3_PMD |= (1<<12); //p3.6 out mode
//P3_DOUT |= (1<<6);
Timer0_Init();
//P3_DOUT = 0x00;
while(1)
{
P0_DOUT = 0x00; //P0口所有引脚输出0
P1_DOUT = 0x00; //P1口所有引脚输出0
P2_DOUT = 0x00; //P2口所有引脚输出0
//P3_DOUT = 0x00; //P3口所有引脚输出0
P3_DOUT |= (1<<6);
TMR0_Delay1ms(500);
P0_DOUT = 0xFF; //P0口所有引脚输出1
P1_DOUT = 0xFF; //P1口所有引脚输出1
P2_DOUT = 0xFF; //P2口所有引脚输出1
P3_DOUT &= ~(1<<6);
//P3_DOUT = 0xFF; //P3口所有引脚输出1
TMR0_Delay1ms(500);
}
return 0;
}
|