⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ftp.c

📁 富士通微型打印机驱动程序
💻 C
📖 第 1 页 / 共 3 页
字号:
                    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 + -