搜索
bottom↓
回复: 10

公布一个CH372/375测试C程序

[复制链接]

出0入0汤圆

发表于 2008-1-3 20:49:32 | 显示全部楼层 |阅读模式
上传原理图附件:PDF格式
点击此处打开ourdev_197113.pdf(文件大小:17K)


写了个CH372/375测试程序


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

控制端口定义:
        A0 -- PC0
        RD -- PC1
        WR -- PC6
        CS -- PC7
                                       
数据端口定义:
        PORTA
******************************/
#include <avr/io.h>
#include <util/delay.h>

#define A0                 PC0        //定义引脚
#define RD                 PC1
#define WR                 PC6
#define CS                 PC7
#define NOP         asm("nop")                //定义一个空操作语句

#define         CHECK_375                0x06        //测试375命令(CH375手册中有详细的命令列表)



/*******************************************
函数原型声明区
********************************************/



unsigned char RD_data_ch375(void);
void WR_CMD_ch375(unsigned char cmd);
void CONT_PORT_init(void);
void WR_DAT_ch375(unsigned char dat);
unsigned char RD_data_ch375(void);


/*******************************************
向CH375写数据函数
********************************************/
void WR_DAT_ch375(unsigned char dat)
{
        PORTC &= ~(1 << A0);                //A0 = Low 选择输出是数据
        PORTC &= ~(1 << WR);                //WR = Low 选择写
        DDRA = 0xFF;
        NOP;                        //两个空操作,CH375时序要求(不使用时也可以,为了稳定还是加了)                               
        NOP;
        PORTA = dat;                //端口写数据(0x55)
}
/*******************************************
写命令函数
********************************************/
void WR_CMD_ch375(unsigned char cmd)
{
        PORTC &= ~(1 << WR);                           //WR = Low 选择写
        PORTC |= (1 << A0) | (1 << RD);                //A0 = High 写命令
        DDRA = 0xFF;
        NOP;                                                                                               
        NOP;                                                                                                                                        //两个空操作
        PORTA = cmd;                                                                                                                                     //写测试命令(0x06)
}
/*******************************************
读CH375数据函数
********************************************/       
unsigned char RD_data_ch375(void)
{
        unsigned char data;
        PORTC |= (1 << WR);                                               
        PORTC &= ~(1 << RD);                                //RD = Low 选择读
        PORTC &= ~(1 << A0);
        DDRA = 0x00;
        PORTA = 0xFF;                                //初始化端口上拉(实际使用中不上拉也可以,375内置弱上拉)
        NOP;
        NOP;
        data = PINA;                                //读端口数据并返回
        return data;
}
/*******************************************
控制线初始化函数
********************************************/       
void CONT_PORT_init(void)
{
        PORTC |= (1 << A0) | (1 << RD) | (1 << WR) | (1 << CS); //控制端口初始化,A0 RD WR CS = High
        PORTC &= ~(1 << CS);                                   //CS = Low 选通CH375
        DDRC = 0xFF;                                   //控制端口初始化为输出
}
/*******************************************
主函数
********************************************/       
int main()
{
        unsigned char testret;
        DDRB = 0xFF;
        PORTB = 0x00;
        CONT_PORT_init();                                //模拟总线,所以需要初始化端口方向
        WR_CMD_ch375(CHECK_375);                        //向CH375写命令(测试0x06)
        WR_DAT_ch375(0x55);                                //向CH375写数据(0x55)
        testret = RD_data_ch375();                        //测试通过后变量testret里应该返回写的数据的取反
        while(1);
        return 0;
}

阿莫论坛20周年了!感谢大家的支持与爱护!!

一只鸟敢站在脆弱的枝条上歇脚,它依仗的不是枝条不会断,而是自己有翅膀,会飞。

出0入0汤圆

 楼主| 发表于 2008-1-3 22:08:52 | 显示全部楼层
晕,armok 还真是严格啊,本来以为在程序里注释了就够了,这只是个测试程序,能测试硬件连接是否正常,3个基本函数还是有点用处的.

出0入0汤圆

发表于 2008-1-4 01:01:11 | 显示全部楼层
支持!希望楼主早日搞出来
头像被屏蔽

出0入0汤圆

发表于 2008-1-4 07:47:48 | 显示全部楼层
谢谢共享。补充了原理图,可以置COOL了。

补充原理图才能置COOL的提示,已经做入了论坛的后台管理功能,管理员们只需要点击一下就能自动产生这段提示。这样能保证我们的COOL贴更有参考性。

出0入0汤圆

发表于 2008-1-4 09:05:18 | 显示全部楼层
不错
谢谢

出0入0汤圆

发表于 2008-1-4 11:46:18 | 显示全部楼层
ding!

出0入0汤圆

发表于 2008-1-4 12:57:28 | 显示全部楼层
晕呀,这些东西都是南京沁恒的资料给出了的.......贴出来就成库帖了

不得不说现在的酷贴质量了..........以前看见酷帖就像看见了宝贝一样,现在有点无语了.....

以前的酷贴,我都当成资料库保存,现在很少保存了

建议老莫把库帖也分等级级别,分数有读者打分

出0入18汤圆

发表于 2009-3-6 12:39:37 | 显示全部楼层
CH375是一个不错的芯片哈

出0入0汤圆

发表于 2009-9-29 11:26:20 | 显示全部楼层
这是一个非常不严谨的程序,时序上有问题。使用时请注意。
本人愚见如下,使用效果不错:
void usb_wr_cmd(unsigned char cmd)
{
        delayus(1);
        PORTG |= (1<<A0)|(1<<WR)|(1<<RD); //7
        DDRB=0x0ff;
        PORTB=cmd;
        PORTG^=(1<<WR);
        NOP(); NOP();
        PORTG^=(1<<WR);
        DDRB=0x0;
        delayus(2);
}

void usb_wr_dat(unsigned char dat)
{
        PORTG |= ( (~(1<<A0))&((1<<WR)|(1<<RD)); //3
        PORTB=dat;
        DDRB=0xff;
        PORTG^=(1<<WR);
        NOP(); NOP();
        PORTG^=(1<<WR);
        DDRB=0x0;
        delayus(1);
}

出0入0汤圆

发表于 2009-9-29 11:33:42 | 显示全部楼层
楼主没有说明连接方式. 根椐程序应该是IO脚(PORTC)控制USB IC,并非以IO方式,所以WR/RD有严格时序要求. 做为外部设备时无需处理WR/RD信号.

为了挣分,先发一部分. 联系我的话,tero17589@hotmail.com

出0入0汤圆

发表于 2010-8-25 21:45:28 | 显示全部楼层
mark
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-5-12 20:19

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表