使用msp430對ch376并口操作 讀出數(shù)據(jù)始終為0xff下面是程序:
#include
#define CPU_F ((double)32768) ? ? ? ? //延時函數(shù)宏定義 ? ? ? ? ? ? ? ? ? ??
#define delay_ms(x) __delay_cycles((long)(CPU_F*(double)x/31.2))
//#define delay_us(x) __delay_cycles((long)(CPU_F*(double)x/0.032))
//#define ?P6_OUT ? ? P6DIR = 0xff ? ? ? ? ? ? ? ?//8位并口輸出
#define ?P5 ? ? ? ? P5DIR|=(BIT4+BIT5+BIT6|BIT7) // 控制管腳
//#define ?P6_IN ? ? ?P6DIR =0x00 ? ?//8位并口輸入 ? ? ? ?
#define ?A0_L ? P5OUT &=~BIT4
#define ?A0_H ? P5OUT |=BIT4
#define ?RD_L ? P5OUT &=~BIT5
#define ?RD_H ? P5OUT |=BIT5
#define ?WR_L ? P5OUT &=~BIT6
#define ?WR_H ? P5OUT|=BIT6
#define ?CS_L ? P5OUT &=~BIT7
#define ?CS_H ? P5OUT|=BIT7
#define ?INT ? ?P2DIR|=BIT4
unsigned char temp[2];
//****************************************
void delay(unsigned int ms )
{
unsigned int i;
while ( ms -- )?
for ( i = 1000; i != 0; i -- );
}
//*******************************************
void CH376_init()
{
CS_H;
WR_H;
RD_H;
A0_L;
P6DIR =0X00; //設置 8位并行輸入
}
//************并口寫命令******************
void send_byte_cmd(unsigned char ch)
{
P6OUT = ch;
P6DIR = 0XFF; //設置 8位并行輸出
A0_H;
CS_L;
WR_L;
CS_L;
WR_H;
CS_H;
A0_L;
P6DIR = 0X00; ? //設置 8位并行輸入
_NOP( );_NOP( );_NOP( );_NOP( );
}
//************寫數(shù)據(jù)***********************
void send_byte_date(unsigned char ch)
{
??
P6OUT = ch;
P6DIR = 0XFF;//設置 8位并行輸出
A0_L;
CS_L;
WR_L;
CS_L;
WR_H;
CS_H;
P6DIR = 0X00;//設置 8位并行輸入
}
//*************讀ch376狀態(tài)************************
unsigned char read_date()
{
unsigned char dat;
P6DIR = 0X00;//設置 8位并行輸入
A0_H;
CS_L;
RD_L;
CS_L;
dat=P6IN; ? //設置 8位并行輸入?
RD_H;
CS_H;
A0_L;
return dat; ? ?
}
//************并口讀命令數(shù)據(jù)*********************************
unsigned char read_cmd_dat()
{
unsigned char mdat;
P6DIR=0X00;
A0_L;
CS_L;
RD_L;
CS_L;
mdat=P6IN;
RD_H;
CS_H;
A0_L;
return mdat;
}
//***********初始化ch376****************************
unsigned char init()
{
unsigned res;
CH376_init();
send_byte_cmd(0x06); //寫命令
send_byte_date(0x65); // 寫數(shù)據(jù)
res=read_cmd_dat();
return res;
}
//*******************************************
void main(void)
{
WDTCTL = WDTPW | WDTHOLD; ? ? ? ? ? ? ? ? ? ? ? ?// Stop WDT
UCSCTL4 |= SELA1; ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?//選擇時鐘源
?
AUXCTL1 |= AUX1MD ; ? ? // 單片機硬件配置
AUXCTL1 &= ~AUX1OK;
AUXCTL2 |= AUX2MD ;
AUXCTL2 &= ~AUX2OK;
CH376_init();
delay_ms(50);
temp[0]=init();
delay_ms(55);
}