⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smbus_s_t.c

📁 很有用的CYGNAL C语言程序,
💻 C
字号:
/*********************************************************************************************************
**
**	文		件:Smbus_S_T.c
**	功		能:从机发送调试程序
*********************************************************************************************************/

#include "smbus.h"
xdata uchar aa[7]={0x11,0x12,0x13,0x14,0x15,0x16,0x17};//预发送数据
void config(){
//看门狗禁止
	WDTCN = 0x07;	
    WDTCN = 0xDE;   
   	WDTCN = 0xAD;
	SFRPAGE = 0x0F;
//交叉开关配置,SMBUS配置到P0.0和P0.1上
	XBR0 = 0x01;	
	XBR1 = 0x00;	
	XBR2 = 0x40;
 	XBR3 = 0x01;   
//管脚输出配置,P0口为开漏输出,其中P0.6接上拉电阻,P0为数字输入口
 	SFRPAGE = 0x0F;
 	P0MDOUT = 0x00; 
 	P1MDIN = 0xFF;  
//晶振配置,采用内部晶振8分频
	SFRPAGE = 0x0F;
 	CLKSEL = 0x00;  
	OSCXCN = 0x00;	
	OSCICN = 0x84;	
}
void main(){
	uchar t=0;
	char i;
	config();
	smbus_cfg(0x44,0xf1,0x6f);
	/*
	smbus使能,AA=1,SCL高电平和低电平超时禁止
	smbus时钟频率为100khz,若是从机,此配置不影响总线时钟,总线时钟由主机决定
	从机地址为0x6e/2,即为55(十进制),广播地址使能
	*/
	EA=1;//打开全局中断
	k=0;
	//smbusMasterStart();//将发送起始位代码屏蔽,则该节点处于从机状态
	while(1);
}
void int0() interrupt 0{
}
void int1() interrupt 1{
}
void int2() interrupt 2{
}
void int3() interrupt 3{
}
void int4() interrupt 4{
}
void int5() interrupt 5{
}
void int6() interrupt 6{
}
void smbusInt() interrupt 7{//从机smbus发送中断,此中断只考虑关键状态处理,以便调试
	SFRPAGE=0x00;//此句可省略
	if(SMB0STA==0xA8){//自身从机地址+读控制接收,将欲发送的第一个数据装入发送缓冲区
		k=0;
		SMB0DAT=aa[k];
	}
	if(SMB0STA==0xb8){//数据成功发送,ACK确认接收,将下一个发送数据装入缓冲区
		SMB0DAT=aa[k];
	}
	if(SMB0STA==0xc0){//此为发送完最后一个数据,且接收到NACK的状态值
	}
	k++;
	SI=0;
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -