本帖最后由 xyz549040622 于 2020-4-1 16:49 编辑
1.使用定时器0进行LED的闪烁,定时器配置为1ms
2.每500ms闪烁一次LED
- #include "SC95F861x_C.h"
- /*---------------------------------------------------------------------
- // 宏定义
- ----------------------------------------------------------------------*/
- #define LED P40
- /*---------------------------------------------------------------------
- // 函数申明
- ----------------------------------------------------------------------*/
- void ClockInit(void);
- void GpioInit(void);
- void delay_ms(unsigned int ms);
- void Timer0Init(void);
- /*---------------------------------------------------------------------
- // 函数: void main(void)
- // 描述: 主函数
- // 参数: non
- // 返回: none.
- // 版本: VER1.0
- // 日期:
- // 备注:
- ----------------------------------------------------------------------*/
- void main(void)
- {
- ClockInit();
- GpioInit();
- Timer0Init();
- EA = 1;
- while(1)
- {
- }
- }
- /*---------------------------------------------------------------------
- // 函数: void ClockInit(void)
- // 描述: 时钟初始化
- // 参数: non
- // 返回: none.
- // 版本: VER1.0
- // 日期:
- // 备注:
- ----------------------------------------------------------------------*/
- void ClockInit(void)
- {
- //上电默认使用HRC32Mhz作为Fhrc,可以用编程软件进行配置分频输出为Fsys,也可以用程序进行配置,这里用编程软件配置,方便
- }
- /*---------------------------------------------------------------------
- // 函数: void ClockInit(void)
- // 描述: 时钟初始化
- // 参数: non
- // 返回: none.
- // 版本: VER1.0
- // 日期:
- // 备注:
- ----------------------------------------------------------------------*/
- void GpioInit(void)
- {
- //芯片为SC95F8617,则不用调用宏定义。
- P4CON |= 0x01; //设置P40为强推挽模式
- P4PH |= 0x01; //P40上拉电阻打开
- }
- //========================================================================
- // 函数: void Timer0Init(void)
- // 描述: 定时器0的初始化,1ms定时
- // 参数: none
- // 返回: none.
- // 版本: VER1.0
- // 日期:
- // 备注:
- //========================================================================
- void Timer0Init(void)
- {
- TMCON |= 0X01; //Timer0选择时钟Fsys
- TMOD &= 0xFB;//选择定时器0为定时模式
- TMOD |= 0x01;//选择定时器0工作为模式1,16位定时器,不自动装载
-
- TL0 = (65536 - 32000)%256; //溢出时间:时钟为Fsys,则32000*(1/Fsys)=1ms;
- TH0 = (65536 - 32000)/256;
- TF0 = 0;//清除定时器0
- ET0 = 1;//使能定时器0中断
- TR0 = 1;//定时器0开始计时
-
- }
- //========================================================================
- // 函数: void timer0() interrupt 1
- // 描述: 定时器0中断函数
- // 参数: none
- // 返回: none.
- // 版本: VER1.0
- // 日期:
- // 备注:
- //========================================================================
- void timer0() interrupt 1
- {
- static unsigned int LedCounts = 0;
- TL0 = (65536 - 32000)%256;
- TH0 = (65536 - 32000)/256;
- LedCounts++;
- if(LedCounts == 500)
- {
- LedCounts = 0;
- LED = ~LED; //LED进行500ms的闪烁
- }
- }
- //========================================================================
- // 函数: void delay_ms(unsigned int ms ms)
- // 描述: 延时函数。主频32M,使用STC软件生成
- // 参数: ms,要延时的ms数, 这里只支持1~65536ms.
- // 返回: none.
- // 版本: VER1.0
- // 日期:
- // 备注:
- //========================================================================
- void delay_ms(unsigned int ms)//@32MHz
- {
- unsigned char i,j;
- unsigned int N;
- for(N = 0; N < ms;N++)
- {
- i = 32;
- j = 29;
- do
- {
- while (--j);
- } while (--i);
- }
- }
|