- 打卡等级:偶尔看看I
- 打卡总天数:10
- 最近打卡:2025-03-20 11:16:04
已绑定手机
注册会员
- 积分
- 110
|
发表于 2025-3-17 14:00:28
|
显示全部楼层
谢谢大佬 我设置为双向口状态了并且按照你的指点改进程序在中断里读IO如果高电平改变标志位。 现在中断稳定了 但是依旧是触发两次间隔一秒 我用示波器看 是一个方波 。程序如下
void INT0_P32() interrupt 0 // 使用INT3 P32引脚 唤醒休眠的单片机 启用外部中断以后必须给引脚明确的电平 如果处于高阻态悬空 就会导致死机状态。
{
if (INT0_PIN==1)
{ADXL345_wakeup = 1; // 设置唤醒标志
}
} void main()
{
float x_angle, y_angle, z_angle;
IO_init(); //io初始化
Uart1_Init(); // 串口初始化
iic_init(); // IIC 初始化
EA=1; //开总中断
UART_Send_String("start......");
//setup_adxl345_continuous_read() ;// 设置ADXL345为一直工作模式 调试用
setup_adxl345_auto_sleep(); // 设置ADXL345为震动唤醒 然后静止后休眠的模式
UART_Send_String("set adxl345--ok\r\n");
while (1)
{
_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
//EX0=1; // 启动INT0中断
nop_();
_nop_();
_nop_();
_nop_();
PCON=0x02;
//MCU进入掉电模式 进行休眠
_nop_();
_nop_();
_nop_();
_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();_nop_();
_nop_();_nop_();_nop_();_nop_();_nop_();
////唤醒后执行的工作
//Uart1_Init(); // 唤醒后 串口初始化?
//delay(6000);
UART_Send_Hex_txt(0xee); //发送数据给串口
UART_Send_HEX(INT0_PIN); // 串口HEX格式发HEX函数
UART_Send_HEX(INT0_PIN); // 串口HEX格式发HEX函数
UART_Send_HEX(INT0_PIN); // 串口HEX格式发HEX函数
UART_Send_HEX(INT0_PIN); // 串口HEX格式发HEX函数
UART_Send_HEX(INT0_PIN); // 串口HEX格式发HEX函数
UART_Send_Hex_txt(0xee); //发送数据给串口
if (ADXL345_wakeup == 1) //
{
UART_Send_String("testweakup=1 ...\r\n");// 串口发送数据 已经唤醒
ADXL345_wakeup=0;// 中断内的唤醒标志位归零
adxl345_read_data(); // 读取ADXL345的数据
Determine_ADXL345_Orientation();// 判断哪一面向上
UART_Send_NewLine() ;// 串口发送换行
UART_Send_Hex_txt(number); //发送色子面数据给串口
UART_Send_NewLine();//串口发送换行
int_source= Single_Read_ADXL345(0x30); // 读取标志位 用于清除标志位 恢复中端口低电平
delay(4000);
}
} 这段程序很清晰明了啊 按说不应该唤醒两次 也不应该给电脑发送2次信息 |
|