阅读:1401回复:6
初学D12
我现在刚刚在弄D12,什么经验也没有,也看了一些资料,感觉还是有点不懂,我准备将我做的一点点写下了,也许对其他像我一样的初学者有些帮助,大家也可以一起学习!
现在我只是把D12的电路自己搭起来了,弄了一个程序来测试了一下 芯片应该是正常工作了。以后的还要慢慢做了。 下面是测试的程序。c51编写的。 #include \"ADUC812.h\" #include \"stdio.h\" #include \"intrins.h\" #define D12_command (*(unsigned char xdata *) 0xfff3) #define D12_data (*(unsigned char xdata *) 0xfff2) sbit D12_cs = P2^6; void delay(char n) { char i; for(i=0;i<n;i++) { _nop_(); } } void main(void) { unsigned char a,b; SCON = 0x52; TMOD = 0x20; TL0 = 0xfd; TH0 = 0xfd; TR1 = 1; /*这一段是串口初始化*/ TI = 1; printf(\"D12 test\"); P2=0xff; D12_command=0xf3; /*设置D12的模式*/ delay(1); /*延时,保证时序,我用11.0592的晶振,可以不加,下同*/ D12_data=0x0b; /* 默认值*/ delay(1); D12_data=0x03; /* 输出频率12M*/ delay(100); D12_command=0xfd; /* 读D12 的ID*/ delay(1); a=D12_data; delay(1); /*一定要延时*/ b=D12_data; delay(100); printf(\",%x,%x,\",(int)a,(int)b); while(1); } 好了! 运行程序如果正常的话 从clockout应该有12m的频率,同时串口 因该有 两个数据 0x12 0x10 ,没问题就表示硬件ok! 我的ok了。 |
|
沙发#
发布于:2003-10-25 09:46
这是固件吧,驱动呢?
你的驱动在2000、xp下正常吗? |
|
|
板凳#
发布于:2003-10-25 09:56
能告诉我D12的具体型号吗?我是个新手 :)
|
|
地板#
发布于:2003-10-25 17:10
能告诉我D12的具体型号吗?我是个新手 :) PDIUSBD12 |
|
|
地下室#
发布于:2003-10-25 21:22
上面的程序是固件,只是测试了一下D12的工作是否正常,其他的还没有做,可能要在搞懂一些,多看些书了。
|
|
5楼#
发布于:2003-10-25 21:25
不好意思 在
P2=0xff;后面少一句, D12_cs=0; 片选D12.不好意思了。 |
|
6楼#
发布于:2003-10-27 21:51
今天 又在弄,遇到了一个情况,可能很多人都有,就是上电后,D12的中断脚一直为低,结果反复中断。经过试验总算搞定了,就是初始化时,先读取一下D12的中断寄存器,以后中断脚就可拉高了。以后系统中断后,要读取上次状态把中段寄存器清空。
以上 供大家参考. |
|