?? 375interface.c
字號:
#include <iom32v.h>
#include <macros.h>
/***************************************/
#define UINT8 unsigned char
#define CH375_CS BIT(7)
#define CH375_A0 BIT(6)
#define CH375_RD BIT(5)
#define CH375_WR BIT(4)
#define CH375_INT BIT(3)
/***************************************/
/* 有些AVR單片機(jī)提供開放系統(tǒng)總線,那么直接將CH375掛在其系統(tǒng)總線上,以8位I/O方式進(jìn)行讀寫 */
/* 不過本例假定不開放系統(tǒng)總線,所以用I/O引腳模擬產(chǎn)生CH375的并口讀寫時(shí)序 */
/* 本例中的硬件連接方式如下(實(shí)際應(yīng)用電路可以參照修改下述3個(gè)并口讀寫子程序) */
/* 單片機(jī)的引腳 CH375芯片的引腳
PINC.4 INT#
PORTC.3 A0
PORTC.2 CS#
PORTC.1 WR#
PORTC.0 RD#
PORTA(8位端口) D7-D0 */
void mDelay1uS( ) /* 至少延時(shí)1uS,根據(jù)單片機(jī)主頻調(diào)整 */
{
//UINT8 i;
//for ( i = 1; i != 0; i -- );
NOP();
}
void CH375_PORT_INIT( ) /* 由于使用通用I/O模塊并口讀寫時(shí)序,所以進(jìn)行初始化 */
{
DDRA = 0x00; /* 設(shè)置8位并口為輸入 */
PORTC=CH375_CS|CH375_WR|CH375_RD; //設(shè)置CS,WR,RD默認(rèn)為高電平 0x08為3310引腳*/
DDRC =CH375_CS|CH375_WR|CH375_RD|CH375_A0|0x01; /* 設(shè)置CS,WR,RD,A0為輸出,設(shè)置INT#為輸入 */
}
void xWriteCH375Cmd( UINT8 mCmd ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫命令 */
{
NOP();//mDelay1uS( ); /* 至少延時(shí)1uS */
/* *(volatile unsigned char *)CH375_CMD_PORT_ADDR = mCmd; 通過并口直接讀寫CH375而非普通I/O模擬 */
PORTC |=CH375_A0;// 0x08; /* 輸出A0=1 */
PORTA = mCmd; /* 向CH375的并口輸出數(shù)據(jù) */
DDRA = 0xFF; /* 并口D0-D7輸出 */
PORTC &=~(CH375_CS|CH375_WR);// 0xF9; /* 輸出有效寫控制信號, 寫CH375芯片的命令端口, A0=1; CS=0; WR=0; RD=1; */
DDRA = 0xFF; /* 該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */
PORTC |=CH375_RD|CH375_CS|CH375_WR;// 0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=1; CS=1; WR=1; RD=1; */
DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */
PORTC &= 0xF7; /* 輸出A0=0; 可選操作 */
NOP();//mDelay1uS( ); mDelay1uS( ); /* 至少延時(shí)2uS */
}
void xWriteCH375Data( UINT8 mData ) /* 外部定義的被CH375程序庫調(diào)用的子程序,向CH375寫數(shù)據(jù) */
{
/* *(volatile unsigned char *)CH375_DAT_PORT_ADDR = mData; 通過并口直接讀寫CH375而非普通I/O模擬 */
PORTA = mData; /* 向CH375的并口輸出數(shù)據(jù) */
DDRA = 0xFF; /* 并口D0-D7輸出 */
PORTC &= ~(CH375_A0|CH375_CS|CH375_WR);//0xF1; /* 輸出有效寫控制信號, 寫CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=0; RD=1; */
DDRA = 0xFF; /* 該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */
PORTC |= CH375_RD|CH375_CS|CH375_WR;//0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */
DDRA = 0x00; /* 禁止數(shù)據(jù)輸出 */
NOP();//mDelay1uS( ); /* 至少延時(shí)1.2uS */
}
UINT8 xReadCH375Data( void ) /* 外部定義的被CH375程序庫調(diào)用的子程序,從CH375讀數(shù)據(jù) */
{
UINT8 mData;
/* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR; 通過并口直接讀寫CH375而非普通I/O模擬 */
NOP();//mDelay1uS( ); /* 至少延時(shí)1.2uS */
DDRA = 0x00; /* 數(shù)據(jù)輸入 */
PORTC &= ~(CH375_A0|CH375_CS|CH375_RD);//0xF2; /* 輸出有效讀控制信號, 讀CH375芯片的數(shù)據(jù)端口, A0=0; CS=0; WR=1; RD=0; */
DDRA = 0x00; /* 該操作無意義,僅作延時(shí),CH375要求讀寫脈沖寬度大于100nS */
mData = PINA; /* 從CH375的并口PA輸入數(shù)據(jù) */
PORTC |= CH375_RD|CH375_CS|CH375_WR;//0x07; /* 輸出無效的控制信號, 完成操作CH375芯片, A0=0; CS=1; WR=1; RD=1; */
return( mData );
}
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -