[资源共享] 通过定时器0中断实现的闪烁灯

[复制链接]
241|0
 楼主 | 2018-3-9 09:51 | 显示全部楼层 |阅读模式
其实HC89F003的代码就跟C51的差不多,就是寄存器多了一点,实现起来也简单以下的代码就像以前51的一样,利用定时器实现了500ms灯开关一次。。


#define        ALLOCATE_EXTERN
#include "HC89S003F4.h"
//#include "EEPROM.h"


void RCC_init()
{
        while((CLKCON&0x20)!=0x20);                        //等待内部高频RC起振
        CLKSWR = 0x51;                                                //选择内部高频时钟为主时钟,内部高频RC0分频,Fosc=32MHz
        while((CLKSWR&0xC0)!=0x40);                        //等待内部高频切换完成
        CLKDIV = 0x01;                                                //Fosc2分频得到Fcpu,Fcpu=16MHz
}

void GPIO_init()
{
        P2M1 = P2M1&0xf0|0x08;                                //P11设置为推挽输出
}

void TIMER_init()
{
    TCON1 = 0x00;                                                //Tx0定时器时钟为Fosc
        TMOD = 0x00;                                                //16位重装载定时器/计数器
        TH0 = 0xFA;
        TL0 = 0xCB;                                                        //T0定时时间1ms
        IE |= 0x02;                                                        //打开T0中断
        TCON |= 0x10;                                                //使能T0

        EA = 1;                                                                //打开总中断
}


void main(void)
{
          
        WDTCCR = 0x00;                //关闭看门狗 必须要关闭,默认是打开的
        RCC_init();
        GPIO_init();

    TIMER_init();


        while(1)
        {      

        }

}


void TIMER0_Rpt(void) interrupt TIMER0_VECTOR
{
    static u16 m=0;

    m++;
    if(m == 500)
    {
        m=0;

        P2_2 ^= 0x1;
    }
           
}

许多人应该还不会安装HC-LINK的驱动,论坛也没有发这个教程上来。我也是百度找出来的,共享一下吧。。


本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
扫描二维码,随时随地手机跟帖
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复

您需要登录后才可以回帖
登录 | 注册
高级模式
我要创建版块 申请成为版主

论坛热帖

快速回复 返回顶部 返回列表