优化了一下这个点灯程序。
/*
SC95F8617 test .
GPIO说明
PxCON=0x00;设置为高阻输入模式
PxCON=0xFF;设置为推挽输出模式
PxPH = 0xFF;设置上拉电阻
*/
#include"SC95F861x_C.H"
#include"stdio.h"
#define LEDS P0
void delay(void);
void GPIO_Init(void);
void Timer0_Init(void);
void main(void)
{
unsigned char i;
GPIO_Init();
Timer0_Init();
while(1)
{
for(i=0;i<8;i++)
{
LEDS=(1<<i);
delay();
}
}
}
void delay(void)
{
//设置为320,延时0.5S,设置到80即延时0.125S,8个IO口跑马灯则每个IO的闪烁频率刚好是1Hz
int i=80;
TR0=1;
while(i--)
{
TL0 = (65536 - 50000)%256; //时钟为Fsys,则溢出时间=50000*(1/Fsys);
TH0 = (65536 - 50000)/256;
while(TF0==0);
TF0=0;
}
TR0=0;
}
void GPIO_Init(void)
{
P0CON=0xFF;
}
void Timer0_Init(void)
{
/*
TCON,定时器控制寄存器, |TF1|TR1|TF0|TR0|---|IE1|-|IE0|-|
TMOD,定时器工作模式寄存器,|- |C/T1|M11|M01|---|C/T0|M10|M00|
模式0:13位定时器计数器模式
模式1:16位定时器计数器模式
模式2:8位自动重载模式
模式3:两个8位定时器计数器模式
*/
//设置定时器0工作模式1
TMOD |= 0x01;
//设置定时器0时钟源不分频,32MHz;默认是12分频
TMCON |= 0x01;
}
|