📄 ftp.c
字号:
u0flag = 1;
}
else if (datain == 0x0D)
{
break;
}
else if (datain == 0x0A)
{
prn_havedata = TRUE;
*pRU0++ = datain;
if((printstate_sn&2)!=2)
{
if ((pRU0 > pTU0)&&((COM0_LEN + pRU0 - pTU0) < 512))
{
printstate_sn = 3;
}
else if ((pRU0 < pTU0)&&((pTU0 - pRU0)< 512))
{
printstate_sn = 3;
}
}
if ( pRU0 >= (COM0+COM0_LEN)) pRU0 = COM0;
break;
}
else
{
*pRU0++ = datain;
if( pRU0 >= (COM0+COM0_LEN) )
pRU0 = COM0;
if( pRU0 >= pTU0 )
datain = pRU0 - pTU0;
else
datain = COM0_LEN + pRU0 - pTU0;
if( datain>=48 )
{
prn_havedata = TRUE;
break;
}
}
break;
case 1://命令处理
prn_cmd = datain;
u0flag = 2;
break;
case 2://命令处理
prn_para1 = datain;
u0flag = 0;
prn_cmd_ok = TRUE;
break;
default:
clr_u0();
break;
}
}
else
{
if (w_spi_sn == 1) //写FLASH状态,
{
wr_length--;
len_rv++;
if(wr_length == 0)
{
ComOutStr("WRITE OK!");
w_spi_sn = 0;
pRU0 = COM0;
u0flag = 0;
CmdOk = FALSE; //清除发送标志
command0 =0; //清除命令字
}
else
{
if((pRU0-COM0)>= COM0_LEN) pRU0 = COM0; //指针调整
*pRU0++ = RXBUF0; //保存接收数据
}
}
else
{
switch(u0flag)
{
case 0: //默认状态
if(RXBUF0 == 0xaa)
{
*pRU0++ = RXBUF0;
u0flag=1;
verify0 = RXBUF0;
}
else
clr_u0();
break;
case 1:
if(RXBUF0 == 0x75)
{
*pRU0++ = RXBUF0;
u0flag=2;
verify0 ^= RXBUF0;
}
else
clr_u0();
break; //帧头检测
case 2:
*pRU0++ = RXBUF0;
command0 = RXBUF0; //存放指令类型
u0flag=3;
verify0 ^= RXBUF0; //异或校验
break;
case 3:
*pRU0++ = RXBUF0;
length0 = RXBUF0; //保存高位数据长度
verify0 ^= RXBUF0;
u0flag=4;
break;
case 4: //保存保留字
*pRU0++ = RXBUF0;
verify0 ^= RXBUF0;
u0flag = 5;
break;
case 5: //接收数据块儿
if(length0 == 0)
{//长度为0的数据帧
*pRU0++ = RXBUF0;
if(verify0 != RXBUF0)
{
command0 = 0xff; //错标示
}
CmdOk = TRUE;
}
else
{
*pRU0++ = RXBUF0;
verify0 ^= RXBUF0;
length0--;
}
break;
default:
clr_u0();
break;
}
}
}
}
//TIMER-A 中断处理程序
#pragma vector=TIMERA0_VECTOR
__interrupt void TimerA_Isr (void)
{
ledflash++;
print_timer++;
if(PAPERWANT)
{
if ((paperwant_sn&2) != 2 )
{
if (nopaper_cnt <100) nopaper_cnt++;
}
}
else
{
if(paperwant_sn == 2)
{
paperwant_sn = 4;
nopaper_cnt = 0;
paperok_sn = 1; //缺纸后重装纸后置位装纸成功标志
}
else
{
paperwant_sn = 4;
nopaper_cnt =0;
}
}
}
//TIMER-B 中断处理程序
#pragma vector=TIMERB0_VECTOR
__interrupt void TimerB_Isr (void)
{
/* TBCTL |= 0x0114; //TBSSEL0 + TBMC0 + TBCLR;//0X0110; //ACLK,0 divider, up mode,
//TBCCTL0 = 0x0010;
TBCCR0 = 328; //周期10ms
TBCCTL1 = OUTMOD_7;
TBCCR1 = 262; //占空比 328/262 = 0.8 //p4.0 实输出到P4.1
TBCCTL2 = OUTMOD_7;
TBCCR2 = 131; //占空比 328/131 = 0.4 //p4.1 实输出到P4.2
*/
}
void initialize_IO(void)///////////change
{
P2DIR = 0x8E; //p2.0口输入状态
P2OUT = 0X82; // pw2 & pw4 置低 TCH置高 VOTHSHUT_DIS + CHIPUNHOLD;
P3DIR = 0x0B; //定义p3.0 为片选信号,初始为高 P3.2 为输入状态
SPI0MO_1;
SPI0CLK_1; // SIMO0 -- H SCLK0 -- H
SPI0_DIS;
P4DIR = 0X03;
P4OUT = 0;
P5DIR = 0x1B; //STE1 + SIMO1 + SCK1 + RUN;
P5OUT = 0;
P6DIR = 0xFF;
P6OUT |= LAT; //Set CLRWDT output
STB_DIS;
}
void initialize_U0(void)
{
ME1 |= (UTXE0 + URXE0); // Enable USART0 TXD/RXD
UTCTL0 |= 0X30; // UCLK = SMCLK
URCTL0 |= 0X08;
UCTL0 =CHAR; // 8-bit/character/Parity enabled.
UBR00 = 0x41; // 8Mhz/115200 - 69.44 0x0045 0x4a 8MHZ/9600 - 833.33
UBR10 = 0x03; //
UMCTL0 = 0x00; // modulation
IE1 |= URXIE0; // Enable USART0 RX interrupt
P3SEL |= 0x30;
P3DIR |= BIT4; //
}
//初始化timerA,
void initialize_timerA(void) //timer_A初始化
{
TACCTL0 = 0X0000;
TACTL = 0x0114; //ACLK, 0 divider, up mode, interrupt enable
TACCR0 = 38; //1.16ms定时
TIMER_A_EN; //打开定时器
}
//初始化timerB
/*void initialize_timerB(void) //timer_B初始化
{
TBCTL = 0x0110; //ACLK, 0 divider, up mode, interrupt enable
TBCCTL0 = 0X0010;
TBCCR0 = 0x0147; //10ms定时
TBCTL |= 0x0114; //TBSSEL0 + TBMC0 + TBCLR;//0X0110; //ACLK,0 divider, up mode,
//TBCCTL0 = 0x0010;
TBCCR0 = 328; //周期10ms
TBCCTL1 = OUTMOD_7;
TBCCR1 = 262; //占空比 328/262 = 0.8 //p4.0 实输出到P4.1
TBCCTL2 = OUTMOD_7;
TBCCR2 = 131; //占空比 328/131 = 0.4 //p4.1 实输出到P4.2
}*/
/*****************************************************
公用子程序
*****************************************************/
//延时子程序
void Delay(uint n)
{
uint i;
for (i=0; i<n; i++);
}
//初始化串口0寄存器
void clr_u0 (void)
{
pRU0 = COM0;
pTU0 = COM0;
u0flag = 0;
CmdOk = FALSE; //清除发送标志
command0 =0; //清除命令字
}
/*******************************************/
//热敏头SPI数据加载子程序
/*******************************************/
//打印头 spi写字节
void ByteWrite(uchar tempdata)
{
uchar i;
for(i=0; i<8; i++)
{
if((tempdata & BIT7)==BIT7)
PRT_O_1;
else
PRT_O_0;
PRT_CLK_1;
_NOP();
//_NOP();
PRT_CLK_0;
tempdata = tempdata << 1;
}
}
//打印口 spi读字节
uchar ByteRead(void)
{
uchar tempbyte,tempbit,i;
for (i=0; i<8; i++)
{
if(PRT_IN == PRT_I)
tempbit = 1;
else
tempbit = 0;
tempbyte = (tempbyte << 1) | tempbit;
PRT_CLK_1;
_NOP();
//_NOP();
PRT_CLK_0;
}
return tempbyte;
}
//汉字库中取汉字点阵送打印头移位寄存器打印
void print_it(void)
{
uchar i,*temp_sp,tempa;
uchar ch_cnt;
ulong tempaddr;
if((prn_flag & (1<<prn_tail)) == 0)
{ //Nothing to print
return ;
}
if (prn_buff[prn_tail][0]>= ' ')
{
ch_cnt = 0;
while (ch_cnt++ <48) ByteWrite(0);
LAT_EN; //启动锁存信号
_NOP();
LAT_DIS; //关闭锁存信号
for(i=0;i<16;i++)
{
ch_cnt = 0;
temp_sp = prn_buff[prn_tail];
if(DOUB_HIGH == 1) Motor_Step(1); //双倍高度打印 ---电机走纸双倍
//STB_EN;
while((temp_sp-prn_buff[prn_tail]) <48)
{
if(*temp_sp >= FNODE)
{
tempaddr = *temp_sp++;
tempaddr = (tempaddr - FNODE)*94 + (*temp_sp++ - FNODE); //取汉字点阵信息
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -