📄 shixu.c
字号:
/*
-----------------文件信息---------------------------------------------
文 件 名: shixu.c
版 本: V1.0
创 建 人: 张荣贤
最后修改日期: 2005-12
描 述: 车道灯时序控制板(首信合作项目)
-----------------历史版本信息-----------------------------------------
创 建 人:
版 本:
日 期:
描 述: 原始版本
-----------------当前版本修订-----------------------------------------
修 改 人:
版 本:
日 期:
描 述:
----------------------------------------------------------------------
*/
/*
**********************************************************************
引用外部变量、结构、函数声明
**********************************************************************
*/
extern void DS887_Init (void);
extern void set_alarmtime(unsigned char hh,unsigned char mm);
extern void set_normaltime(void);
extern bit read_time(void);
extern struct TIME887 xdata t_rd;
extern struct TIME887 xdata t_wr;
extern bit time_OUT;
extern bit rx_UART0;
extern unsigned int xdata rx232_len0;
extern void deal_UART0(void);
extern unsigned char xdata rbuff_UART0[100];
extern bit rx_UART1;
extern unsigned int xdata rx232_len1;
extern void deal_UART1(void);
extern unsigned char xdata rbuff_UART1[100];
extern bit rx_zonghe;
extern unsigned char SJA1000_Init(void);
extern void transmit_CAN(void);
extern unsigned char xdata sbuff_CAN[11];
extern unsigned char xdata shixu_buff[11];
extern unsigned char xdata qudong_buff[10];
extern unsigned char xdata zonghe_buff[10];
extern unsigned char xdata tongx1_buff[10];
extern unsigned char xdata tongx2_buff[10];
extern unsigned char xdata jiance_buff[10];
/*
**********************************************************************
*头文件包含信息
**********************************************************************
*/
#include "paradef.h"
/*
**********************************************************************
本地参数定义,数据结构定义
**********************************************************************
*/
volatile unsigned char xdata qudong_addr _at_ 0x02;
volatile unsigned char xdata zonghe_addr _at_ 0x03;
volatile unsigned char xdata tongx1_addr _at_ 0x04;
volatile unsigned char xdata tongx2_addr _at_ 0x05;
volatile unsigned char xdata jiance_addr _at_ 0x06;
volatile unsigned char xdata bus[5];/*CAN总线状态*/
volatile unsigned char xdata err[5];/*CAN错误计数*/
volatile unsigned char xdata err_unit;/*故障驱动单元号*/
volatile struct Recorde xdata info;
bit eve_r;
/*历史记录时间,依次为:
授权设置,进入非自动,返回自动,电压恢复正常,电压高,电压低,
门1开,门1关,门2开,门2关,门3开,门3关*/
struct TIME887 xdata event[12];
//unsigned char const code leap[13] = {0,31,29,31,30,31,30,31,31,30,31,30,31};
//unsigned char const code nleap[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31};
unsigned char xdata led_now;
unsigned char xdata t0_count;
unsigned char xdata millisecond;
bit dog_feed,sja_check;
unsigned char bdata door_state;
sbit door1 = door_state^0;
sbit door2 = door_state^1;
sbit door3 = door_state^2;
bit door_EN,lamp_EN,iotx_EN,loop_EN,clock_EN;
struct TIME887 xdata runtime;
bit in_hand,in_uart;
unsigned char xdata out_unit,out_value;
bit out_ON;
unsigned char xdata trns_freq,flsh_times;
unsigned char xdata wait_time,intev_time;
bit symb_out,slf_tst;
/*
**********************************************************************
函数原型声明
**********************************************************************
*/
void watchdog(void);
void delay(unsigned char count);
void rep_time(void);
void check_sja(void);
void tx_CAN(bit );
void read_door(void);
void time_clock(void);
void power_on(void);
void begin(void);
void CPU_Init(void);
void main(void);
void timer0(void);
/*
**********************************************************************
函数:void watchdog(void)
功能:看门狗
**********************************************************************
*/
void watchdog(void)
{
dog_feed = 0;
WDTDOG_LED = !WDTDOG_LED;
}
/*
**********************************************************************
函数:void delay(unsigned char count)
功能:延时
入口:延时计数值
说明:1->延时1,011us,100->延时99,966us,200->延时199,920us
**********************************************************************
*/
void delay(unsigned char count)
{
unsigned char xdata i;
for(; count > 0; count--)
for(i = 0; i < 228; i++);
}
/*
**********************************************************************
函数:void rep_time(void)
功能:利用定时器0计算时钟
说明:时钟芯片出错后用该时钟替代恢复
**********************************************************************
*/
void rep_time(void)
{
unsigned char xdata i;
if(millisecond > 19)
{
i = millisecond/20;
millisecond %= 20;
runtime.seconds += i;
if(runtime.seconds > 59)
{
runtime.seconds %= 60;
runtime.minute++;
if(runtime.minute > 59)
{
runtime.minute = 0;
runtime.hour++;
if(runtime.hour > 23)
{
runtime.hour = 0;
runtime.date++;
runtime.week++;
if(runtime.week > 7)
{
runtime.week = 1;
}
if(runtime.month == 2)
{
if((2000+runtime.yearl)%4 == 0)
{
i = 29;
}
else
{
i = 28;
}
}
else if(((runtime.month <= 7)&&(runtime.month%2 == 0))
||(((runtime.month >= 8)&&(runtime.month%2 == 1))))
{
i=30;
}
else
{
i=31;
}
if(runtime.date >= i)
{
runtime.date = 1;
runtime.month++;
if(runtime.month > 12)
{
runtime.month = 1;
runtime.yearl++;
}
}
}
}
}
}
}
/*
**********************************************************************
函数:void check_sja(void)
功能:sja1000状态监测
**********************************************************************
*/
void check_sja(void)
{
unsigned char data i;
sja_check = 0;
if((XBYTE[0x8000+2] > 0x0C)
||(XBYTE[0x8000+6] != 0x0C)
||(XBYTE[0x8000+7] != 0x5F)
||(XBYTE[0x8000+8] != 0x1A)
||(XBYTE[0x8000+9] != 0xAA))
{
i = SJA1000_Init();
}
}
/*
**********************************************************************
函数:void tx_CAN(bit symbol)
功能:CAN发送,参数为1,要求驱动控制板必须存在且回答,为0,表示其他
说明:通用发送,并进行总线判断
**********************************************************************
*/
void tx_CAN(bit symbol)
{
unsigned char data i,j;
j = sbuff_CAN[0];
*((volatile unsigned char xdata *)j) = OFF;
again:
transmit_CAN();
i = t0_count;
while(1)
{
if(dog_feed) watchdog();
if(rx_UART0) deal_UART0();
if(rx_UART1) deal_UART1();
if(*((volatile unsigned char xdata *)j) == ON)
{
bus[j-2] = ON;
err[j-2] = 0;
break;
}
if((t0_count-i) >= 2)
{
err[j-2]++;
if(err[j-2] > 6)
{
bus[j-2] = OFF;
err[j-2] = 0;
}
if(!symbol)
{
break;
}
goto again;
}
}
}
/*
**********************************************************************
函数:void test_lamp(void)
功能:灯具自诊断
说明:
**********************************************************************
*/
void test_lamp(void)
{
sbuff_CAN[0] = QUDONG;
sbuff_CAN[1] = LAMP_TEST;
sbuff_CAN[2] = 2;
memcpy(sbuff_CAN+3,rbuff_UART0+3,2);
tx_CAN(1);
}
/*
**********************************************************************
函数:void output_symb(void)
功能:可变标志控制
说明:
**********************************************************************
*/
void output_symb(void)
{
sbuff_CAN[0] = QUDONG;
sbuff_CAN[1] = SYMB_CTRL;
sbuff_CAN[2] = 2;
memcpy(sbuff_CAN+3,rbuff_UART0+3,2);
tx_CAN(1);
}
/*
**********************************************************************
函数:void uart_ctrl(void)
功能:上端控制
说明:
**********************************************************************
*/
void uart_ctrl(void)
{
in_uart = 0;
sbuff_CAN[0] = QUDONG;
sbuff_CAN[1] = HEAD_CTRL;
sbuff_CAN[2] = 5;
memcpy(sbuff_CAN+3,rbuff_UART0+3,5);
tx_CAN(1);
}
/*
**********************************************************************
函数:void uart0_ctrl(void)
功能:串口0控制车道
说明:
**********************************************************************
*/
void uart0_ctrl(void)
{
sbuff_CAN[0] = QUDONG;
sbuff_CAN[1] = LANE_CTRL;
sbuff_CAN[2] = 2;
sbuff_CAN[3] = rbuff_UART0[4];/*车道状态*/
sbuff_CAN[4] = rbuff_UART0[3];/*内外环*/
tx_CAN(1);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -