yjdmwjmi 发表于 2025-3-28 12:57:09

第八集


启动定时器0的中断100ms进一次中断
在中断中对tim1000ms,tim500ms加一
每加一次就是100ms当tim500ms加到5就是500ms当tim1000ms加到10就是1s
然后就进行一次IO翻转


void gpio_Init(void)
{
        P0M0 = 0x00; P0M1 = 0x00;       //设置P0口为准双向口模式
    P1M0 = 0x00; P1M1 = 0x00;       //设置P1口为准双向口模式
    P2M0 = 0x00; P2M1 = 0x00;       //设置P2口为准双向口模式
    P3M0 = 0x00; P3M1 = 0x00;       //设置P3口为准双向口模式
    P4M0 = 0x00; P4M1 = 0x00;       //设置P4口为准双向口模式
    P5M0 = 0x00; P5M1 = 0x00;       //设置P5口为准双向口模式
    P6M0 = 0x00; P6M1 = 0x00;       //设置P6口为准双向口模式
    P7M0 = 0x00; P7M1 = 0x00;       //设置P7口为准双向口模式
                                    //上面的将所有I/O口都初始化为准双向口工作模式的程序,
}




void Timer0_Init(void)               
{
        TM0PS = 0x05;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0xFC;                                //设置定时初始值
        TH0 = 0x26;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}
int tim1000ms;
int tim500ms;

void main(void)
{

    EAXFR = 1;                      //允许访问扩展的特殊寄存器,XFR
    WTST = 0;                     //设置取程序代码等待时间,
                                    //赋值为 0表示不等待,程序以最快速度运行
    CKCON = 0;                      //设置访问片内的 xdata速度,
                                    //赋值为 0表示用最快速度访问,不增加额外的等待时间
    gpio_Init();

    Timer0_Init();                              //可以使用AIapp-ISP软件的“I/O口配置工具”来生成。

    EA=1;   


    while(1)                        
    {      
    }
}
int c=0;
void Timer0_Isr(void) interrupt 1
{
tim1000ms++;tim500ms++;
if(tim1000ms==10)
{
   P20!=P20;tim1000ms=0;
}
if(tim500ms==10)
{
   P22!=P22;tim500ms=0;
}
if(c==0)
{
    P21=0;
    c=1;
}
else
{
    P21=1;
    c=0;
}
}

8051启蒙者 发表于 2025-3-28 13:08:30

哈喽,小伙伴,需要您将所有打卡心得汇总在一篇帖子里哦,不需要每一集都另开新帖的{:ciya:}
页: [1]
查看完整版本: 第八集