📄 main.c
字号:
/*************************************************************************************************
; *
; 实验平台: YH51-III CAN、USB总线学习开发板 *
; MCU 类型: STC10F08 FOSC:11.0592MHZ *
; 实验内容: CAN <---> 232通讯实验 *
; 实验说明: 把CanMini和YH51-III学习板连接好并且把Canmini和YH51-III的串口和USB都连接到电脑上打 *
; 开两个YuhangDebugTools调试软件,连接CanMini的软件选择CAN-232调试界面波特率设置为115200,另一 *
; 个选择CAN-USB调试界面,连接YH51-III学习板的波特率设置为9600,上电后LED1间隔闪烁表示单片机正 *
; 常运行,LED2点亮表示CAN芯片自检通过。有什么问题请到我们的技术论坛上讨论www.eldiy.net/bbs *
; *
; 项 目 名: can-232 *
; 程序版本: V2.00 *
; 创 建 者: 宇航工作室 *
; 创建日期: 2010-04-22 *
; *
; 网站: http://www.eldiy.net *
; 版权: Copyright(c)宇航工作室 *
; 声明: 此程序仅用于学习与参考,引用请注明版权和作者信息! *
; *
;*************************************************************************************************/
#include "main.h"
/********************************************************************************************
** 函数名称: void Sysinit(void)
** 功能描述: 单片机初始化
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
*********************************************************************************************/
void Sysinit(void)
{
bCAN_RecSuccFlag = 0;
P4SW = 0x50; //P4.4、P4.6做I/O口
TMOD = 0x21; //定时器1定时方式2
TH0 = 0xdc;
TL0 = 0x00; //11.0592M 10MS
ET0 = 1;
TR0 = 1;
SCON = 0x50; //串口方式1,允许接收
TH1 = 0xfd; //设置波特率为9600
TL1 = 0xfd;
//TR1 = 1;
//ES = 1;
EX1 = 1; //开放can中断
EA = 1;
}
/********************************************************************************************
** 函数名称: void T0_INT() interrupt 5
** 功能描述: T2中断服务程序
** 输 入: 无
** 输 出: 无
** 全局变量: 无
** 调用模块: 无
*********************************************************************************************/
void T0_INT() interrupt 1
{
TH0 = 0xdc;
TL0 = 0x00; //11.0592M 10MS
if(SystemTime > 0)SystemTime--;
}
void main(void)
{
Sysinit();
CanInit();
if(CanTest()) LED2 = 0; //CAN自检成功,点亮LED2
if(CH372_Init()) LED3 = 0; //USB成功,点亮LED3
while(1)
{
if(!CH372_INT)
{
CH372Interrupt(); //处理USB伪中断
}
if(USB_RecFlag)
{ //收到USB总线发来的数据,转发到CAN总线上
EX0 = 0;
if(CanTransmitMessage(USB_Buff))
{
USB_RecFlag = 0; //发送成功,清楚USB接收标志
}
EX0 = 1;
}
if(bCAN_RecSuccFlag)
{ //收到CAN总线发来的数据
EX1 = 0;
bCAN_RecSuccFlag = 0;
USB_Send_Data(CAN_ReBuf,cCanRecLen);
EX1 = 1;
}
if(SystemTime==0) //系统指示灯
{
LED1 = !LED1;
SystemTime = 50; //闪烁周期为1s
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -