📄 86070410.c
字号:
#include<avr/io8515.h>
#include<avr/pgmspace.h>
#include <compat/ina90.h>
uint8_t dirstate,xfnum;
uint8_t buf[4];
prog_char A[21]={255,254,250,242,232,219,203,186,168,148,128,108,88,70,53,24,14,6,2,0};
prog_char bb[9]={0x08,0x0A,0x02,0x06,0x04,0x05,0x01,0x09,0xff};
uint16_t stage_drop,space_drop;
uint8_t phasea,phaseb,space,table;
volatile uint16_t stage,stage1;
void delay(uint8_t k) //;16m -0.5s
{
uint8_t i,j,m,n;
for(i=0;i<k;i++)
{
for(j=0;j<20;j++)
{
for(m=0;m<200;m++)
{
for(n=0;n<200;n++)
;
}
}
}
}
//电流初始化
void initialcurrent(void)
{
phasea=pgm_read_byte(&A[0]);
phaseb=pgm_read_byte(&A[19]);
PORTC=phasea;
asm volatile("sbi 0x18,2"::);//daca
asm volatile("cbi 0x18,1"::);//wr
asm volatile("sbi 0x18,1"::);//wr
PORTC=phaseb;
asm volatile("cbi 0x18,2"::);//daca
asm volatile("cbi 0x18,1"::);//wr
asm volatile("sbi 0x18,1"::);//wr
}
void loadbm(void)
{
xfnum=PIND;
xfnum&=0x0f;
switch(xfnum)
{
case 0x00: space=150;table=0;break;
case 0x01: space=120;table=0;break;
case 0x02: space=100;table=0;break;
case 0x03: space=10; table=0;break;
default: space=0; table=0;break;
}
}
void loaddropdata(void)
{
uint8_t i;
while(!eeprom_is_ready());
eeprom_read_block(buf,(uint8_t *)0x10,4);
for(i=0;i<4;i++)
{
if(buf[i]>0x20)
buf[i]=0;
}
// stage_drop=buf[0];
// space_drop=buf[1];
dirstate=buf[2];
stage=buf[3];
}
int main(void)
{
PORTC=0X032; //notready=0,上电灯亮
DDRC=0X0f; //PC5(dir)in,PC4(CP)in,PC3(autohalf)out,PC2 (notready)out
//pc1-wr,pc0-daca
//delay(10);
PORTB=0X00;
DDRB=0X28;
PORTB=0X20; //SD=1
//while(bit_is_clear(PINB,2)||bit_is_clear(PINB,4)||bit_is_clear(PINB,0)||bit_is_set(PINB,1));
table=0;
PORTC=0X036;//notready=1,灯灭;
PORTD=0X00;//
DDRD =0xF0; //配置 1是输出
loadbm();
PORTD=0X00;//
DDRD =0xFF; //配置 1是输出
initialcurrent(); //向tlc7528发出电流台阶信号.
// PCICR=0X03; //PB,PC口引脚电平平变化中断允许.
// PCMSK1=0X10;//PC4(CP)电平变化中断使能
// PCMSK0=0X17; //pb0-overhot,pb1-overvol,pb2 -FO,Pb4-undervol
sei(); //开总中断
_NOP();
_NOP();
while(1); //等待中断
}
/*SIGNAL(SIG_PIN_CHANGE1 )//cp
{
if(bit_is_set(PINC,4)) //pc4 (cp)
{
asm volatile("cbi 0x08,3"::);//取消自动半流
if(bit_is_clear(PINC,5)){ //dir=0,default
stage+=space;
if(stage==1200) stage=0;
}
else if(bit_is_set(PINC,5)){//dir=1;
if(stage==0) stage=1200-space;
else stage-=space;
}
if(stage>=800) stage1=stage-800;
else stage1=stage+400;
// }
phasea=pgm_read_byte(&A[stage]);
phaseb=pgm_read_byte(&A[stage1]);
PORTD=phasea;
asm volatile("sbi 0x08,0"::);//daca 0x08=portc
asm volatile("cbi 0x08,1"::);//wr
asm volatile("sbi 0x08,1"::);//wr
PORTD=phaseb;
asm volatile("cbi 0x08,0"::);//daca
asm volatile("cbi 0x08,1"::);//wr
asm volatile("sbi 0x08,1"::);//wr
TCNT1=25536;
TCCR1B=0X04;
// TIMSK1=0X01;
}
}
//SIGNAL(SIG_PIN_CHANGE0)
//{if(bit_is_clear(PINB,2)||bit_is_clear(PINB,4)||bit_is_clear(PINB,0)||bit_is_set(PINB,1))
// {
// asm volatile("cbi 0x05,5"::);//SD ,HIGN VALID,0x05 PORTTB
// asm volatile("sbi 0x05,3"::);//offcurrent
// asm volatile("cbi 0x08,2"::);//notready
// }
// }*/
// SIGNAL(SIG_OVERFLOW1)
//{
// TCNT1=25536;
//asm volatile("sbi 0x12,6"::);//OFFCURRENT PORTD,6
//}
//priority:fo-低触发最高,undervoltage-低触发次高 ,overvol低触发再次之,overhot高触发最低
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -