📄 main.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 + -