- 打卡等级:偶尔看看III
- 打卡总天数:59
- 最近打卡:2025-06-16 10:04:37
已绑定手机
版主
- 积分
- 2276

|
发表于 2025-2-14 15:49:07
|
显示全部楼层
第二集打卡所有的普通IO都支持外部中断
#include <AI8051U.H>
#include "io_int.h"
#include "set_io.h"
#include "set_uart.h"
void main (void)
{
EAXFR = 1 ; //拓展寄存器访问使能
CKCON = 0 ; //设置访问片内扩展的XDATA部分速度为最快
WTST = 0 ; //设置取程序代码不等待,以最快速度运行
//初始化程序
//按下P32按键,按下P33按键,通过串口识别出打印出识别到的上升沿,下降沿
set_io_mode(hz_mode,Pin32,Pin33,Pin36,Pin_End);
//设置p32和P33为高阻输入模式,默认就是高阻
set_io_mode(en_pur,Pin32,Pin33,Pin36,Pin_End);
//设置p32和P33内部的4k上拉电阻打开
set_io_mode(pp_mode,Pin37,Pin_End);
//将串口发送脚P37设置为推完输出,抗干扰
set_ioint_mode(falling_edge_mode,Pin32,Pin_End);
//设置P32为下降沿中断
//set_ioint_mode(rising_edge_mode,Pin32,Pin_End);
//设置P32为上升沿中断
//set_ioint_mode(low_level_mode,Pin32,Pin_End);
//设置P32为低电平中断
//set_ioint_mode(high_level_mode,Pin32,Pin_End);
//设置P32为高电平中断
set_ioint_mode(rising_edge_mode,Pin33,Pin_End); //设置P33为上升沿中断
set_ioint_mode(en_int,Pin32,Pin33,Pin_End); //同时打开P32和p33的IO中断
//set_ioint_mode(dis_int,Pin32,Pin33,Pin_End); //同时关闭P32和p33的IO中断
set_uart_mode(Uart1,"115200bps",Use_Timer2,Base_8b,"64byte", Uart1_P36_7,Uart_End);
//设置串口1为115200波特率,使用定时器2作为串口波特率发生器
//超时中断长度选择64byte,引脚切换到P36P37上,
//set_uart_mode(Uart1,"9600bps",Use_TimerX,Odd_9b,"32byte", Uart1_P16_7,Uart_End);
//设置串口1为9600波特率,使用定时器1作为串口波特率发生器,
//超时中断长度32byte,引脚切换到P16P17
//set_uart_mode(Uart1,Uart1_P36_7,Uart_End);
//支持默认值操作,这部分设置等效为
//设置串口1为115200波特率,使用定时器2作为串口波特率发生器
//超时中断长度选择64byte,引脚切换到P36P37上
// set_uart_mode(Uart3,"9600bps",Use_Timerx,Base_8b,"64byte", Uart3_P50_1,Uart_End);
// set_uart_mode(Uart4,"38400bps",Use_Timerx,Base_8b,"64byte", Uart4_P52_3,Uart_End);
//实现设置两个串口工作在不同的波特率下,使用的是8位无校验模式
// set_uart_mode(Uart3,"9600bps",Use_Timer2,Base_8b,"64byte", Uart3_P50_1,Uart_End);
// set_uart_mode(Uart4,"9600bps",Use_Timer2,Base_8b,"64byte", Uart4_P52_3,Uart_End);
//实现设置两个串口工作在相同的波特率下,使用的是8位无校验模式
EA = 1;
while(1)
{
//循环执行的程序
if(get_ioint_state(Pin32))//设置P32为下降沿中断
{
uart_printf(Uart1,"P32 Click\r\n");
}
if(get_ioint_state(Pin33))//设置P33为上升沿中断
{
uart_printf(Uart1,"P33 Click\r\n");
}
}
}
|
|