Ai8051U创新风格库函数学习打卡
第一集:I/O口模式设置,传统外部中断【INT0, INT1, INT2, INT3, INT4】#include <AI8051U.H>
#include "set_int.h"
#include "set_io.h"
#include "intrins.h"
void Delay1ms(void) //@40MHz
{
unsigned long edata i;
_nop_();
_nop_();
_nop_();
i = 9998UL;
while (i) i--;
}
void main(void)
{
EAXFR=1;
CKCON=0;
WTST=0;
set_io_mode(pu_mode,Pin40,Pin00,Pin01,Pin02,Pin03,Pin_End);
P40=0;
//set_io_mode(pp_mode,Pin40,Pin00,Pin01,Pin_End);
set_io_mode(hz_mode,Pin32,Pin33,Pin34,Pin35,Pin_End);
set_io_mode(en_pur,Pin32,Pin33,Pin34,Pin35,Pin_End);
//打开内部上拉电阻后,最好加一段1ms延时,以等待端口被拉高
Delay1ms();//1ms的延时
//set_io_mode(dis_pur,Pin32,Pin33,Pin_End);
//set_io_mode(en_pur,Pin33,Pin32,Pin_End);//参数顺序无所谓
set_int_mode(falling_edge_mode,Int0,Int1,Int_End);
EA=1;
while(1)
{
if(get_int_state(Int0))
{
P00=~P00;
}
if(get_int_state(Int1))
{
P01=~P01;
}
P02=P34;
P03=P35;
}
}
第二集所有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;//设置取程序代码不等待,以最快速度运行
set_io_mode(hz_mode,Pin32,Pin33,Pin36,Pin_End);//设置p32,p33为高阻输入模式//io口上电默认为高阻输入模式
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 );
// set_ioint_mode (low_level_mode,Pin32,Pin_End );
// set_ioint_mode (high_level_mode,Pin32,Pin_End );
set_ioint_mode (rising_edge_mode,Pin33,Pin_End );
set_ioint_mode (en_int,Pin32,Pin33,Pin_End );
// set_ioint_mode (dis_int,Pin32,Pin33,Pin_End );
set_uart_mode(Uart1,"115200bps",Use_Timer2,Base_8b,"64byte",Uart1_P36_7,Uart_End);
// set_uart_mode(Uart1,"9600bps",Use_Timerx,Odd_9b,"32byte",Uart1_P16_7,Uart_End);
// 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_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))
{
uart_printf(Uart1,"P32,Click\r\n");
}
if (get_ioint_state (Pin33))
{
uart_printf(Uart1,"P33,Click\r\n");
}
}
}
第二集所有io口都支持的外部中断——擎天柱
#include <AI8051U.H>
#include"io_int.h"
#include"set_io.h"
void main(void)
{
EAXFR=1;//扩展寄存器访问使能
CKCON=0;//设置访问片内扩展的xdata部分速度为最快
WTST=0;//设置取程序代码不等待,以最快速度运行
set_io_mode(hz_mode,Pin32,Pin33,Pin_End);//设置p32,p33为高阻输入模式//io口上电默认为高阻输入模式
set_io_mode(en_pur,Pin32,Pin33,Pin_End);//设置打开P32.P33内部4K的上拉电阻
set_io_mode(pu_mode,Pin20,Pin21,Pin_End);
set_ioint_mode(falling_edge_mode,Pin32,Pin_End);//设置P32为下降沿中断
// set_ioint_mode (rising_edge_mode,Pin32,Pin_End );
// set_ioint_mode (low_level_mode,Pin32,Pin_End );
// set_ioint_mode (high_level_mode,Pin32,Pin_End );
set_ioint_mode (rising_edge_mode,Pin33,Pin_End );
set_ioint_mode (en_int,Pin32,Pin33,Pin_End );
// set_ioint_mode (dis_int,Pin32,Pin33,Pin_End );
EA=1;//总中断打开
while(1)
{
if (get_ioint_state (Pin32))
{
P20=~P20;
}
if (get_ioint_state (Pin33))
{
P21=~P21;
}
}
}
第三集:24位定时器
#include <AI8051U.H>
#include "set_io.h"
#include "set_timer.h"
void main(void)
{
EAXFR = 1;
CKCON = 0;
WTST= 0;
set_io_mode(pu_mode,Pin40,Pin00,Pin01,Pin02,Pin03,Pin04,Pin05,Pin_End);
P40 = 0;
// set_timer_fosc(11059200UL);
set_timer_mode(Timer0,"0.5s",Timer_End);
// set_timer_mode(Timer1,"1s",Timer_End);
set_timer_mode(Timer1,"100000hz",En_OutClk,Dis_Int,Timer_End);
set_timer_mode(Timer2,"200ms",Timer_End);
set_timer_mode(Timer3,"10hz",Timer_End);
set_timer_mode(Timer4,"2s",Timer_End);
set_timer_mode(Timer11,"300ms",Timer_End);
EA = 1;
while(1)
{
if(get_timer_state(Timer0))
{
P00=~P00;
}
// if(get_timer_state(Timer1))
// {
// P01=~P01;
// }
if(get_timer_state(Timer2))
{
P02=~P02;
}
if(get_timer_state(Timer3))
{
P03=~P03;
}
if(get_timer_state(Timer4))
{
P04=~P04;
set_timer_mode(Timer4,Dis_Int,Timer_End);
}
if(get_timer_state(Timer11))
{
P05=~P05;
}
}
}
第四集:串口部分库函数讲解
#include <AI8051U.H>
#include "io_int.h"
#include "set_io.h"
#include "set_uart.h"
#include "stdio.h"
int num = 0;
char str = {'a','b','c','d','e'};
void main(void)
{
EAXFR = 1;
CKCON = 0;
WTST = 0;
set_io_mode(pu_mode,Pin36,Pin37,Pin42,Pin43,Pin_End);
set_uart_mode(Uart1,"115200bps",Uart1_P36_7,Use_Timerx,Uart_End);
// set_uart_mode(Uart1,Uart1_P36_7,"115200bps",Uart_End);
set_uart_mode(Uart2,"9600bps",Uart2_P42_3,Use_Timerx,Uart_End);
set_io_mode(hz_mode,Pin34,Pin_End);
set_io_mode(en_pur,Pin34,Pin_End);
set_ioint_mode(falling_edge_mode,Pin34,Pin_End);
set_ioint_mode(en_int,Pin34,Pin_End);
EA = 1;
while(1)
{
if(get_ioint_state (Pin34))
{
uart_printf(Uart1, "uart1,hello!\r\n");
uart_printf(Uart2, "uart2,hello!\r\n");
}
if(get_uart_state(Uart1))
{
sscanf(_uart1_rx_buff, "num:%d",&num);
uart_printf(Uart1, "this_num:%d\r\n",num);
uart_printf(Uart2,Buff_Mode, str,5);
}
}
}
第五集:ADC部分库函数
#include <AI8051U.H>
#include "set_adc.h"
#include "set_io.h"
#include "set_timer.h"
#include "set_uart.h"
void main(void)
{
EAXFR = 1;
CKCON = 0;
WTST = 0;
set_io_mode(pu_mode,Pin36,Pin37,Pin_End);
set_timer_mode(Timer0, "0.5s", Dis_OutClk, En_Int, Timer_End);
set_uart_mode(Uart1, "115200bps", Uart1_P36_7, Uart_End);
set_adc_mode(cycl_mode, Adc0_P10, Adc_End);
EA = 1;
while(1)
{
if(get_timer_state(Timer0))
{
if(get_adc_state(Adc0_P10))
{
uart_printf(Uart1, "adc_dat:%d\r\n",adc_value);
}
}
}
}
页:
[1]