📄 ext_int1.c
字号:
#define slave_I2C_data PIN_B1
#define slave_I2C_clk PIN_B2
void ext_int1_init(){
bit_set(*0xF93,1); //端口B的方向寄存器地址为0xF93,将RB1设置为输入
bit_set(*0xF93,2); //端口B的方向寄存器地址为0xF93,将RB2设置为输入
ext_int_edge(1,H_TO_L); //将EXT_INT1设置为下降沿中断方式;
enable_interrupts(INT_EXT1);//使能外部中断1
enable_interrupts(GLOBAL); //开总中断
}
/*
int1 wait_I2C_clk_high(){
long int sys_couter=10000;
while( !input(slave_I2C_clk))
{
sys_couter--;
if(sys_couter==0)
{
//enable_interrupts(INT_EXT1);//使能外部中断1
return FALSE;//超时;
}
}
return TRUE;
}
*/
int1 wait_I2C_clk_low(){
long int sys_couter2=1000;
while( input(slave_I2C_clk))//等待slave_I2C_clk变为0;
{
sys_couter2--;
if(sys_couter2==0) return FALSE;//超时;
}
return TRUE;
}
//从IIC读入一个字节
BYTE read_IIC_byte( ) {
long int sys_couter0=1000;
long int sys_couter1=1000;
BYTE i=8,data;
for(i=0;i<8;i++)
{while( !input(slave_I2C_clk) ) //等待slave_I2C_clk变为1;
{sys_couter0--;
if(sys_couter0==0x0000) return(0);//超时,主机错;
}
shift_left(&data,1,input(slave_I2C_data)); //slave从从主机发送器读入1位,先读入的是发送数据的最高位;
while( input(slave_I2C_clk) ) //等待slave_I2C_clk变为0;
{sys_couter1--;
if(sys_couter1==0x0000) return(0);//超时,主机错;
}
sys_couter0=1000;
sys_couter1=1000;
}
return(data);//接收正确
}
void iic_send_ack()
{
output_low(slave_I2C_data); //在slave_I2C_clk变为0时,本从机发送应答ACK;
while( !input(slave_I2C_clk) );//等待slave_I2C_clk变为1;
while( input(slave_I2C_clk) ); //等待slave_I2C_clk变为0;
//上面两句是等待一个移位时钟到到来
bit_set(*0xF93,1); //端口B的方向寄存器地址为0xF93,将RB1设置为输入
bit_set(*0xF93,2); //端口B的方向寄存器地址为0xF93,将RB2设置为输入
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -