您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > PIC单片机应用开发典型模块_第四章程序
(1)多功能波形信号发生模块程序应用#INCLUDEP16F877.INCRTCCEQU01HPCEQU02HPCLATHEQU0AHTEMP0TIMEEQU20H;方波次数TEMP0CONSTEQU21H;方波常数TEMO0DOTEQU22H;方波点数TEMP0OUTEQU23H;方波输出值TEMP1TIMEEQU30H;锯齿波次数TEMP1CONSTEQU31H;锯齿波常数TEMP1DOTEQU32H;锯齿波点数TEMP1OUTEQU33H;锯齿波输出值TEMP2TIMEEQU40H;三角波次数TEMP2CONSTEQU41H;三角波常数TEMP2DOTEQU42H;三角波点数TEMP2OUTEQU43H;三角波输出值OPTION_REQU81HWBUEQU2FH;W暂存SBUEQU2EH;STATUS暂存RCCEQU0FAH;最大频率常数;------------------------------------------------------------------------------------------------------ORG0SYS_RESETGOTOSTART;------------------------------------------------------------------------------------------------------ORG4;中断程序MOVWFWBUSWAPFWB0,0SWAPFSTATUS,0MOVWFSBUCALLSERV_INTSWAPFSBU,0MOVWFSTATUSSWAPFWBU,0RETFIE;------------------------------------------------------------------------------------------------------ORG40HNOPSTARTCALLINTCALLINTPORTCALLINTTMOLOOP;延时NOPNOPGOTOLOOP;------------------------------------------------------------------------------------------------------INTCLRFTEMP0DOTCLRFTEMP1DOTCLRFTEMP2DOTCLRFTEMP0OUTCLRFTEMP1OUTCLRFTEMP2OUTMOVLW03HMOVWFTEMP0TIMEMOVWFTEMP0CONSTMOVWFTEMP2TIMEMOVWFTEMP2CONSTMOVLW06HMOVWFTEMP1TIMEMOVWFTEMP1CONSTRETURN;------------------------------------------------------------------------------------------------------INTPORT;端口初始化BCFSTATUS,0BCFSTATUS,1BCFSTATUS,5CLRFPORTCCLRFPORTDBSFPORTE,1BSFSTATUS,5MOVLW00HMOVWFTRISDMOVLWOF4HMOVWFTRISC;定义RE1为输出,其他为输入MOVWFTRISEBCFSTATUS,5RETURN;------------------------------------------------------------------------------------------------------INTTM0;定时器初始化BSFSTATUS,5MOVLW80HMOVWFOPTION_RBCFSTATUS,5MOVLW0A0H;开放定时器中断MOVLWRCC;RCC=最大频率延时常数MOVWFRTCCRETURN;;------------------------------------------------------------------------------------------------------SERY_INT;中断服务程序BTFSCINTCON,2GOTOSERVRTCCCLRFINTCONBSFINTCON,5RETURNSERVRTCCMOVLWRCCMOVWFRTCCBCFINTCON,2CALLOUTPUTRETFIE;------------------------------------------------------------------------------------------------------OUTPUT;输出波形BCFSTATUS,5FBODECFSZTEMP0TIME,1;方波GOTOJBOCALLFANGBOJBODECFSZTEMP1TIME,1;锯齿波GOTOSJBOCALLJUCBOSJBODECFSZTEMP2TIME,1;三角波RETURNCALLSJIAOBORETURN;------------------------------------------------------------------------------------------------------FANGBOBCFPORTS,1;MR为低BCFPORTC,0BCFPORTC,1;选择输出通道,0通道为方波INCFTEMP0DOT,1MOVFTEMP0CONST,0MOVWFTEMP0TIMEBTFSCTEMP0DOT,7GOTOGAOGOTODIGAOMOVLWOFFHMOVWFPORTDBSFPORTE,1RETURNDIM0VLW00HMOVWFPORTDBSFPORTE,1RETURN;------------------------------------------------------------------------------------------------------JUCBOBCFPORTE,1BCFPORTC,0;选择输出通道,1通道为锯齿波MOVFTEMP1CONST,0MOVWFTEMP1TIMEINCFSZTEMP1DOT,1GOTOJUBO1MOVFTEMP1OUT,0MOVWFPORTDINCFTEMP1OUT,1RETURNJUBO1MOVLW00HMOVWFTEMPlOUTRETURN;------------------------------------------------------------------------------------------------------SJIAOBOBCFPORTE,1BCFPORTC,1;选择输出通道,2通道为三角波MOVFTEMP2CONST,0MOVWFTEMP2TIMEINCFSZTEMP2DOT,1GOTOSJBO2CALLSJBO0SJB02MOVFTEMP2OUT,0MOVWFPORTDBSFPORTE,1MOVLW02HBTFSSTEMP2DOT,7GOTOSJBO1ADDWFTEMP2OUT,1RETURNSJBO1SUBWFTEMP2OUT,1RETURNSJBO0CLRFTEMP2OUTRETURNEND(2)PWM信号发生模块程序应用#includepic.h/*CCP1模块的PWM工作方式初始化子程序*/voidINIT_CCP1(){PR2=0XFF;/*设置PWM周期*/CCPR1L=0X7F;/*设置工作循环的高8bit为01111111*/CCP1CON=0X3C;/*设置CCP1为PWM工作方式,且工作循环的低bit2为11*/INTCON=0X00;/*禁止总中断和外围中断*/TRISC=0XFB;/*设置RC2/CCP1为输出*/}/*主程序*/main(){INIT_CCP1();/*CCP1模块的PWM工作方式初始化*/T2CON=0X03;/*前分频比为16,打开TMR2,同时输出PWM信号*/}(3)正弦信号发生模块程序应用#includepic.h//本程序将通过PIC16F877的I2C方式驱动D/A转换器MAX518,使其D/A0通道输出//一个连续的正弦波形constchartable[]={0X80,0X86,0X8D,0X93,0X99,0X9F,0XA5,0XAB,0XB1,0XB7,0XBC,0XC2,0XC7,0XCC,0XD1,0XD6,0XDA,0XDF,0XE3,0XE7,0XEA,0XEE,0XF1,0XF4,0XF6,0XF8,0XFA,0XFC,0XFD,0XFF,0XFF,0XFF,0XFF,0XFF,0XFF,0XFE,0XFD,0XFB,0XF9,0XF7,0XF5,0XF2,0XEF,0XEC,0XE9,0XE5,0XE1,0XDD,0XD8,0XD4,0XCF,0XCA,0XC5,0XBF,0XBA,0XB4,0XAE,0XA8,0XA2,0X9C,0X96,0X90,0X89,0X83,0X80,0X79,0X72,0X6C,0X66,0X60,0X5A,0X55,0X4E,0X48,0X43,0X3D,0X38,0X33,0X2E,0X29,0X25,0X20,0X1C,0X18,0X15,0X11,0X0E,0X0B,0X09,0X07,0X05,0X03,0X02,0X00,0X00,0X00,0X00,0X00,0X00,0X01,0X02,0X04,0X06,0X08,0X0A,0X0D,0X10,0X13,0X16,0X1A,0X1E,0X22,0X27,0X2B,0X30,0X35,0X3A,0X40,0X45,0X4C,0X51,0X57,0X5D,0X63,0X69,0X6F,0X76,0X7C};//以上的数组用于存放正弦表,在定义数组时,前面应该加上const,//使数组存放于ROM中,而不至于占用太多的RAMunsignedchari;unsignedcharj;unsignedcharn;//I2C初始化子程序voidi2cint(){SSPCON=0X08;//初始化SSPCON寄存器TRISC3=1;//设置SCL为输入口TRISC4=1;//设置SDA为输入口TRISA4=0;SSPSTAT=0X80;//初始化SSPSTAT寄存器SSPADD=0X02;//设定I2C时钟频率SSPCON2=0X00;//初始化SSPCON2寄存器di();//关闭总中断SSPIF=0;//清SSP中断标志RA4=0;//关掉74HC165的移位时钟使能,以免74HC165//移位数据输出与I2C总线的数据线发生冲突SSPEN=1;//SSP模块使能}//I2C总线输出数据子程序voidi2cout(){SEN=1;//产生I2C启动信号for(n=0x02;--n;)continue;//给予一定的延时,保证启动do{RSEN=1;//产生I2C启动信号}while(SSPIF==0);//如果没能启动,则反复启动,直到启动为止SSPIF=0;//SSPIF标志清0SSPBUF=0X58;//I2C总线发送地址字节do{;}while(SSPIF==0);//等待地址发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=0X01;//I2C总线发送命令字节do{;}while(SSPIF==0);//等待命令发送完毕SSPIF=0;//SSPIF标志清0SSPBUF=j;//I2C总线发送数据字节do{;}while(SSPIF==0);//等待数据发送完毕SSPIF=0;//SSPIF标志清0PEN=1;//产生停止条件do{;}while(SSPIF==0);//等待停止条件产生SSPIF=0;//SSPIF标志清0}//主程序main(){i2cint();//I2C初始化while(1){for(i=0x00;i=127;++i){
本文标题:PIC单片机应用开发典型模块_第四章程序
链接地址:https://www.777doc.com/doc-559931 .html