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

📄 main.bak

📁 采用PDIUSBD12开发的USB总线与429总线数据转换的单片机固件程序
💻 BAK
字号:
/**********************************************
        USB固件编程

File  Name:	main.c
Final Date:	2004-07-10
Author:		LHP
Note:		问题已经基本解决
***********************************************/

#include <reg51.h>
#include "D12ci.h"
#include "chap_9.h"
#include <intrins.h>


sbit D12CS=P3^1;
sbit TXR=P3^3;
sbit DR1=P3^4;
sbit DR2=P3^5;
/*第一板
sbit OE1=P1^7;
sbit OE2=P1^6;
sbit SEL=P1^5;
sbit MR=P1^4;
sbit LDCW=P1^3;
sbit ENTX=P1^2;
sbit LD1=P1^1;
sbit LD2=P1^0;
*/
//第二板
sbit OE2=P1^7;
sbit OE1=P1^6;
sbit SEL=P1^5;
sbit LD1=P1^4;
sbit LD2=P1^3;
sbit ENTX=P1^2;
sbit LDCW=P1^1;
sbit MR=P1^0;


extern unsigned char idata OutBuf[EP1_PACKET_SIZE];//用于PC机向3282传输要发送的数据
extern unsigned char idata ControlWord[2]; //用于PC机向3282发送控制字
unsigned char idata InBuf1[EP1_PACKET_SIZE]; //用于3282通道1向pc机发送数据
unsigned char idata InBuf2[EP2_PACKET_SIZE]; //用于3282通道2向PC机发送数据

extern EPPFLAGS bEPPflags;
extern CONTROL_XFER ControlData;
void reconnect_usb(void);
void disconnect_usb(void);
void connect_usb(void);
void setup_handler(void);
//void mytxr(void);
extern void myisr(void);

//重新连接到USB总线
void reconnect_usb(void)
{
    unsigned long clk_cnt;
    disconnect_usb();//断开usb连接
    for(clk_cnt=0;clk_cnt<50000;clk_cnt++);//延时
    connect_usb();//连接到USB
}

//断开USB总线
void disconnect_usb(void)
{
    //初始化D12工作状态,断开soft connect连接
    D12_SetMode(D12_NOLAZYCLOCK,D12_SETTOONE|D12_CLOCK_6M);
}

//连接USB总线
void connect_usb(void)
{
    DISABLE;
    bEPPflags.value=0;//清标志
    ENABLE;
    //初始化D12工作状态,接通soft connect
    D12_SetMode(D12_NOLAZYCLOCK|D12_SOFTCONNECT,D12_SETTOONE|D12_CLOCK_6M);
}

void usb_isr(void) interrupt 0
{
    DISABLE;
    myisr();
    ENABLE;
}



void main(void)
{
        SP=0x50;
	P0=0xff;
	P1=0xdb;
	P2=0xff;
	P3=0xff;

	D12CS=0x0;
	IT0=0;//设置INT0为低电平中断触发
	EX0=1;//允许外部中断0
	PX0=1;//设为高优先级
        EA=1;//开总中断

        D12CS=0x1;
        MR=0;
        _nop_();
        _nop_();
        MR=1;

        LDCW=1;
        P2=0x00;
        P0=0x20;
        LDCW=0;
        _nop_();
        _nop_();
        LDCW=1;

	D12CS=0x0;
	bEPPflags.value=0;
	reconnect_usb();

	while(1)
	{
	    if(bEPPflags.bits.setup_packet)
	    {
		DISABLE;
		bEPPflags.bits.setup_packet=0;
		ENABLE;
		setup_handler();
	    }

	    if(bEPPflags.bits.ep1_rxdone)//?????????????????此处是否应该加入清除标志的语句
	    {
                DISABLE;
                bEPPflags.bits.ep1_rxdone=0;
                ENABLE;
           /*
            D12CS=0x1;

            LDCW=1;
            P0=ControlWord[0];
           P2=ControlWord[1];
            P0=0x20;
            P2=0x00;
          LDCW=0;     */
        //   _nop_();
       //     _nop_();
        //   LDCW=1;

	//    D12CS=0x0;

             /*
              while(TXR!=1);
                D12CS=1;
                P0=0xff;
                P2=0xff;
                ENTX=0;

                P0=OutBuf[0];
                P2=OutBuf[1];
                LD1=0;
                LD1=1;

                P0=OutBuf[2];
                P2=OutBuf[3];
                LD2=0;
                LD2=1;

                _nop_();
                _nop_();
                ENTX=1;
       //         _nop_();
       //         _nop_();
              while(TXR!=1);

                ENTX=0;  */
            }
        //发送控制字
        //if(TXR && bEPPflags.bits.ep2_rxdone)
        //{
            if(bEPPflags.bits.ep2_rxdone)
	    {
            DISABLE;
            bEPPflags.bits.ep2_rxdone=0;
            ENABLE;

            while(!TXR);
                D12CS=1;
                //P0=0xff;
                //P2=0xff;
                ENTX=0;

                P0=OutBuf[0];
                P2=OutBuf[1];
                LD1=0;
                LD1=1;

                P0=OutBuf[2];
                P2=OutBuf[3];
                LD2=0;
                LD2=1;

                //_nop_();
               // _nop_();
                ENTX=1;
                unsigned char i;
                for(i=250;i>0;i--);
                //_nop_():
                //_nop_();
                //_nop_();
              //while(TXR!=1);

                //ENTX=0;
                D12CS=0x0;
  //        P1=0xdb;

//	    D12CS=0x1;
   //       _nop_();
   //       MR=0;
   //       _nop_();
   //       _nop_();
   //       MR=1;

  //          LDCW=1;
  //          P0=ControlWord[0];
  //          P2=ControlWord[1];
            //P0=0x00;
            //P2=0x20;
   //         LDCW=0;
  //          _nop_();
   //         _nop_();
  //          LDCW=1;

//	    D12CS=0x0;

	  }
//}
          //接收通道1
	  if(DR1==0)
	  {
	    D12CS=1;

            OE1=1;
            SEL=0;
            P0=0xff;
            P2=0xff;
            OE1=0;
            _nop_();
            InBuf1[0]=P0;
	    InBuf1[1]=P2;

            OE1=1;
            SEL=1;
            P0=0xff;
            P2=0xff;
	    OE1=0;
            _nop_();
	    InBuf1[2]=P0;
	    InBuf1[3]=P2;
            OE1=1;

	    D12CS=0;
	    D12_WriteEndpoint(3,4,InBuf1);
        }
        //接收通道2
	if(DR2==0)
	{
	D12CS=1;

	OE2=1;
	SEL=0;
        P0=0xff;
        P2=0xff;
        OE2=0;
        _nop_();
        InBuf2[0]=P0;
        InBuf2[1]=P2;

	OE2=1;
	SEL=1;
        P0=0xff;
        P2=0xff;
        OE2=0;
        _nop_();
	InBuf2[2]=P0;
        InBuf2[3]=P2;
        OE2=1;

        D12CS=0;
	D12_WriteEndpoint(5,4,InBuf2);
	}
    }
}










⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -