优化了一下这个点灯程序。
- /*
- 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;
- }
|