禁止发言 发表于 2025-3-27 07:40:45

{:4_188:}

yjdmwjmi 发表于 2025-3-27 12:39:38

FLASH擦写

利用ISP/IAP技术将Flash当做EEPROM可写10万次以上。
注意:EEPROM的写操作只能将字节中的1写为0,当需要将字节中的0写为1,则必须执行扇区擦除操作。EEPROM的读/写操作是以1字节为单位进行,而EEPROM擦除操作是以1扇区(512字节)为单位进行,在执行擦除操作时,如果目标扇区中有需要保留的数据,则必须预先将这些数据读取到RAM中暂存。
写或读寄存器IAP_ADDRE 最高位地址IAP_ADDRH高位地址IAP_ADDRL低位地址
命令寄存器1为读2为写3为清空先写0x5a后写0xa5才开始触发IAPEN开启CMD_FAIL判断位

Zjwwww 发表于 2025-3-27 15:42:02

第四节USB不停电下载,方便烧录,下载函数,复制代码,了解代码

ZRF197210 发表于 2025-3-27 20:18:21

建议还是先学8位的51

电子拆迁小队 发表于 2025-3-27 20:49:06

{:ciya:}

sdfan2002 发表于 2025-3-27 22:25:35

看完14集IO中断,还需要再学习回顾一下

电子拆迁小队 发表于 2025-3-27 22:57:40

那个时候可以领实验箱呢

user_17465 发表于 2025-3-27 23:38:11

打卡学习

爱哭的水瓶座 发表于 2025-3-27 23:46:06

{:4_165:}

lijvywkp 发表于 2025-3-28 01:19:06

打卡交作业,第七课   定时器中断   P32 控制功德状态 ,打印状态    ,P33 加功德(1 或者 2)打印功德数,并控制LED1 亮一秒 或两秒
//按键P3.2控制功德状态               
                if(P32 == 0)
                {
                        Delay20ms();
                        if(P32 == 0)
                        {
                                State = !State;   //功德状态 0:单倍功德1:双倍功德
                                if(State == 1)
                                {
                                        printf("双倍功德时间\r\n");
                                }
                                else
                                {
                                        printf("单倍功德时间\r\n");
                                }
                                while(P32 == 0);
                        }
                       
                }
                //按键P3.3据功德状态 完成加功德
                if(P33 == 0)
                {
                        Delay20ms();
                        if(P33 == 0)
                        {
                                if(State == 1)   //双倍功德状态功德数+2
                                {
                                        Num1 += 2;
                                        printf("功德+2 当前功德:%d\r\n",Num1);
                                        P00 = 0;
                                        Timer0_Init();//启动定时器0
                                }
                                else            //单倍功德状态功德数+1
                                {
                                        Num2 += 1;
                                        printf("功德+1 当前功德:%d\r\n",Num2);
                                        P00 = 0;
                                        Timer0_Init();   //启动定时器0
                                }
                                while(P33 == 0);
                        }
               
                }
               
       
        }

}


void Timer0_Isr(void) interrupt 1
{
        if(State == 1)
        {
                Num3++;
                if(Num3 == 2)   //灯亮两秒 关灯 关定时器0
                {
                        Num3 = 0;
                        P00 = 1;
                        TR0 = 0;
                }

        }
        else
        {
                P00 = 1;//灯亮一秒 关灯 关定时器0
                TR0 = 0;
        }
}

void Timer0_Init(void)                //1秒@24.000MHz
{
        TM0PS = 0x1E;                        //设置定时器时钟预分频 ( 注意:并非所有系列都有此寄存器,详情请查看数据手册 )
        AUXR &= 0x7F;                        //定时器时钟12T模式
        TMOD &= 0xF0;                        //设置定时器模式
        TL0 = 0xFC;                                //设置定时初始值
        TH0 = 0x03;                                //设置定时初始值
        TF0 = 0;                                //清除TF0标志
        TR0 = 1;                                //定时器0开始计时
        ET0 = 1;                                //使能定时器0中断
}
页: 89 90 91 92 93 94 95 96 97 98 [99] 100 101 102 103 104 105 106 107 108
查看完整版本: 《8051U深度入门到32位51大型实战视频》,【免费 + 包邮 送】实验箱@Ai8051U,100万套