原创 Mega16+CH375硬件测试程序

2009-5-20 20:45 4090 3 3 分类: MCU/ 嵌入式

前几天在做usbd12调试时不小心把12V电压接到5V上去了,烧了几个片子,D12也挂了,由天手头上没有D12了,再说手工焊接也挺麻烦的,上次买D12时顺便带了CH375。因为这一直都是用的AVR的片子,今天就把Mega16+CH375的硬件电路搭起来了,为了先测试硬件连接是否正常,就把OURAVR网站论坛上的那个测试程序用来检测,可是不行。南京沁恒网站也有同样贴子。稍微研究了一下,就试了如下程序,经验证通过:


/******************************
CH375测试程序
Mega16 模拟总线


控制端口定义:
        A0 -- PD3
        RD -- PD4
        WR -- PD5
        CS -- PD6
                                        
数据端口定义:
        PORTA
******************************/
#include <avr/io.h>
#include <util/delay.h>


/*端口初始化*/
void CH375_PORT_INIT(void)  /* 由于使用通用I/O模块并口读写时序,所以进行初始化 */
{
 DDRA = 0x00;  /* 设置8位并口为输入 */
 PORTD = 0xFD;//PORTB = 0x07;  /* 设置CS,WR,RD默认为高电平 */
 DDRD = 0x7A;//DDRB = 0x0F;  /* 设置CS,WR,RD,A0为输出,设置INT#为输入 */
}

/* 向CH375的命令端口写入命令,周期不小于4uS,如果单片机较快则延时 */
void CH375_WR_CMD_PORT( unsigned char cmd )
{
    PORTD |= 0x08;
 PORTD |= 0x08;
    PORTD |= 0x08;  /* 输出A0=1 */
 PORTA = cmd;  /* 向CH375的并口输出数据 */
 DDRA = 0xFF;  /* 并口D0-D7输出 */
 PORTD &= 0x9F;  /* 输出有效写控制信号, 写CH375芯片的命令端口, A0=1; CS="0"; WR="0"; RD="1"; */
 DDRA = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
 DDRA = 0xFF;
 PORTD |= 0x70;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=1; CS="1"; WR="1"; RD="1"; */
 DDRA = 0x00;  /* 禁止数据输出 */
 PORTD &= 0xF7;  /* 输出A0=0; 可选操作 */
 PORTD &= 0xF7;
 PORTD &= 0xF7;
}


/* 向CH375的数据端口写入数据,周期不小于1.5uS,如果单片机较快则延时 */
void CH375_WR_DAT_PORT( unsigned char dat )
{
    PORTA = dat;
 PORTA = dat;
    PORTA = dat;  /* 向CH375的并口输出数据 */
 DDRA = 0xFF;  /* 并口D0-D7输出 */
 PORTD &= 0x97;  /* 输出有效写控制信号, 写CH375芯片的数据端口, A0=0; CS="0"; WR="0"; RD="1"; */
 DDRA = 0xFF;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
 PORTD |= 0x70;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS="1"; WR="1"; RD="1"; */
 DDRA = 0x00;  /* 禁止数据输出 */
 DDRA = 0x00;
 DDRA = 0x00;
}


/* 从CH375的数据端口读出数据,周期不小于1.5uS,如果单片机较快则延时 */
unsigned char CH375_RD_DAT_PORT(void)
{
    unsigned char mData;
/* mData = *(volatile unsigned char *)CH375_DAT_PORT_ADDR;  通过并口直接读写CH375而非普通I/O模拟 */
 PORTA=0xff;  /* 至少延时1.2uS */
 PORTA=0xff;
 PORTA=0xff;
 DDRA = 0x00;  /* 数据输入 */
 PORTD &= 0xA7;  /* 输出有效读控制信号, 读CH375芯片的数据端口, A0=0; CS="0"; WR="1"; RD="0"; */
 DDRA = 0x00;  /* 该操作无意义,仅作延时,CH375要求读写脉冲宽度大于100nS */
 DDRA = 0x00;
 mData = PINA;  /* 从CH375的并口PA输入数据 */
 PORTD |= 0x70;  /* 输出无效的控制信号, 完成操作CH375芯片, A0=0; CS="1"; WR="1"; RD="1"; */
 return( mData );
}


/*******************************************
主函数
********************************************/        
int main(void)
{
        unsigned char testret,i=0;
        DDRB = 0xFF;
        PORTB = 0xFF;
        CH375_PORT_INIT();        //模拟总线,所以需要初始化端口方向


  while(1)
            {
             i++;
    CH375_WR_CMD_PORT(0x06);            //向CH375写命令(测试0x06)
             CH375_WR_DAT_PORT(i);               //向CH375写数据
             testret = CH375_RD_DAT_PORT();      //测试通过后变量testret里应该返回写的数据的取反
             PORTB = testret;                       //从PORTB端口接发光二极管可看到数据变化
             _delay_ms(250);
    }
        return 0;
}


编译器:winavr


晶振:7.3728M


31295a2b-2ffb-4cec-af57-dba492ea5463.JPG

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
我要评论
0
3
关闭 站长推荐上一条 /3 下一条