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

📄 main.c

📁 单片机c语言程序设计100例--基于PIC+PROTEUS
💻 C
字号:
//-----------------------------------------------------------------
//  名称: ATA硬盘数据访问程序设计
//-----------------------------------------------------------------
//  说明: 本例基于PIC18F452+ATA-HDD硬盘组件设计的仿真电路,设计了硬盘扇区
//        的数据访问程序,从指定扇区(本例指定为第0块)读取的数据通过虚拟
//        终端显示.
//
//-----------------------------------------------------------------
#define INT8U  unsigned char
#define INT16U unsigned int
#define INT32U unsigned long
#define _XTAL_FREQ 20000000UL     //20MHz
#include <htc.h>
#include <stdio.h>
#include "ATA.h"
#define IORDY    RC5              //IO就绪位
#define DIOR     LATE0            //读
#define DIOW     LATE1            //写
//4字节LBA地址
INT8U ATA_A0 = 0x00, ATA_A1 = 0x00, 
      ATA_A2 = 0x00, ATA_A3 = 0x00 ;
//ATA数据传输缓冲相关变量
INT8U ATA_BUF[10] = { 1,2,3,4,5,6,7,8,9,10 };
char s[15];
//函数声明
void INIT();
void ATA_BLOCK_Write();
void ATA_BLOCK_Read();
void ATA_DRQ_Wait();
void ATA_RDY_Wait();
void ATA_BSY_Wait();
void ATA_Send_LBA();
void ATA_Reg8_Write(INT8U reg, INT8U dat);
void ATA_Reg16_Write(INT8U reg, INT16U dat);
INT8U  ATA_Reg8_Read(INT8U reg);
INT16U ATA_Reg16_Read(INT8U reg);
//-----------------------------------------------------------------
// 主程序
//-----------------------------------------------------------------
void main()
{
    OpenUSART( USART_TX_INT_OFF &      //发送中断关
               USART_RX_INT_OFF &      //接收中断关
               USART_ASYNCH_MODE &     //异步模式
               USART_EIGHT_BIT &       //8位收发
               USART_CONT_RX &         //持续接收
               USART_BRGH_HIGH,        //高速模式(默认值,可省)
               _XTAL_FREQ/9600/16-1);  //波特率





}

//-----------------------------------------------------------------
// 初始化函数
//-----------------------------------------------------------------
void INIT()
{


}

//-----------------------------------------------------------------
// 从ATA驱动器读取一个块数据
//-----------------------------------------------------------------
void ATA_BLOCK_Read()
{


}

//-----------------------------------------------------------------
// 数据未请求等待(写扇区时必须等待DRQ置位)
//-----------------------------------------------------------------
void ATA_DRQ_Wait()
{


}

//-----------------------------------------------------------------
// 驱动器未就绪等待
//-----------------------------------------------------------------
void ATA_RDY_Wait()
{

   
}

//-----------------------------------------------------------------
// 驱动器忙等待
//-----------------------------------------------------------------
void ATA_BSY_Wait()
{    


}

//-----------------------------------------------------------------
// 向驱动器发送LBA地址(逻辑块地址,0~27位)
//-----------------------------------------------------------------
void ATA_Send_LBA()
{
    ATA_Reg8_Write(ATA_IO_CHS_SECTORCNT,1);  //设置扇区数
    ATA_Reg8_Write(ATA_IO_LBA_0_7,   ATA_A0);//设置LBA  0- 7位
    ATA_Reg8_Write(ATA_IO_LBA_8_15,  ATA_A1);//设置LBA  8-15位    
    ATA_Reg8_Write(ATA_IO_LBA_16_23, ATA_A2);//设置LBA 16-23位
    //设置LBA:23-27位,并将第6位置1,标明地址是LBA格式(非CHS)
    ATA_Reg8_Write(ATA_IO_LBA_24_27, ATA_A3 | 0B01000000); 
}

//-----------------------------------------------------------------
// 从寄存器读取一字节数据
//-----------------------------------------------------------------
INT8U ATA_Reg8_Read(INT8U reg)
{


}
//-----------------------------------------------------------------
// 向寄存器写入一字节数据
//-----------------------------------------------------------------
void ATA_Reg8_Write(INT8U reg, INT8U dat)
{


}

//-----------------------------------------------------------------
// 从指定寄存器读取16位数据(两字节)
//-----------------------------------------------------------------
INT16U ATA_Reg16_Read(INT8U reg)
{


}

⌨️ 快捷键说明

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