- 打卡等级:偶尔看看I
- 打卡总天数:12
- 最近打卡:2025-06-16 11:44:16
版主
- 积分
- 1424
|
发表于 2025-1-23 16:32:59
|
显示全部楼层
第14集 IO中断
任务一:IO中断程序
主程序
#include "config.h"
#include "task.h"
#include "io.h"
u8 State[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
u8 Run_State = 0; //运行状态
u8 num = 0;
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)
{
int count = 1; //按键计数
Sys_init(); //函数调用,系统初始化
usb_init(); //USB CDC接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init();//定时器初始化
Init_595();
//INT1_Init();//外部中断1初始化
P3_IO_Init();//IO中断初始化
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
// WDT_CONTR = 0X24;
while(1)
{
if (bUsbOutReady) //如果接收到了数据
{
// USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
// Task_Pro_Handler_Callback(); //执行功能函数
// if(P33 != 0)
// WDT_CONTR = 0X34;
P00 = !P00;
Delay3000ms();
}
}
void Timer0_Isr(void) interrupt 1 //3秒执行一次
{
Task_Marks_Handler_Callback(); //系统计时
}
任务二:
设置P3优先级比P4高
主程序
#include "config.h"
#include "task.h"
#include "io.h"
u8 State[8]={0x01,0x02,0x04,0x08,0x10,0x20,0x40,0x80};
u8 i;
u8 Run_State = 0; //运行状态
u8 num = 0;
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)
{
int count = 1; //按键计数
Sys_init(); //函数调用,系统初始化
usb_init(); //USB CDC接口配置
IE2 |= 0x80; //使能USB中断
Timer0_Init();//定时器初始化
Init_595();
//INT1_Init();//外部中断1初始化
P3_IO_Init();//IO中断初始化
P4_IO_Init();
EA = 1;
P40 = 0;
while (DeviceState != DEVSTATE_CONFIGURED); //等待USB完成配置
// WDT_CONTR = 0X24;
while(1)
{
if (bUsbOutReady) //如果接收到了数据
{
// USB_SendData(UsbOutBuffer,OutNumber); //发送数据缓冲区,长度(接收数据原样返回, 用于测试)
usb_OUT_done();
}
Task_Pro_Handler_Callback(); //执行功能函数
passward[0] = 0;
// if(P33 != 0)
// WDT_CONTR = 0X34;
// P00 = !P00;
// Delay3000ms();
}
}
void Timer0_Isr(void) interrupt 1 //3秒执行一次
{
Task_Marks_Handler_Callback(); //系统计时
}
设置P4优先级比P3高
设置程序:
void P4_IO_Init(void)
{
P4IM0 = 0X00; //IO中断模式设置为了下降沿
P4IM1 = 0Xff;
P4INTE = 0X80;//打开中断
PINIPH |=(1<<4);//写入最高优先级
PINIPL |=(1<<4);
}
|
|