#include <iostm8s207s8.h>
#include <intrinsics.h>
typedef unsigned char U8
typedef unsigned int U16
typedef unsigned long U32
U16 cnt=0
//----------------------------initial gpio
void GPIO_init(void)
{
PE_DDR=0X07
PE_CR1=0X07
PE_CR2=0X00
}
//--------------------------clk initial
void CLK_init(void)
{
CLK_ECKR |=0X1 //开启外部时钟
while(!(CLK_ECKR&0X2)) //等待外部时钟rdy
CLK_CKDIVR &= 0XF9 //CPU 2分频
CLK_SWR = 0XB4 //选择外部时钟
while(!(CLK_SWCR&0X8)) //这里要等
CLK_SWCR |=0X2 //使能外部时钟
}
//-----------------------------TIMER2 init
void TIM2_init()
{
TIM2_PSCR |=0X04 //DIV16 1.333333US -> 外部晶振12mhz
TIM2_IER |= 0X01 //UIE允许中断
TIM2_ARRH = 0X1d
TIM2_ARRL = 0X4c
// TIM2_EGR |=0X01//UG使能
TIM2_CR1 |= 0X85 //APPE,URS,CEN使能
}
//----------------------------------------FUNCTION
//-------------------initial device
void DEVICE_init(void)
{
CLK_init()
GPIO_init()
TIM2_init()
}
void delay_nms(unsigned int n)
{
unsigned int i
for(n>0n--)
{
for(i=0i<8000i++)
}
}
//-----------------------------------interrupt
//#define TIM2_OVR_UIF_vector 0x0F 定时2溢出中断 10ms溢出中断
#pragma vector = TIM2_OVR_UIF_vector
__interrupt void TIM2_OVR_Hander(void)
{
TIM2_SR1 &=~0x01//清标志
cnt++
}
//-------------------main
void main(void)
{
__disable_interrupt()
DEVICE_init()
__enable_interrupt()
while(1)
{
if(cnt==100)
{
cnt=0
PE_ODR^=0X01
}
}
}
简单的啊。思路:8个LED接在一个口,如P1口。再将另外两个LED接在另外某个口(如P2)的两个引脚。然后将两个按键分别接在空闲的口的两个引脚。按下一个按键,使8个LED的输出状态变化,0xFE循环移位实现,LED低电平亮。另外的按键按下,两个LED状态翻转。
虽然是两年前的帖子,我还是回复下。
release和debug运行结果不同,一般是优化的问题。如果写程序的时候没有考虑优化问题,那就把所有的优化去试试。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)