芯Skye 发表于 2025-1-23 15:48:57

第十三集 中断系统已手敲代码,测试通过

任务一:按下P33,P01的LED改变原来的状态
#include "config.h"
#include "task.h"      
#include "io.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void Delay3000ms(void)      //@24.000MHz
{
      unsigned long edata i;
      _nop_();
      _nop_();
      i = 17999998UL;
      while (i) i--;
}
void main(void)
{
      Sys_init();    //系统初始化
      usb_init();   //USB CDC 接口配置                              
      IE2 |= 0x80;                                 
         Timer0_Init();
         Init_595();
      INT1_Init();
      EA = 1;                                                                                       
         P40 = 0;
         while (DeviceState!=DEVSTATE_CONFIGURED);   
          while(1)
          {
      if (bUsbOutReady)                                                      
      {
      usb_OUT_done();                                                      
      }
                P00=!P00;
                Delay3000ms();      
         }
}
void Timer0_Isr(void) interrupt 1                //1毫秒执行一次
{
Task_Marks_Handler_Callback      ();    //系统计时
}
测试视频:



芯Skye 发表于 2025-1-24 15:06:00

第十四集IO中断,已手敲代码测试成功
任务一:IO中断程序,LED灯亮灭
#include "io.h"
void P3_IO_Init(void)
{   P3IM0=0X00;
      P3IM1=0X00;
      P3INTE=0X08;
}
voidP3_IO_ISR(void) interrupt 40      
{   u8 intf;
      intf=P3INTF;
      if(intf)
      {
          P3INTF=0;
                if(intf&0x08)
                {
                        P01=!P01;
                }      
                }
      P01=!P01;
}
学习视频:

任务二:P33口显示数字1,P47显示数字2
#include "config.h"
#include "task.h"      
#include "io.h"
char *USER_DEVICEDESC = NULL;
char *USER_PRODUCTDESC = NULL;
char *USER_STCISPCMD = "@STCISP#";
void Delay3000ms(void)      //@24.000MHz
{
      unsigned long edata i;
      _nop_();
      _nop_();
      i = 17999998UL;
      while (i) i--;
}
void main(void)
{
      Sys_init();    //系统初始化
      usb_init();   //USB CDC 接口配置                              
      IE2 |= 0x80;                                 
          Timer0_Init();
                Init_595();
      //INT1_Init();
      P3_IO_Init();
      P4_IO_Init();
       EA = 1;                                                                                       
       P40 = 0;
       while (DeviceState!=DEVSTATE_CONFIGURED);   
          while(1)
          {
                if (bUsbOutReady)                                                      
      {
            //USB_SendData(UsbOutBuffer,OutNumber);

            usb_OUT_done();                                                      
      }
       Task_Pro_Handler_Callback();      //执行功能函数
      passward=0;      
         }
}
void Timer0_Isr(void) interrupt 1                //1毫秒执行一次
{
    Task_Marks_Handler_Callback      ();    //系统计时

}
学习视频:

任务三:实现P33,P47口的I0中断 ,P47口中断优先P33口中断
#include "io.h"
void P3_IO_Init(void)
{   P3IM0=0X00;
      P3IM1=0Xff;
      P3INTE=0X08;      
}
voidP3_IO_ISR(void) interrupt 40      
{   u8 intf;
      intf=P3INTF;
      if(intf)
      {
          P3INTF=0;
                if(intf&0x08)
                {
                        passward=1;
                }      
               
      }

}
void P4_IO_Init(void)
{   P4IM0=0X00;
      P4IM1=0Xff;
      P4INTE=0X80;
      PINIPH |=(1<<4);
      PINIPL |=(1<<4);      
}
voidP4_IO_ISR(void) interrupt 41
{   u8 intf;
      intf=P4INTF;
      if(intf)
      {
          P4INTF=0;
                if(intf&0x80)
                {
                        passward=2;
                }      
      }
}
学习视频:


页: 1 [2]
查看完整版本: 《8051U深度入门到32位51大型实战视频》学习打卡