在线看毛片网站电影-亚洲国产欧美日韩精品一区二区三区,国产欧美乱夫不卡无乱码,国产精品欧美久久久天天影视,精品一区二区三区视频在线观看,亚洲国产精品人成乱码天天看,日韩久久久一区,91精品国产91免费

<menu id="6qfwx"><li id="6qfwx"></li></menu>
    1. <menu id="6qfwx"><dl id="6qfwx"></dl></menu>

      <label id="6qfwx"><ol id="6qfwx"></ol></label><menu id="6qfwx"></menu><object id="6qfwx"><strike id="6qfwx"><noscript id="6qfwx"></noscript></strike></object>
        1. <center id="6qfwx"><dl id="6qfwx"></dl></center>

            新聞中心

            EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 51單片機(jī)控制硬盤的C語言源碼程序

            51單片機(jī)控制硬盤的C語言源碼程序

            作者: 時(shí)間:2016-11-28 來源:網(wǎng)絡(luò) 收藏
            #include
            /////////////////////////////////////////////////////////////////////////////////////////////////////
            // 單片機(jī)教程httP://www.ipbb.cn
            // Power BY DDDLZHU
            // 編譯環(huán)境 : KEIL C51 V7.07 支持器件 : AT89C51
            ///////////////////////////////////////////////////////////////////////////////////////////////////////
            #define byte unsigned char
            #define uint unsigned int
            ///////////////////////////////////////////////////////////////////////////////////////////////////
            //線路連接定義。如電路有變直接修改就可以了
            ///////////////////////////////////////////////////////////////////////////////////////////////////
            #define DataH P1
            #define DataL P0
            #define RegAddr P2
            #define Read P3_4
            #define Write P3_3
            #define Rst P3_2
            ///////////////////////////////////////////////////////////////////////////////////////////////////
            //線路連接定義。如電路有變直接修改就可以了
            ///////////////////////////////////////////////////////////////////////////////////////////////////
            //寄存器地址定義
            #define _Status_Control 0x16
            #define _Data 0x8
            #define _Err_Features 0x9
            #define _SecCount 0xa
            #define _SecNum 0xb
            #define _CylinderL 0xc
            #define _CylinderH 0xd
            #define _DeviceAndHead 0xe
            #define _Status_Command 0xf
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            ///這里為初始化硬盤的重要參數(shù),每個(gè)硬盤的參數(shù)都不盡相同。若不正確則讀不了盤中的數(shù)據(jù)。計(jì)算方法如下:
            先看清楚你的 硬盤表面標(biāo)簽中的數(shù)據(jù),里面有三個(gè)重要參數(shù):
            1。柱面數(shù)(Cylinder)
            2。磁頭數(shù)(Head)
            3。磁道數(shù)(Sector)
            其中 _MaxHead=0xA+Head
            _MaxSector=Sector
            例如我的130M硬盤(很老吧,哈哈),磁頭數(shù)為15,十六進(jìn)制為0xf,所以_MaxHead=0xAF,磁道數(shù)為17,所以_MaxSector=0x11
            ///
            #define _MaxHead 0xAF
            #define _MaxSector 0x11
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            byte bdata Status=0x00;
            sbit ERR=Status^0;
            sbit IDX=Status^1;
            sbit CORR=Status^2;
            sbit DRQ=Status^3;
            sbit DSC=Status^4;
            sbit DF=Status^5;
            sbit DRDY=Status^6;
            sbit BSY=Status^7;
            //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            // D7 D6 D5 D4 D3 D2 D1 D0 //
            BSY DRDY DWF DSC DRQ CORR IDX ERR //
            BSY:驅(qū)動(dòng)器忙; //
            DRDY:驅(qū)動(dòng)器準(zhǔn)備好; //
            DWF:驅(qū)動(dòng)器寫失??; //
            DSC:尋道結(jié)束; //
            DRQ:請(qǐng)求服務(wù),驅(qū)動(dòng)器希望通過數(shù)據(jù)寄存器與CPU交換一字節(jié)數(shù)據(jù);//
            CORR:當(dāng)可以糾正的讀錯(cuò)誤發(fā)生時(shí),該位置1,數(shù)據(jù)傳輸將繼續(xù)進(jìn)行 //
            IDX:收到綜引信號(hào); //
            ERR:命令執(zhí)行出錯(cuò)。 //
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            byte Data_bufferH=0x0;
            byte Data_bufferL=0x0;
            ////////////////////////////////串口子程序
            void send_string(unsigned char //word);
            void send_char(unsigned char word);
            unsigned char get_char(void);
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
            :延遲函數(shù)
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            void delay(byte ms)
            { byte i,j;
            for(i=0;i
            for(j=0;j<255;j++);
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //讀寄存器
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            byte ReadReg(byte Addr)
            {
            RegAddr=Addr;
            DataL=0xff;
            Read=0;
            Status=DataL;
            Read=1;
            return Status;
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //等待BSY信號(hào)
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            byte WaitBSY(void)
            {
            byte timeOut=0;
            do{
            ReadReg(_Status_Command);
            timeOut++;
            // if(timeOut>=254) return(0xff);
            }while(BSY);
            return(1);
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////
            //寫寄存器值
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            void WriteReg(byte Addr,byte Data)
            {
            RegAddr=Addr;
            Write=0;
            DataL=Data;
            Write=1;
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
            讀數(shù)據(jù)儲(chǔ)存器中數(shù)據(jù)
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            void ReadData(void)
            {
            DataH=0xff;
            DataL=0xff;
            RegAddr=_Data;
            Read=0;
            Data_bufferL=DataL;
            Data_bufferH=DataH;
            Read=1;
            }
            ///////////////////////////////////////////////////////////////////////////////////////////////////////////////
            寫數(shù)據(jù)寄存器中數(shù)據(jù)
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////////
            void WriteData(void)
            {
            RegAddr=_Data;
            Write=0;
            DataL=Data_bufferL;
            DataH=Data_bufferH;
            Write=1;
            }

            上一頁 1 2 下一頁

            評(píng)論


            技術(shù)專區(qū)

            關(guān)閉