历史上的今天
返回首页

历史上的今天

今天是:2024年10月28日(星期一)

正在发生

2019年10月28日 | PIC16F877输出正弦波信号PROTEUS仿真及程序

2019-10-28 来源:51hei

//PIC16F877单片机输出正弦波信号仿真原理图如下


//20MHz晶振,输出500Hz的正弦波,每周波100个点。

//1个周期时间为2ms,二点间隔时间为2000/100=20us

//用TMR2延时,256*Tcy*K=20,Tcy=0.2,取K=1

//PR2计算:(PR2+1)*Tcy*1=20,得PR2=99


#include

__CONFIG(0x3F3A);

#define        CS                RB1

#define        LDAC        RB2


char BUF,N;

#define  nn   100

const unsigned int SS[100]={

2048,2111,2173,2235,2297,2357,2416,2474,2530,2584,2636,2685,2733,2777,2819,2857,

2892,2924,2953,2978,2999,3017,3030,3040,3046,3048,3046,3040,3030,3017,2999,2978,

2953,2924,2892,2857,2819,2777,2733,2685,2636,2584,2530,2474,2416,2357,2297,2235,

2173,2111,2048,1985,1923,1861,1799,1739,1680,1622,1566,1512,1460,1411,1363,1319,

1277,1239,1204,1172,1143,1118,1097,1079,1066,1056,1050,1048,1050,1056,1066,1079,

1097,1118,1143,1172,1204,1239,1277,1319,1363,1411,1460,1512,1566,1622,1680,1739,

1799,1861,1923,1985};


//宏定义,最后的读SSPBUF是一定要的!

#define SPI_WRITE(A)       

        SSPBUF=A;                       

        while(STAT_BF==0);       

        BUF=SSPBUF


void        main(void)

{        unsigned int x;


        TRISB=0b11111001;

        CS=1;NOP();

        LDAC=1;

        TRISC=0b00010000;        //RC3输出(SCK),RC4输入(SDI),RC5输出(SDO)

        SSPEN=1;                        //SPI串口使能

        CKP=1;                                //空闲时钟为高电平

        SSPM3=0;                

        SSPM2=0;

        SSPM1=0;

        SSPM0=0;                        //SPI主控模式,时钟为Fosc/4

        STAT_SMP=1;                        //在数据输出时间的末端采样输入数据

        STAT_CKE=0;                        //在SCK上升沿传输数据

        PR2=99;                                //按照计算,每20us中断一次

        T2CON=0b00000100;        

        N=0;

        TMR2IE=1;                        //允许TMR2中断

        PEIE=1;

        GIE=1;

        while(1);

}


void        interrupt INT_ISR(void)

{        unsigned        int X;

        char        i,j;

        if (TMR2IF==1)

        {        TMR2IF=0;

                X=SS[N++];

                if (N>=nn)

                        N=0;

                X+=0x7000;                        //HSDN=1,参考电压缓冲,放大倍数GA=1

                CS=0;                                //片选有效

                i=X>>8;

                j=X;

                SPI_WRITE(i);                //输出命令的高8位

                SPI_WRITE(j);                //输出命令的低8位

                LDAC=0;NOP();                //DA输出有效

                LDAC=1;NOP();

                CS=1;

        }

}



推荐阅读

史海拾趣

Hong Kong X'Tals Ltd公司的发展小趣事
确保电源电压在LM122的允许范围内(4.5~40V),以避免损坏芯片。
法思特(FAST)公司的发展小趣事
随着使用环境和需求的变化,可能需要对控制电路进行调整和优化,以适应新的使用条件。
DBM Optix公司的发展小趣事

DBM Optix公司成立之初,便致力于在光学通信领域取得技术突破。在初创阶段,公司面临着资金紧张、人才匮乏等多重挑战。然而,凭借对技术的执着追求和对市场的敏锐洞察,DBM Optix成功研发出了一款具有高性能、高可靠性的光学模块,这一技术突破迅速获得了市场的认可,为公司的发展奠定了坚实的基础。

Greenray Industries Inc公司的发展小趣事

为了加速绿色技术的推广和应用,GreenTech积极寻求与全球知名企业的战略合作。例如,公司与一家国际领先的电动汽车制造商达成合作协议,共同研发用于电动汽车的高效电池管理系统。通过这一合作,GreenTech不仅提升了自身在电池技术领域的竞争力,还成功将绿色技术应用于实际产品中,推动了电动汽车行业的绿色发展。

EEMB Co Ltd公司的发展小趣事

随着技术的不断进步和市场需求的日益增长,EEMB集团开始加大研发投入,力求在锂电池技术上实现更大的突破。经过不懈努力,公司成功研发出多款具有高性能、高安全性和长寿命特点的锂电池产品,并获得了多项国家专利。这些技术成果不仅提升了公司的市场竞争力,也为公司赢得了更多客户的青睐。同时,公司也积极开拓国际市场,产品逐渐出口到美国、日本、俄罗斯等国家。

Advanced Detector Corp公司的发展小趣事

ADC始终坚持以技术创新为核心竞争力,不断投入研发资源,探索新的技术领域。目前,公司正积极研发应用于物联网、人工智能等前沿领域的探测器技术,并计划推出更多具有创新性的产品。展望未来,ADC将继续致力于技术创新和市场拓展,努力成为电子行业的领军企业。

这五个故事展示了Advanced Detector Corp公司从创立初期到逐渐发展壮大的过程,体现了公司在技术创新、市场扩张、战略合作等方面的努力和成就。同时,这些故事也揭示了ADC在电子行业中的重要地位和影响力。

问答坊 | AI 解惑

双面板孔金属化的制作方法详解

在印制板加工厂采用的是自动化的连续作业设备,设备成本昂贵,这在业余条件下是根本不可能做到的。我们在这里推出的是一种接近工厂正规生产工艺流程,但生产工艺相对简单,设备极其低廉,业余条件下比较容易完成操作的方法。郑州东明电子研究所为此 ...…

查看全部问答>

DIESEL时尚创意电子表

创意幽默的 DIESEL 这次将数位电子錶款带入另一个多彩境界,春夏全新推出「颜色DNA」电子錶款系列。此系列玩色十足,藉由 5 种不同的颜色DNA营造出不同的色彩活力,搭配极具前卫设计感的造型錶身,个性帅性。不论是热情生活的红色、尽情自我的蓝色 ...…

查看全部问答>

wonderglass我那个键盘是中断的方式还是扫描的方式??请回答

wonderglass我那个键盘是中断的方式还是扫描的方式??请回答…

查看全部问答>

有没有人能提供周立功magicarm2410 bootload 源代码?

有没有人能提供周立功magicarm2410 bootload 源代码?串口0坏了,输出全是乱码,没法用超级终端。想用uboot做一个,忙了一个星期头昏眼花也没搞定dm9000驱动,总是ping不通,天天百度也没有发现真正能用的。郁闷!!周立功真草但!!!…

查看全部问答>

【AVR】我都快疯了,哪位大侠帮帮忙关于定时器T0和T1配合产生间隔的38k方波!

小弟用TO做方波产生38k的红外线方波,用T1做延时,这样产生一段一段的方波,再用一体化接头接受,发现无论什么情况下,即T0中的OCR0无论设置什么值,一体化接头都能接受到。我把T1去掉,产生连续的T0方波,发现就正常了,为什么啊?哪为高手解释一 ...…

查看全部问答>

单片机串口控制彩色LCD

款驱动模块可以驱1.3寸--15寸的TFT屏,使用非常方便,感兴趣的朋友可以给我发邮件所取资料。我的邮箱是 boy_201a@163.com  我的电话是010-62105007-802  13501104029 简单的串行接口,最小系统与用户的连线只需 3 根线( ...…

查看全部问答>

在MAPLAB中通过ICD2调试,为什么不能设置断点?

经常是出现一个空心的红圆圈,一运行就报one or more breakpoints could not be resolved.select breakpoints from the debugger menu for details? 还有MAPLAB中一次只能设置一个断点吗?…

查看全部问答>

谁做过用单片机控制发光二级管模拟时钟的?

16*16的发光二级管,做成一个钟的显示页面 里面要有一根针在旋转…

查看全部问答>

请教香主---PWM输入模式最小频率问题

我现在用例子程序PWMINPUT, 再PA0.1上我外接了一个PWM信号。例程中说:The TIMxCLK frequency is set to 72 MHz, the Prescaler is 0 so the TIM2 counter ...…

查看全部问答>

我(初学者)用DM642怎么移植MPEG-4T算法(毕业设计)?

各位高手,我想请教一下,我正在用DM642移植MPEG-4算法,看了实验包里的 MPEG-2LOOPBACK程序后,有好多不明白: 1、是从哪个地方调用MPEG-2编解码的算法的? 2、DSP/BIOS编程是什么意思? 3、什么是RF-5设计框架?怎么使用? 望各位老师指点,谢谢 ...…

查看全部问答>