📄 main.c.svn-base
字号:
#include<msp430x13x.h>
#include"..\inc\resources.h"
#include"..\inc\globalvar.h"
#include"..\inc\const_def.h"
#include"..\inc\flashfunc.h"
#include"..\inc\config.h"
#include"..\inc\disdata.h"
#include"..\inc\ledcomm.h"
extern unsigned int set_run( void );
extern unsigned int rpm_to_rcf(unsigned int rpm);
extern unsigned int hlp_init(void);
extern unsigned int send_comm\
( unsigned int comm,unsigned int p1,unsigned int p2 );
unsigned int get_key( void );
// timer_A interrupt service routine
#pragma vector=TIMERA1_VECTOR
__interrupt void timer_a_isr (void)
{
static unsigned char t;
asm("ADD &0x012E,PC"); //Add offset to Jump table
asm("RETI"); //TAIV@(0x012E)
asm("RETI");
asm("RETI");
asm("RETI");
asm("RETI");
if( ++t > 9){ //250ms
t = 0;
if ( ++second > 3 ){ //1s
second = 0;
if( run_timer > 0 )
run_timer--;
if(rl_delay_time > 0 )
rl_delay_time--;
}
int_state |= INT_TIMERA; //set int flag
LPM1_EXIT;
}
//25ms
if( systimer0 != 0 ) systimer0--;
//for key
if( systimer_key != 0 ){
systimer_key--;
if(( systimer_key == 18 )||( systimer_key == 20 )){
KEY_OUT = KEY_SEG0;
if( KEY_IN != 0 ){
key0 = KEY_IN;
}else{
KEY_OUT = KEY_SEG1;
if( KEY_IN != 0 ){
key0 = 0x0100 | KEY_IN;
}else{
KEY_OUT = KEY_SEG2;
if( KEY_IN != 0 )
key0 = 0x0200 | KEY_IN;
}
}
KEY_OUT = 0x00;
if( systimer_key == 20 )
key1 = key0;
else{
if( key1 == key0 ){
int_state |= INT_KEY;
LPM1_EXIT;
}
}
}
if( systimer_key == 1 ){
clr_P2intflg_();
p2_int_en_();
}
}
}
// timer_B interrupt service routine
#pragma vector=TIMERB1_VECTOR
__interrupt void timer_b_isr (void)
{
/*****************1S=32768hz******************
* rate measure
* 32k * 60
* rpm = -------------
* n
* n = (num[1] - num[0]) * 32k - num_cap[0] + num_cap[1]
*
***********************************/
/*******************1S=4mhz****************
* rate measure
* 1M * 60
* rpm = -------------
* n
* n = (num[1] - num[0]) * 50K - num_cap[0] + num_cap[1]
*
***********************************/
unsigned long i;
switch( TBIV ){
case 0x02:
if( ++num0 > 1) num0 = 0 ;
if(num0 == 0){
num[0] = num_32k;
num_cap[0] = TBCCR1;
}
if(num0 == 1){
//close int
TBCTL &= ~TBIE;
TBCCTL1 &= ~CCIE;
num[1] = num_32k;
num_cap[1] = TBCCR1;
if(num[0] == num[1]){
smpl_rate = (unsigned long)(60*1000000) /\
(unsigned long)\
( num_cap[1] - num_cap[0]);
}else{
i = ((unsigned long)(num[1]-num[0])) * \
(unsigned long)50000 \
- (unsigned long)num_cap[0]\
+ (unsigned long)num_cap[1];
smpl_rate = (unsigned long)(60*1000000)\
/i;
}
//open int
TBCTL |= TBIE;
TBCCTL1 |= CCIE;
}
/**********************
if( ++num0 > 1) num0 = 0 ;
if( num0 ==0 ){
set_rl_(RL3,RL);
rl_load_(); //refrigeration
}
if( num0 ==1 ){
clr_rl_(RL3,RL);
rl_load_(); //stop refrigeration
}
**************************/
break;
case 0x0e:
num_32k++;
break;
default:
break;
}
}
// UART0 interrupt service routine
#pragma vector=UART0TX_VECTOR
__interrupt void uart0_tx_isr (void)
{
if( trn[txnumber] == 0xAA){
rxnumber = 0;
TX_state();
rcv_pkg_ok = FALSE;
}else{
U0TXBUF = trn[ txnumber++ ]; //清中断标志
if( trn[txnumber] == 0x55 )// 准备发送下一个
txnumber = 0;
}
}
// UART0 interrupt service routine
#pragma vector=UART0RX_VECTOR
__interrupt void uart0_rx_isr (void)
{
unsigned char i;
i = U0RXBUF; //清中断标志
if(rxflag == 0){
if( i == ':' ){
rxflag = 0xaa;
rcv[rxnumber++] = i;
}
}else{
rcv[rxnumber++] = i;
if( rxnumber > 49){
rxnumber = 0;
rxflag = 0;
}
if( i == 0x0a ){
rcv_pkg_ok = TRUE;
rxflag = 0;
}
}
}
// ADC12 interrupt service routine
/*#pragma vector=ADC_VECTOR
__interrupt void adc12_isr (void)
{
adc_data[adc_counter] = ADC12MEM0;
if( adc_counter == 7){
adc_counter = 0;
ADC12IFG = 0;
}else if( adc_counter == 6){
ADC12CTL0 &= ~ENC;
adc_counter++;
}else{
adc_counter++;
}
}
*/
// Port 2 interrupt service routine
#pragma vector=PORT2_VECTOR
__interrupt void port_2_isr (void)
{
clr_P2intflg_(); //清中断标志
p2_int_ds_(); //禁止P2中断
systimer_key = 25;
//int_state |= INT_PORT2; //set int flag
//LPM1_EXIT; // Clear CPUOFF+SCG1+SCG0 bit from 0(SR)
}
//////receive data from the PC////////
void RX_comm(void)
{///state,setting,sensors' select/////
}
///////send data to the PC///////
void TX_stata(void)
{///include channel ,temperature,sensors,setting////
}
//////////////////////////////////////////////
void TEMP_COV( void )
{
if( ( TEMP | 0x7f ) == 0x7f )
{
TEMP_L = TEMP%10;//取个位 余数
TEMP_H = TEMP/10;//取十位 模
}
if ( ( TEMP & 0x80 ) == 0x80 )
{//////////负温度/////////
TEMP_L = ( ~TEMP + 1 )%10;//取个位 余数
TEMP_H = ( ~TEMP + 1 )/10;//取十位 模
}
}
void display( void )
{
if( dis_state == 0xff )
{
//////////////开机指示灯亮1s///////
set_led_(P2_CON_WLED_SS,P2_CON);//外部搜索加热启动指示 SS=QWJ
set_led_(P2_CON_WLED_GJ,P2_CON);//外部攻击加热启动指示 GJ=WG
sysdelay( 50 );//延时1s后熄灭?????
clr_led_(P2_CON_WLED_SS,P2_CON);
clr_led_(P2_CON_WLED_GJ,P2_CON);
dis_state == 0xaa;//判断是否为开机状态
} else {
///传感器故障则灯闪烁//////////////
///??????????????????????????????????
//led 温度显示//
switch( TEMP_L )
{
case 0:
LED_OUT_L = 0xc0;//个位
case 1:
LED_OUT_L = 0xf9;//个位
case 2:
LED_OUT_L = 0xa4;//个位
case 3:
LED_OUT_L = 0xb0;//个位
case 4:
LED_OUT_L = 0x89;//个位
case 5:
LED_OUT_L = 0x92;//个位
case 6:
LED_OUT_L = 0x82;//个位
case 7:
LED_OUT_L = 0xf8;//个位
case 8:
LED_OUT_L = 0x80;//个位
case 9:
LED_OUT_L = 0x90;//个位
break;
default:break;
}
switch( TEMP_H )
{
case 0:
LED_OUT_H = 0xc0;//十位
case 1:
LED_OUT_H = 0xf9;//十位
case 2:
LED_OUT_H = 0xa4;//十位
case 3:
LED_OUT_H = 0xb0;//十位
case 4:
LED_OUT_H = 0x89;//十位
case 5:
LED_OUT_H = 0x92;//十位
case 6:
LED_OUT_H = 0x82;//十位
case 7:
LED_OUT_H = 0xf8;//十位
case 8:
LED_OUT_H = 0x80;//十位
case 9:
LED_OUT_H = 0x90;//十位
break;
default:break;
}
if( ( TEMP & 0x80 ) == 0x80 )
set_led_(P2_CON_LED_N,P2_CON);//低于零度符号显示
else clr_led_(P2_CON_LED_N,P2_CON);
// LED_OUT_H = Hdis_( TEMP_H );//十位???????????
// LED_OUT_L = Hdis_( TEMP_L );//个位??????????
//??????key??key????key????key???????????//////////
if( key == KEY_SS )//搜索潜望镜加热指示灯控制
{
set_led_(P2_CON_WLED_SS,P2_CON);
set_led_(P2_CON_LED_SS,P2_CON);
}else {
clr_led_(P2_CON_WLED_SS,P2_CON);
clr_led_(P2_CON_LED_SS,P2_CON);
}
if( key == KEY_GJ )//攻击潜望镜机诶若指示灯控制
{
set_led_(P2_CON_WLED_GJ,P2_CON);
set_led_(P2_CON_LED_GJ,P2_CON);
} else {
clr_led_(P2_CON_WLED_GJ,P2_CON);
clr_led_(P2_CON_LED_GJ,P2_CON);
}
//////////加热保温灯的点亮Heat_flg????????Hold_flg???????
if( Heat_flg == 1 ) set_con_(P3_CON_LED_HEAT,P3_CON);
else clr_con_(P3_CON_LED_HEAT,P3_CON);
//????????????????????待机时保温灯闪烁???????????????????????????????
if( Hold_flg == 1 ) set_con_(P3_CON_LED_HOLD,P3_CON);
else clr_con_(P3_CON_LED_HOLD,P3_CON);
///////////////// 2只传感器的指示灯///sensor1_err///sensor1?/////////
if( ( sensor1_err == 0 ) || ( sensor1 == 1 ) ) set_con_(P3_CON_LED_WG1,P3_CON);
else clr_con_(P3_CON_LED_WG1,P3_CON);
if( ( sensor2_err == 0 ) || ( sensor2 == 1 ) ) set_con_(P3_CON_LED_WG2,P3_CON);
else clr_con_(P3_CON_LED_WG2,P3_CON);
}
}
int get_temp( void )
{
int t,t0,k,dt0;
adc_dt_calculate();
t = (int)adc_data[0];
if( t > TEMP_D30 ){
t0 = 40;
k = TEMP_K40;
dt0 = TEMP_D40;
}else if( t > TEMP_D10 ){
t0 = 20;
k = TEMP_K20;
dt0 = TEMP_D20;
}else if( t > TEMP_DF10 ){
t0 = 0;
k = TEMP_K0;
dt0 = TEMP_D0;
}else{
t0 = -20;
k = TEMP_KF20;
dt0 = TEMP_DF20;
}
t = (( t - dt0 ) * 16 )/ k + t0;
return ( t );
}
void timer_a_routine( void )
{
int t_new;
static int t_old;
static unsigned int t_num;
if ((second & 1) == 0 ){
display();
}
if ((second & 3) == 0 ){ //one per second
//temprature control
t_new = get_temp();
if(( t_new > -50 ) && ( t_new < 100 )){
if( t_old != t_new ){
t_old = t_new;
t_num = 0;
}else{
if( t_num++ > 2 ){
txn = t_old;
t_num = 0;
}
}
// exec
t_new = ref_temp;
if( ysj_exec == YSJ_STOP){
if( txn >= (t_new) ){
rl_delay_time = 15;
ysj_exec = YSJ_RUN_DL; //refrigeration
}
}
if( (t_new - 1) >= txn ){
ysj_exec = YSJ_STOP; //stop refrigeration
}
//close system
if( txn >= 42 ){
//if( send_comm( STOP,NONE_P,NONE_P ) == 0 )
//sysstate = SYS_RUN_DEC_SEG;
}
}
// temprature Sampling start
ADC12CTL0 |= ADC12SC + ENC;
}
//run control
if( sysstate > SYS_RUN ){
run_control();
}
}
void varible_init( void )
{
adc_counter = 0;
//ysj_exec = YSJ_STOP;
flash = 0;
sensor1_err = 0;//传感器1正常
sensor2_err = 0;//传感器2正常
Heat_flg = 0;
Hold_flg = 0;
dis_state = 0xff;
//sysstate_set = 0xff;
//sysstate_run = 0xff;
//rate_dis_st_old = 0xff;
}
void main( void )
{
msp430config();
delay(0xfffe);
delay(0xfffe);
//key_init();
varible_init();//
//delay 2.5s
sysdelay( 120 );
while( systimer0 != 0);
//check hlp
//if( hlp_init() != 0 ){
//WriteGRBL(ADDGRSCR0 + MAXCOL * 100 + 7, xttxgz);
//while(1);
//}
while(1){
display();
///SAMPLE BIT
if( (int_state & INT_TIMERA) == INT_TIMERA ){
timer_a_routine();
int_state &= ~INT_TIMERA; //clear int flag
}
//port2 interrrupt
//if( (int_state & INT_PORT2) == INT_PORT2 ){
//systimer_key = 16;
//int_state &= ~INT_PORT2; //clear int flag
//}
//key
if( (int_state & INT_KEY) == INT_KEY ){
key_handle();
int_state &= ~INT_KEY; //clear int flag
}
if((ysj_exec == YSJ_RUN_DL)&&(rl_delay_time == 0)){
ysj_exec = YSJ_RUN;
}
if( int_state == 0 ){
/////// YSJ ////////
if( ysj_exec == YSJ_RUN ){
set_rl_(RL_PWR,RL);
}else if( ysj_exec == YSJ_STOP ){
clr_rl_(RL_PWR,RL);
}
LPM1; //cpu idle
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -