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

📄 main.c

📁 CAN总线开发板源代码与原理图
💻 C
字号:


/*************************************************************************************************
;																								 *
;    实验平台: YH51-III CAN、USB总线学习开发板                                           		 *                  
;    MCU 类型: STC10F08  FOSC:11.0592MHZ 														 *
;    实验内容: CAN <---> 232通讯实验                                                             *
;    实验说明: 上电后学习板把采集到的温度往串口和CAN总线发送,1s采集一次,串口波特率为9600,     *
;    		   CAN波特率为250K。LED1闪烁表示程序常运行,LED2点亮表示CAN芯片自检通过。LED3点亮表	 *
;              示DS18B20存在。有什么问题请到我们的技术论坛上讨论www.eldiy.net/bbs				 *
;            						 											 				 *
;    项 目 名: DS18B20温度采集                                                         			 * 
;    程序版本: V2.00                                                         					 *   
;    创 建 者: 宇航工作室                                                      					 *
;    创建日期: 2010-04-22                                                        				 *
;																		 						 *
;    网站: http://www.eldiy.net  																 *
;    版权: Copyright(c)宇航工作室      											 				 *
;    声明: 此程序仅用于学习与参考,引用请注明版权和作者信息!					 				 *
;																	       						 *
;*************************************************************************************************/
#include <stc10fxx.h>#define uchar unsigned char
#define uint unsigned int

sbit LED1 = P4^6;
sbit LED2 = P4^1;
sbit LED3 = P4^4;
uchar SystemTime,ReadTime;
extern uchar TemperatureBuff[5];extern void read_temp(void);extern bit init_ds18b20(void);extern void read_temp(void);

extern void CanInit(void);
extern bit CanTest();
bit CanTransmitMessage(uchar *TransmitMessage);//====== 系统初始化函数 =======void SysInit(){
	P4SW = 0x50;  //P4.4、P4.6做I/O口	TMOD = 0x21;   //设置定时器1工作于方式2,定时器0工作于方式1	SCON = 0x50;  //串口工作于方式1,予许接收	
	TH0 = 0xdc;
	TL0 = 0x00;  //11.0592M  10MS
	ET0 = 1;
	TR0 = 1;
	TH1 = 0xfd;  //9600波特率	TL1 = 0xfd;	TR1 = 1;  //启动定时器1	EA = 1;  //开放串总断}


/********************************************************************************************
** 函数名称: void T0_INT() interrupt 5
** 功能描述: T2中断服务程序
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
*********************************************************************************************/
void T0_INT() interrupt 1
{
    TH0 = 0xdc;
	TL0 = 0x00;  //11.0592M  10MS
	if(SystemTime > 0)SystemTime--;
	if(ReadTime > 0)ReadTime--;
}
//============ 命令成功发送函数 =====================void SendSucceed(uchar *p,len){	uchar i;	for(i=0;i<len;i++) 	{		SBUF = *p;	   		while (!TI);
        TI = 0;		p++;	}	 }void UartSendTemperature(){	uchar TempBuff[8];	TempBuff[0] = TemperatureBuff[3]+0x30;	TempBuff[1] = TemperatureBuff[2]+0x30;	TempBuff[2] = TemperatureBuff[1]+0x30;	TempBuff[3] = '.';	TempBuff[4] = TemperatureBuff[0]+0x30;
	TempBuff[5] = 0x43;
	TempBuff[6] = 0x0d;
	TempBuff[7] = 0x0a;
		SendSucceed(TempBuff,8);}void CanSendTemperature()
{
	uchar i = 0;
	uchar TempBuff[7];
	TempBuff[i++] = 0x04;
	TempBuff[i++] = 0x00;
	TempBuff[i++] = 0x00;
	TempBuff[i++] = TemperatureBuff[3];
	TempBuff[i++] = TemperatureBuff[2];
	TempBuff[i++] = TemperatureBuff[1];
	TempBuff[i++] = TemperatureBuff[0];
	CanTransmitMessage(TempBuff);
}
//=========== 主函数 ===============void main(){	SysInit();
	CanInit();
	if(CanTest()) LED2 = 0;  //CAN自检成功,点亮LED2
	if(!init_ds18b20())LED3 = 0;  //DS18B20存在,点亮LED3	while(1)	{		if(ReadTime == 0)		{			ReadTime = 100;    //1秒
			read_temp();			UartSendTemperature();  //温度往串口发送
			CanSendTemperature();   //温度往CAN总线发送		}
		if(SystemTime==0)  //系统指示灯
        {
            LED1 = !LED1;
            SystemTime = 50;  //闪烁周期为1s
        }	}}

⌨️ 快捷键说明

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