- 打卡等级:偶尔看看I
- 打卡总天数:19
- 最近打卡:2025-06-16 11:19:01
超级版主
- 积分
- 2203
|
发表于 2025-2-18 13:34:13
|
显示全部楼层
第二集 所有普通I/O都支持外部中断 学习打卡
2. main.c 代码
#include <AI8051U.H>
#include "io_int.h"
#include "set_io.h"
#include "set_uart.h"
void main(void)
{
EAXFR = 1;
CKCON = 0;
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_leve_mode,Pin32,Pin_End); //设置P32 为低电平中断
//set_ioint_mode(high_leve_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作为串口波特率发生器
//set_uart_mode(Uart1,"9600bps",Use_Timerx,"32byte",Odd_9b,Uart1_P16_7,Uart_End);
//设置串口1为9600波特率,用定时器1作为串口波特率发生器
//set_uart_mode£¨Uart1,Uart1_P36_7£¬Uart_End);
set_uart_mode(Uart1,"115200bps",Use_Timer2,Base_8b,"64byte",Uart1_P36_7,Uart_End);
// 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_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位无校验模式
EA = 1; //打开总中断
while(1)
{
//循环执行的程序
if(get_ioint_state(Pin32))
{
uart_printf(Uart1,"P32 ,Click\r\n");
}
if(get_ioint_state(Pin33))
{
uart_printf(Uart1,"P33 ,Click\r\n");
}
}
|
|