?? 1001.c
字號:
#include<avr/io.h>
#include<avr/eeprom.h>
#include<avr/wdt.h>
#include<avr/pgmspace.h>
#include<avr/interrupt.h>
#include <compat/ina90.h>
#define T1 (1<<5)
#define notready 2
#define juncvcc 3
uint8_t cpmode,xfnum;
uint16_t stage_drop;uint8_t xfnum_drop;
uint8_t t0cont,space,table;
volatile uint16_t stage,stage1;
prog_char A[1600]={
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //300-319 90
255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,254,254,253,253, //320-339 96
253,253,253,253,253,252,252,252,252,252,252,251,251,251,251,251,251,250,250,250,//102
250,250,249,249,249,249,248,248,248,248,248,247,247,247,247,246,246,246,245,245,//108
245,245,244,244,244,244,243,243,243,242,242,242,241,241,241,240,240,240,240,239,//114
239,239,238,238,237,237,237,236,236,236,235,235,235,234,234,233,233,233,232,232,//120
232,231,231,230,230,230,229,229,228,228,227,227,227,226,226,225,225,224,224,224,//126
223,223,222,222,221,221,220,220,219,219,219,218,218,217,217,216,216,215,215,214,//132
214,213,213,212,212,211,211,210,210,209,209,208,208,207,206,206,205,205,204,204,//138
203,203,202,202,201,201,200,199,199,198,198,197,197,196,195,195,194,194,193,193,//144 200
192,191,191,190,190,189,188,188,187,187,186,186,185,184,184,183,183,182,181,181,//150
180,179,179,178,178,177,176,176,175,175,174,173,173,172,171,171,170,169,169,168,//156
168,167,166,166,165,164,164,163,162,162,161,160,160,159,159,158,157,157,156,155,//162
155,154,153,153,152,151,151,152,149,149,148,147,147,146,145,145,144,143,143,142,//168
141,141,140,139,139,138,137,137,136,135,135,134,133,133,132,131,131,130,129,129,//174 300
128,127,127,126,125,125,124,123,123,122,121,121,120,119,119,118,117,117,116,115,//180
115,114,113,113,112,111,111,110,109,109,108,107,107,106,105,105,104,104,103,102,//186
101,101,100, 99, 99, 98, 97, 97, 96, 96, 95, 94, 94, 93, 92, 92, 91, 90, 90, 89, //192
88, 88, 87, 87, 86, 85, 85, 84, 83, 83, 82, 82, 81 ,80, 80, 79, 78, 78, 77, 77,//198
76, 75, 75, 74, 74, 73, 72, 72, 71, 70, 70, 69, 69, 68, 68, 67, 66, 66, 65, 65,//204 400
64, 63, 63, 62, 62, 61, 61, 60, 59, 59, 58, 58, 57, 57, 56, 56, 55, 54, 54, 53, //210
53, 52, 52, 51, 51, 50, 50, 49, 49, 48, 47, 47, 46, 46, 45, 45, 44, 44, 43, 43, //216
42, 42, 41, 41, 40, 40, 39, 39, 38, 38, 37, 37, 37, 36, 36, 35, 35, 34, 34, 33,//222
33, 33, 32, 32, 32, 31, 31, 30, 30, 29, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, //228
24, 24, 24, 23, 23, 23, 22, 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 17,//234 500
17, 17, 16, 16, 16, 16, 15, 15, 15, 14, 14, 14, 13, 13, 13, 12, 12, 12, 12, 11,//240
11, 11, 11, 10, 10, 10, 9, 9, 9, 9, 9 , 8, 8 , 8, 8, 7, 7, 7 ,7 ,6, //246
6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3,//252
3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 1 , 1 , 1, 1, 1, 1 , 1, 1, 1,//258
1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,//264 600
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,//270
1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 2, 2, 3, 3, //276
3, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 5, 5, 5, 5, 5, 5, 6, 6, 6, //282
6, 6, 7, 7, 7 ,7 , 8, 8 , 8, 8, 9, 9, 9, 9, 9 , 10, 10, 10, 11, 11, //288
11, 11, 12, 12, 12, 12, 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, //294
17, 17, 18, 18, 19, 19, 19, 20, 20, 20, 21, 21, 21, 22, 22, 23, 23, 23, 24, 24,//300
24, 25, 25, 26, 26, 27, 27, 28, 28, 29, 29, 29, 30, 30, 31, 31, 32, 32, 32, 33,//306
33, 33, 34, 34, 35, 35, 36, 36, 37, 37, 37, 38, 38, 39, 39, 40, 40, 41, 41, 42,//312
42, 43, 43, 44, 44, 45, 45, 46, 46, 47, 47, 48, 49, 49, 50, 50, 51, 51, 52, 52,//318
53, 53, 54, 54, 55, 56, 56, 57, 57, 58, 58, 59, 59, 60, 61, 61, 62, 62, 63, 63,//324
64, 65, 65, 66, 66, 67, 68, 68, 69, 69, 70, 70, 71, 72, 72, 73, 74, 74, 75, 75,//330
76, 77, 77, 78, 78, 79, 80, 80, 81, 82, 82, 83, 83, 84, 85, 85, 86, 87, 87, 88, //336
88, 89, 90, 90, 91, 92, 92, 93, 94, 94, 95, 96, 96, 97, 97, 98, 99, 99, 100,101,//342
101, 102,103, 104,104,105,105,106,107,107,108,109,109,110,111,111,112,113,113,114,//348
115, 115,116, 117,117,118,119,119,120,121,121,122,123,123,124,125,125,126,127,127,//354
128, 129,129, 130,131,131,132,133,133,134,135,135,136,137,137,138,139,139,140,141,//360
141, 142,143,143,144,145,145,146,147,147,148,149,149,150,151,151,152,153,153,154, //6
155, 155,156,157,157,158,159,159,160,160,161,162,162,163,164,164,165,166,166,167,//12
168, 168,169,169,170,171,171,172,173,173,174,175,175,176,176,177,178,178,179,179,//18
180, 181,181,182,183,183,184,184,185,186,186,187,187,188,188,189,190,190,191,191,//24
192, 193,193,194,194,195,195,196,197,197,198,198,199,199,200,201,201,202,202,203,//30
203, 204,204,205,205,206,206,207,208,208,209,209,210,210,211,211,212,212,213,213,//36
214, 214,215,215,216,216,217,217,218,218,219,219,219,220,220,221,221,222,222,223,//42
223, 224,224,224,225,225,226,226,227,227,227,228,228,229,229,230,230,230,231,231,//48
232, 232,232,233,233,233,234,234,235,235,235,236,236,236,237,237,237,238,238,239,//54
239, 239,240,240,240,240,241,241,241,242,242,242,243,243,243,244,244,244,244,245,//60
245, 245,245,246,246,246,247,247,247,247,248,248,248,248,248,249,249,249,249,250,//66
250, 250,250,250,251,251,251,251,251,251,252,252,252,252,252,252,253,253,253,253,//72
253, 253,253,254,254,254,254,254,254,254,254,255,255,255,255,255,255,255,255,255,//78
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, 255,//84
255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255,255, //300-319 90
255,255,255,255,255,255,255,255,255,255,254,254,254,254,254,254,254,254,253,253, //320-339 96
253,253,253,253,253,252,252,252,252,252,252,251,251,251,251,251,251,250,250,250,//102
250,250,249,249,249,249,248,248,248,248,248,247,247,247,247,246,246,246,245,245,//108
245,245,244,244,244,244,243,243,243,242,242,242,241,241,241,240,240,240,240,239,//114
239,239,238,238,237,237,237,236,236,236,235,235,235,234,234,233,233,233,232,232,//120
232,231,231,230,230,230,229,229,228,228,227,227,227,226,226,225,225,224,224,224,//126
223,223,222,222,221,221,220,220,219,219,219,218,218,217,217,216,216,215,215,214,//132
214,213,213,212,212,211,211,210,210,209,209,208,208,207,206,206,205,205,204,204,//138
203,203,202,202,201,201,200,199,199,198,198,197,197,196,195,195,194,194,193,193,//144 200
192,191,191,190,190,189,188,188,187,187,186,186,185,184,184,183,183,182,181,181,//150
180,179,179,178,178,177,176,176,175,175,174,173,173,172,171,171,170,169,169,168,//156
168,167,166,166,165,164,164,163,162,162,161,160,160,159,159,158,157,157,156,155,//162
155,154,153,153,152,151,151,152,149,149,148,147,147,146,145,145,144,143,143,142,//168
141,141,140,139,139,138,137,137,136,135,135,134,133,133,132,131,131,130,129,129,//174 300
128,127,127,126,125,125,124,123,123,122,121,121,120,119,119,118,117,117,116,115,//180
115,114,113,113,112,111,111,110,109,109,108,107,107,106,105,105,104,104,103,102,//186
101,101,100, 99, 99, 98, 97, 97, 96, 96, 95, 94, 94, 93, 92, 92, 91, 90, 90, 89, //192
88, 88, 87, 87, 86, 85, 85, 84, 83, 83, 82, 82, 81 ,80, 80, 79, 78, 78, 77, 77,//198
76, 75, 75, 74, 74, 73, 72, 72, 71, 70, 70, 69, 69, 68, 68, 67, 66, 66, 65, 65//204
};
void delay1ms(uint16_t k) //;16m -0.5s
{
uint16_t i;
uint8_t m,n;
for(i=0;i<k;i++){
for(m=0;m<4;m++)
for(n=0;n<88;n++);
}
}
//電流初始化
void initialcurrent(void)
{
asm volatile("cbi 0x05,2"::);//daca 0x08=portc
PORTD=pgm_read_byte(A+stage);
asm volatile("cbi 0x05,1"::);//wr
asm volatile("sbi 0x05,1"::);//wr
stage1=stage+400;
asm volatile("sbi 0x05,2"::);//daca
PORTD=pgm_read_byte(A+stage1);
asm volatile("cbi 0x05,1"::);//wr
asm volatile("sbi 0x05,1"::);//wr
TCNT0=0;
TCCR0B=0X05;
t0cont=0;
}
void loadbm(void)
{
xfnum=PIND;
xfnum&=0x0f;
switch(xfnum)
{
case 0x00: space=150;table=0;break;
case 0x08: space=120;table=0;break;
case 0x04: space=100;table=0;break;
case 0x0c: space=75; table=0;break;
case 0x02: space=60; table=0;break;
case 0x0a: space=50; table=0;break;
case 0x06: space=50; table=0;break;
case 0x01: space=25; table=0;break;
case 0x09: space=20; table=0;break;
case 0x05: space=15; table=0;break;
case 0x0d: space=12; table=0;break;
case 0x03: space=10; table=0;break;
case 0x0b: space=10; table=0;break;
case 0x07: space=10; table=0;break;
case 0x0f: space=6; table=0;break;
default: space=0; table=0;break;
}
}
void loaddropdata(void)
{
while(!eeprom_is_ready());
xfnum_drop=eeprom_read_byte(0x10);
while(!eeprom_is_ready());
stage_drop=eeprom_read_word(0x18);
if(stage_drop==0xffff) stage_drop=0;
else if(stage_drop>1200) stage=0;
if(xfnum_drop!=xfnum) stage_drop=0;
while(!eeprom_is_ready());//在這里保存省去了掉電時保存的時間。
eeprom_write_byte(0x10,xfnum);
}
int main(void)
{
PORTC=0; //notready=0,上電燈亮
DDRC=0b11111110; //pc5scl,sda,juncvcc,notready,autohalf,dirin
PORTB=0b11111111;
DDRB=0b00100110;//pb5sck,powererr,brake,daca,wr,cpin
PORTD=0X00;//
DDRD =0xE0; //配置 1是輸出*/
loadbm();
cpmode=0;
if(bit_is_set(PIND,4)){
cpmode|=0x01;
PCMSK1=0X01;//DIR電平中斷使能
}
//prerare lici
loaddropdata();
PORTD=0X00;//
DDRD =0xFF; //配置 1是輸出
stage=stage_drop;
stage1=stage+400;
initialcurrent();
delay1ms(50);
PORTC|=(1<<juncvcc);
delay1ms(2000);
table=0;
PORTC|=(1<<notready);//notready=1,燈滅;
delay1ms(400);
//interrupt enable
TIMSK0=1;
sei(); //開總中斷
_NOP();
_NOP();
cpmode=1;//test
PCMSK0=1;
PCMSK1=1;
PCICR=0X03; //PB,PC口引腳電平平變化中斷允許.
//while(1); //等待中斷
while(bit_is_clear(PINB,4)); //high trigger
cli();
while(!eeprom_is_ready());
eeprom_write_word(0x18,stage);
asm volatile("cbi 0x08,2"::);//notready
while(1);
}
//cp
SIGNAL(SIG_PIN_CHANGE0){
asm volatile("cbi 0x08,1"::);//取消自動半流
if(bit_is_set(PINB,0)){
if(!cpmode){
if(bit_is_clear(PINC,0)){ //dir=0,default
stage+=space;
if(stage==1200) stage=0;
}
else {
if(stage==0) stage=1200;
stage-=space;
}
}
else{
stage+=space;
if(stage==1200) stage=0;
}
asm volatile("cbi 0x05,2"::);//daca 0x08=portc
PORTD=pgm_read_byte(A+stage);
asm volatile("cbi 0x05,1"::);//wr
asm volatile("sbi 0x05,1"::);//wr
stage1=stage+400;
asm volatile("sbi 0x05,2"::);//daca
PORTD=pgm_read_byte(A+stage1);
asm volatile("cbi 0x05,1"::);//wr
asm volatile("sbi 0x05,1"::);//wr
TCNT0=0;
TCCR0B=0X05;
t0cont=0;
}
}
//dir
SIGNAL(SIG_PIN_CHANGE1){//dir
if(bit_is_set(PINC,0)){
asm volatile("cbi 0x08,1"::);//取消自動半流
if(stage==0) stage=1200;
stage-=space;
asm volatile("cbi 0x05,2"::);//daca 0x08=portc
PORTD=pgm_read_byte(A+stage);
asm volatile("cbi 0x05,1"::);//wr
asm volatile("sbi 0x05,1"::);//wr
stage1=stage+400;
asm volatile("sbi 0x05,2"::);//daca
PORTD=pgm_read_byte(A+stage1);
asm volatile("cbi 0x05,1"::);//wr
asm volatile("sbi 0x05,1"::);//wr
TCNT0=0;
TCCR0B=0X05;
t0cont=0;
}
}
//autohalf
SIGNAL(SIG_OVERFLOW0)
{
if(++t0cont==100){
t0cont=0;
asm volatile("sbi 0x08,1"::);//autohalf
TCCR0B=0X00;
while(!eeprom_is_ready());
eeprom_write_word(0x18,stage);
}
}
//priority:fo-低觸發(fā)最高,undervoltage-低觸發(fā)次高 ,overvol低觸發(fā)再次之,overhot高觸發(fā)最低
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -