以文本方式查看主題 - 曙海教育集團論壇 (http://www.hufushizhe.com/bbs/index.asp) -- 單片機高級 (http://www.hufushizhe.com/bbs/list.asp?boardid=56) ---- ]硬盤控制源程序 (http://www.hufushizhe.com/bbs/dispbbs.asp?boardid=56&id=2247) |
-- 作者:wangxinxin -- 發(fā)布時間:2010-12-8 10:08:10 -- ]硬盤控制源程序 *******************************************************************/ ///////////////////預(yù)處理///////////////////////////////////// #include <reg51.h> #include <absacc.h> #define uchar unsigned char #define uint unsigned int #define KEYPORT P1 #define LCDCOM XBYTE[0x0008] //LCD命令寄存器 #define LCDDATA XBYTE[0x0009] //LCD數(shù)據(jù)寄存器 #define CDPA XBYTE[0x0004] //8255 PORT A, harddisk D0-D7 #define CDPB XBYTE[0x0005] //8255 PORT B, harddisk D8-D15 #define CDPC XBYTE[0x0006] //8255 PORT C,harddisk address #define CDCOM XBYTE[0x0007] //8255 命令寄存器 #define FILE0 0x00 //硬盤數(shù)據(jù)寄存器 #define FILE1 0x01 //錯誤/特征寄存器 #define FILE2 0x02 //扇區(qū)數(shù)寄存器 #define FILE3 0x03 //扇區(qū)號寄存器 #define FILE4 0x04 //柱面號寄存器L #define FILE5 0x05 //柱面號寄存器H #define FILE6 0x06 //驅(qū)動器/磁頭寄存器 #define FILE7 0x07 //狀態(tài)/命令寄存器 static uchar code LCD1[16]= "TOPLOW DESIGN "; static uchar code LCD2[16]= "Copyright(C)2004"; static uchar code ERROR[16]="ERROR "; static uchar code PASS[16]= "PASS "; uchar buffer0,buffer1; uchar buffer[16]; uchar STATUS; ///////////////////位設(shè)置/////////////////////////// sbit BFLAG=ACC^7; sbit BSY=ACC^7; sbit DRDY=ACC^6; sbit DRQ=ACC^3; sbit ERR=ACC^0; sbit RESET=P3^5; sbit READ=P3^0; sbit WRITE=P3^1; sbit ILT=ACC^0; sbit INTRQ=P3^3; /************************************************************ * D7 D6 D5 D4 D3 D2 D1 D0 * BSY DRDY DWF DSC DRQ CORR IDX ERR * BSY:驅(qū)動器忙; * DRDY:驅(qū)動器準(zhǔn)備好; * DWF:驅(qū)動器寫失敗; * DSC:尋道結(jié)束; * DRQ:請求服務(wù),驅(qū)動器希望通過數(shù)據(jù)寄存器與CPU交換一字節(jié)數(shù)據(jù);* CORR:當(dāng)可以糾正的讀錯誤發(fā)生時,該位置1,數(shù)據(jù)傳輸將繼續(xù)進行 * IDX:收到綜引信號; * ERR:命令執(zhí)行出錯。 * *************************************************************/ /******************************************************* *函數(shù)名稱:void delay(uint time) * *函數(shù)用途:延遲函數(shù) * ********************************************************/ void delay(uint time) {uint i,j; for(i=0;i<time;i++) for(j=0;j<255;j++); } /******************************************************* *函數(shù)名稱:void putch(unsigned char ch) * *函數(shù)用途:串口發(fā)送程序 * ********************************************************/ void putch(unsigned char ch) {SBUF=ch; TI=0; while(!TI); } /******************************************************* *函數(shù)名稱:unsigned char getch(void) * *函數(shù)用途:串口接收程序 * ********************************************************/ unsigned char getch(void) {uchar temp; while(!RI); temp=SBUF; RI=0; return(temp); } /******************************************************* *函數(shù)名稱:void wait(void) * *函數(shù)用途:LCD忙等待 * ********************************************************/ void wait(void) {do{ACC=LCDCOM;} while(BFLAG==1); } /******************************************************* *函數(shù)名稱:void IniLcd(void) * *函數(shù)用途:LCD初始化函數(shù) * ********************************************************/ void IniLcd(void) {LCDCOM=0x38; wait(); LCDCOM=0x08; wait(); LCDCOM=0x01; wait(); LCDCOM=0x06; wait(); LCDCOM=0x0c; wait(); } /*********************************************************************** *函數(shù)名稱:void LcdDis(uchar FL,uchar Lcd1[16],uchar SL,uchar Lcd2[16]) * *函數(shù)用途:液晶顯示函數(shù) * ************************************************************************/ void LcdDis(uchar FL,uchar Lcd1[16],uchar SL,uchar Lcd2[16]) {uchar k; LCDCOM=FL|0x80; wait(); for(k=0;k<16;k++) {LCDDATA=Lcd1[k]; wait(); } LCDCOM=SL|0xc0; wait(); for(k=0;k<16;k++) {LCDDATA=Lcd2[k]; wait(); } } |