#include sfr16 TMR3RL = 0x92; sfr16 TMR3 = 0x94; // 常量定义 #define SYSCLK //调用模块: 无 voidPORT_Init (void) { XBR2 = 0x40; } //函数名称: Timer3_Init () 2000000 // 函数功能 : 定时器3初始化 /*使能交叉开关*/ P74OUT |= 0x000; /*推挽输出*/ 附录2 #include // SFR declarations #include { /*步进电机正转*/ /*A相通电*/ P5=SendData; sleep_ms(250); SendData=0x0c; /*AB相通电*/ //系统工作频率- //全局变量定义 unsigned char i=0xfe; // 函数定义 voidPORT_Init (void); void Timer3_Init (int counts); void Timer3_ISR (void); // 主程序 void main (void) { WDTCN = 0xde; WDTCN = 0xad; //禁止看门狗定时器 PORT_Init (); Timer3_Init(SYSCLK * 1024 ); REF0CN=0x02; EA = 1; while (1) { } } //函数名称: PORT_Init () //函数功能: 通用I/O口及交叉开关初始化 //入口参数: 无 //出口参数: 无 //全局变量引用: 无 //入口参数: int counts //出口参数: 无 //全局变量引用: 无 //调用模块: 无 void Timer3_Init (int counts) { TMR3CN = 0x00; TMR3RL = -counts; TMR3 = 0xffff; EIE2 |= 0x01; TMR3CN |= 0x04; } //函数名称: Timer3_ISR () // 函数功能 : 定时器 3中断服务程序 //入口参数: 无 //出口参数: 无 //全局变量引用: 无 //调用模块: 无 void Timer3_ISR (void) interrupt 14 { TMR3CN &= ~(0x80); /*清中断标志*/ P4=P5; } 功能描述: 延时 输入: WORD count(所要延时的长 度) 输出: 无 全局变量: 无 调用模块: _nop_() voidsleep_ms(unsigned char count) { unsigned char ii,jj; for(ii=0;ii } } // MAIN Routine void main (void) { unsigned char k; unsigned char SendData; /*无效看门狗*/ WDTCN = 0xde; WDTCN = 0xad; PORT_Init (); SendData=0xff; /*4相线圈都截止*/ while(1) P5=SendData; sleep_ms(250); SendData=0x0d; /*B相通电*/ P5=SendData; sleep_ms(250); SendData=0x09; /*BC相通电*/ P5=SendData; sleep_ms(250); SendData=0x0b; /*C相通电*/ P5=SendData; sleep_ms(250); SendData=0x03; /*CD相通电*/ P5=SendData; sleep_ms(250); SendData=0x07; /*D相通电*/ P5=SendData; sleep_ms(250); SendData=0x06; /*DA相通电*/ P5=SendData; sleep_ms(250); } } 函数名称: voidPORT_Init(void) 功能描述: 初始化I/O 输入: 无 输出: 无 全局变量: XBR2,P74OUT 调用模块: 无 voidPORT_Init (void) { XBR2 = 0x40; /*使能交叉开关和弱上拉*/ P74OUT |= 0x0f; /*P5低4位为推挽输出,其余口为开漏输出*/ } 附录3 #include /*SFR定义*/ // Function PROTOTYPES voidPORT_Init (void); voidPCA_Init (void); void PCA_ISR (void); // MAIN Routine void main (void) { /*关看门狗*/ WDTCN = 0xde; WDTCN = 0xad; PORT_Init (); /*初始化IO口*/ PCA_Init (); /*PCA初始化成16位脉 宽调置方式*/ EA = 1; /*开总中断*/ while (1) { } } voidPORT_Init (void) { XBR0 = 0x0f; /*CEX0-->P0.0*/ XBR2 = 0x40; /*使能交叉开关和 弱闪拉*/ P1MDOUT |= 0x00f; /*使能P1.6脚推挽输出*/ } voidPCA_Init (void) { EIE1 = 0x08; //PCA0MD = 0x01; /*PCA定时器/计 数器溢出中断禁止*/ PCA0L = 0x00; PCA0H = 0x00; PCA0CPM0 = 0x42; /*8位PWM方式, 当CCF0=1时,允许辅捉/比较标志的中断申请 */ PCA0CPL0 = 0x00; /*置初值*/ PCA0CPH0 = 0x80; PCA0CN = 0x40; /*允许PCA定时器/计数器*/} /*PCA中断子程序*/ void PCA_ISR (void) interrupt 9 { CF = 0; /*清溢出中断标志*/ CCF0 = 0; /*清匹配中断标志*/ //PCA0L = 0x00; //PCA0H = 0x40; } 因篇幅问题不能全部显示,请点此查看更多更全内容