问个单片机产生三角波的问题~

jhz411   2009-12-21 14:52 楼主
仿真用的是DAC0832,哪位帮我看看程序哪里出错了,我怎么看也没错啊,就是仿真测不出波形。

#include
#define  uint   unsigned int
#define  uchar  unsigned char

unsigned char TIME0_H=0xD8,TIME0_L=0xF0;      //定时器0的初值设置;全局变量.周期10ms,对应三角波100Hz.
sbit CS=P2^0;      //DAC0832片选信号
uchar num=0;
void triangle()
{
        CS=0;P0=num++; CS=1;   
}
void main()
{
    TMOD=0X01;
    TH0=TIME0_H;
    TL0=TIME0_L;
    EA=1;
    ET0=1;
    TR0=1;
    P0=0;        //P0接0832的数据输入口
    while(1);
}
//定时器中断处理程序。
void intt0() interrupt 1
{
        uchar a=0;
        TH0=TIME0_H;
        TL0=TIME0_L;
          triangle();        //三角波
}

回复评论 (15)

会不会电路有问题?
点赞  2009-12-21 15:06
上面的程序好像是输出锯齿波了,但示波器显示的只是直线
点赞  2009-12-21 15:08
你的频率计算有误..........如果你要100HZ的三角波,时钟中断的时间间隔应该是10MS/256,因为你要256次时钟中断才会出一个三角波....
点赞  2009-12-21 15:10
还有个小问题....单片的RAM太小,常数不应用RAM来保存....定义成一个宏就可以:
#define TIME0_H 0xD8
#define TIME0_L 0xF0
比你的 unsigned   char   TIME0_H=0xD8,TIME0_L=0xF0 要好
点赞  2009-12-21 15:14
引用: 引用 4 楼 great_bug 的回复:
还有个小问题....单片的RAM太小,常数不应用RAM来保存....定义成一个宏就可以:
#define TIME0_H 0xD8
#define TIME0_L 0xF0
比你的 unsigned? char? TIME0_H=0xD8,TIME0_L=0xF0 要好

谢谢你那么认真的给我回答,我按照你说的重算了下频率,修改定时初值后还是一条直线,按照程序执行顺序看了一遍,应该是每隔0.039ms(10MS/256)产生一次定时中断,然后P0口输出加1,中断256次后再输出0直到255,如此循环,应该没错的啊,不知道我分析的对不对,有点郁闷了~
点赞  2009-12-21 15:23
我还是上传电路图吧,希望能再帮我看看,我觉得应该没什么错了吧,参考别人的也是这样子接的~
点赞  2009-12-21 15:33
上面的太大了,显示不完整
点赞  2009-12-21 15:36
void   triangle()
{
CS=0;P0=num++;   CS=1;      
}
改成这样
void   triangle()
{
P0=num++;
CS=0;  CS=1;      
}
....如果P0没作其它用途,改不改都差不多......
点赞  2009-12-21 15:49
OK了,谢谢“伟大的漏洞”,我明明基本是照搬别人的电路接的,在我的图上不能仿真,在别人的却可以,呵呵,再仔细看看是不是哪接错了~
问题出在频率还有电路上,电路我在检查下~
点赞  2009-12-21 15:59
CS=0;P0=num++;   CS=1;   有问题

楼主把CS 直接接地吧。

再测试下,如果还有问题,我给你代码。 和相关的设计资料吧
点赞  2009-12-21 16:05
原先的程序放在别人的图上是可以仿真的,不过我基本是照搬他的画的,却不是在我的图上实现。

我现在想实现0到100HZ频率可调的三角波输出,上面的只是测试一部分功能而已,要是你有相关资料的话参考下也行,或者给个思路更好了,看看我想的对不对
点赞  2009-12-21 16:13
引用: 引用 10 楼 kyzf 的回复:
CS=0;P0=num++;? CS=1;? 有问题

楼主把CS 直接接地吧。

再测试下,如果还有问题,我给你代码。 和相关的设计资料吧

还是给我发些相关资料吧~;邮箱:
llwc_mcu@sina.com
点赞  2009-12-21 16:31
给你传了 程序和proteus图 请查收
点赞  2009-12-21 16:37
引用: 引用 12 楼 luoliushui 的回复:
引用 10 楼 kyzf 的回复:
CS=0;P0=num++;? CS=1;? 有问题

楼主把CS 直接接地吧。

再测试下,如果还有问题,我给你代码。 和相关的设计资料吧


还是给我发些相关资料吧~;邮箱:
llwc_mcu@sina.com


晚上下班后,9点15,QQ:604914729 聊吧,到时给你资料
点赞  2009-12-21 17:37
我现在也正在做这个东西,能把你做过的资料发给我参考一下吗?谢谢
hj0832@163.com
点赞  2010-1-4 16:39
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复