P3IO中断进不去,
void P3Exit_Init()//P3中断初始化{
P3IM0 = 0X00;
P3IM1 = 0XFF; //低电平中断
P3INTE = 0X20; //P35中断0010 0000
}
void main()
{
u8 i = 0;
u8 key_str = 0;//数码管显示位置变量
Timer0_Init();//定时器0初始化
INT0_Init();//外部中断0初始化
P3Exit_Init();//P3中断初始化
EA = 1; //打开总中断
LED=0XFF;
sys_init();//系统初始化
usb_init();//USB CDC 接口配置
SEG0 = 0;
while(1)
}
void P3Exit_Isr() interrupt 40 //P3端口中断号40,P3中断服务函数
{
u8 intf;
intf = P3INTF; //读取中断标志位
if(intf)
{
P3INTF = 0; //清空中断标志位,必须软件清空
if(intf&0x20) //P35按下 0010 0000
{
SEG0 ++;
if(SEG0>9)
{
SEG0=0;
}
delay_ms(500);//演示功能,正式代码避免中断函数加延时。
}
}
}
是IO中断插件安装失败还是我代码有问题
是IO中断插件安装失败还是我代码有问题
是IO中断插件安装失败还是我代码有问题
求指导
具体型号的 MCU 要讲清楚,不是所有型号都有这个功能 STC32G128 STC32G12K128的普通I/O支持外部中断,只能支持 高电平/低电平 中断
或者你换成 STC32G8K64-42I-LQFP48,这个没任何问题
大佬帮我看个代码
#include "adc.h"
#include "intrins.h"
void ADC_Init()
{
P1M0 = 0x00;
P1M1 = 0x01; //设置P10高阻输入,ADC采集必须使用高阻输入
ADCTIM = 0X3F; //设置ADC内部时序
ADCCFG = 0X2F; //设置adc时钟为系统时钟/2/16,一般选用速度最慢的模式,求数据稳定,数据选用右对齐格式.0X20?
ADC_POWER = 1; //使能ADC模块
}
//=============================================
//函数名称 ADC_Read
//函数功能 ADC读取指定通道电压
//入口参数 @ NO,ADC选择通道0-15
//函数返回 ADC_Val
//当前版本 VER1.0
//修改日期 2023
//当前作者
//其他备注
//=============================================
u16 ADC_Read(u8 no)//入口参数为选择ADC通道
{
u16 ADC_Val; //ADC数据保存变量
ADC_CONTR &= 0x0f; //清空通道寄存器
ADC_CONTR = no; //选择通道0-15,最后一位通道默认测试通道,一般不去占用
ADC_START = 1; //启动AD转换
_nop_(); //运行两行空指令
_nop_();
while(!ADC_FLAG); //等待ADC转换结束标志位,由硬件置1.
ADC_FLAG = 0; //ADC转换结束标志位由软件清零
ADC_Val = ((ADC_RES<<8)+ADC_RESL); //高位左右8位后加低八位就是ADC的值
return ADC_Val;
}
然后主函数调用的时候我也发下,
void main()
{
u16 ADC_VAL;
ADC_Init();
EA = 1; //打开总中断
sys_init();//系统初始化
usb_init();//USB CDC 接口配置
// SEG0 = 0;
// SEG1 = 0;
//死循环
while (1)
{
P40=0;
P60=0;
delay_ms(2);
if(DeviceState != DEVSTATE_CONFIGURED)//等待USB完成配置
continue;
// if (bUsbOutReady)
// {
// usb_OUT_done(); //接收应答(固定格式)
//
// printf("%d\r\n",ADC_VAL);
// memcpy(UsbInBuffer, UsbOutBuffer, OutNumber);//将接收数据(UsbOutBuffer),复制到发送缓冲区(UsbInBuffer)
// usb_IN(OutNumber); //原路返回, 用于测试
// }
ADC_VAL=ADC_Read(0);
printf("%d\r\n",ADC_VAL);
printf("%d\r\n",P6);
}
}
串口不打印,貌似卡在ADC_VAL=ADC_Read(0);或者卡在while(!ADC_FLAG); 我不确定卡哪里,现在只要屏蔽掉这两行,串口都能打印。
是不是因为中断向量大于31,keil无法编译的问题
页:
[1]