(1)多功能波形信号发生模块 程序应用
#INCLUDE
EQU
EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU EQU
0AH 20H 21H 22H 23H 30H 31H 32H 33H 40H 41H 42H 43H 81H 2FH 2EH 0FAH
;方波次数 ;方波常数 ;方波点数 ;方波输出值 ;锯齿波次数 ;锯齿波常数 ;锯齿波点数 ;锯齿波输出值 ;三角波次数 ;三角波常数 ;三角波点数 ;三角波输出值 ;W暂存 ;STATUS暂存 ;最大频率常数
;------------------------------------------------------------------------------------------------------
ORG 0 SYS_RESET
GOTO START
;------------------------------------------------------------------------------------------------------ ORG 4 ;中断程序 MOVWF SWAPF SWAPF MOVWF CALL SWAPF MOVWF SWAPF RETFIE
;------------------------------------------------------------------------------------------------------ ORG 40H NOP START
CALL INT
CALL INTPORT CALL INTTMO
WBU WB0, 0 STATUS, 0 SBU SERV_INT SBU, 0 STATUS WBU, 0
LOOP ;延时
NOP NOP
GOTO LOOP
;------------------------------------------------------------------------------------------------------ INT CLRF
TEMP0DOT TEMP1DOT TEMP2DOT TEMP0OUT TEMP1OUT TEMP2OUT 03H
TEMP0TIME TEMP0CONST TEMP2TIME TEMP2CONST 06H
TEMP1TIME TEMP1CONST
CLRF CLRF CLRF CLRF CLRF MOVLW MOVWF MOVWF MOVWF MOVWF MOVLW MOVWF MOVWF RETURN
;------------------------------------------------------------------------------------------------------ INTPORT ;端口初始化 BCF BCF BCF CLRF CLRF BSF BSF MOVLW MOVWF
STATUS, 0 STATUS, 1 STATUS, 5 PORTC PORTD PORTE,1 STATUS, 5 00H TRISD
MOVLW OF4H MOVWF TRISC
MOVWF BCF
TRISE STATUS, 5
;定义RE1为输出,其他为输入
RETURN
;------------------------------------------------------------------------------------------------------ INTTM0 ;定时器初始化 BSF
STATUS, 5 80H
OPTION_ R STATUS, 5
MOVLW
MOVWF BCF
MOVLW MOVLW 0A0H RCC
;开放定时器中断
;RCC=最大频率延时常数
MOVWF RTCC RETURN;
;------------------------------------------------------------------------------------------------------ SERY_ INT ;中断服务程序 BTFSC GOTO CLRF BSF RETURN
INTCON,2 SERVRTCC INTCON INTCON, 5
SERVRTCC
MOVLW RCC MOVWF BCF
RTCC
INTCON,2
CALL OUTPUT RETFIE
;------------------------------------------------------------------------------------------------------ OUTPUT ;输出波形 BCF STATUS,5 FBO DECFSZ TEMP0TIME,1 GOTO J BO CALL FANGBO JBO DECFSZ TEMP1TIME,1 GOTO SJ BO CALL JUCBO
SJBO DECFSZ TEMP2 TIME,1 RETURN CALL
SJIAOBO
;方波
;锯齿波
;三角波
RETURN
;------------------------------------------------------------------------------------------------------ FANGBO BCF BCF BCF
PORTS, 1
;MR为低
PORTC, 0 PORTC, 1 ;选择输出通道, 0通道为方波 TEMP0DOT,1 TEMP0CONST, 0 TEMP0TIME TEMP0DOT,7 GAO
INCF MOVF MOVWF BTFSC GOTO
GOTO DI
GAO MOVLW OFFH MOVWF PORTD
BSF PORTE, 1
RETURN
DI M0VLW 00H MOVWF PORTD BSF PORTE, 1 RETURN
;------------------------------------------------------------------------------------------------------ JUCBO BCF BCF MOVF MOVWF
PORTE, 1
PORTC,0 TEMP1TIME
;选择输出通道, 1通道为锯齿波
TEMP1CONST,0
INCFSZ TEMP1DOT, 1 GOTO JUBO1 MOVF MOVWF
TEMP1OUT, 0 PORTD
INCF TEMP1OUT, 1 RETURN
JUBO1 MOVLW 00H MOVWF RETURN
;------------------------------------------------------------------------------------------------------ SJIAOBO BCF PORTE, 1 BCF PORTC, 1 ;选择输出通道, 2通道为三角波 MOVF MOVWF
TEMP2CONST, 0 TEMP2TIME TEMPlOUT
INCFSZ TEMP2DOT, 1 GOTO SJBO2 CALL SJBO0 SJB02 MOVF TEMP2OUT, 0 MOVWF PORTD BSF MOVLW BTFSS GOTO ADDWF RETURN SJBO1 SUBWF RETURN SJBO0 CLRF RETURN END
TEMP2OUT PORTE, 1 02H
TEMP2DOT,7 SJBO1 TEMP2OUT, 1
TEMP2OUT,1
(2)PWM信号发生模块 程序应用
#include
/*CCP1模块的PWM工作方式初始化子程序*/ void INIT_CCP1() {
PR2=0XFF; CCPR1L=0X7F; CCP1CON=0X3C; INTCON=0X00; TRISC=0XFB; }
/*主程序*/ main() {
INIT_CCP1();
/*CCP1模块的PWM工作方式初始化*/
/*前分频比为16,打开TMR2,同时输出PWM信号*/
T2CON=0X03; }
(3)正弦信号发生模块 程序应用
#include
//本程序将通过PIC16F877的I2C方式驱动D/A 转换器MAX518,使其D/A0 通道输出 //一个连续的正弦波形
const char table[ ] = {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 中,而不至于占用太多的RAM unsigned char i; unsigned char j; unsigned char n; //I2C 初始化子程序 void i2cint() {
SSPCON = 0X08; TRISC3 =1;
//初始化SSPCON 寄存器 //设置SCL 为输入口 /*设置PWM周期*/
/*设置工作循环的高8bit为01111111*/
/*设置CCP1为PWM工作方式,且工作循环的低bit2为11*/ /*禁止总中断和外围中断*/ /*设置RC2/CCP1为输出*/