开发工具:
文件大小: 3kb
下载次数: 0
上传时间: 2010-05-10
详细说明: #include //器件库 #include //延时函数库 #include //标准I/O函数库 #include //标准函数库 unsigned char m0,m1,m2; unsigned char s,s1; // 单片机定时器0溢出中断服务程序段 // 产生伺服电机动作所需要的脉宽 interrupt [TIM0_OVF] void timer0_ovf_isr(void) { TCNT0=0xBA; if(s127) { s=0; s1=0; TCCR0=0x00; TCCR1B=0x02; TCNT1H=0xff; TCNT1L=0x59; } } // 单片机定时器1溢出中断服务程序段 // 产生0.5ms的开始脉宽和5ms以上的间隔脉宽 interrupt [TIM1_OVF] void timer1_ovf_isr(void) { #asm("wdr"); //喂狗 TCNT1H=0xff; TCNT1L=0x59; s1++; if(s1<65) PORTA=PORTA&0B11111000; //5ms以上的间隔脉宽 else { PORTA=PORTA|0B00000111; //0.5ms if(s1>70) { TCCR1B=0x00;TCCR0=0x01;s1=0;TCNT0=0xBA;} } } void main(void) { unsigned char i,j,count=0; unsigned char c[3]; unsigned int k; // 设置A口为输出状态,并且初始值为低电平 PORTA=0x00; DDRA=0xFF; // 设置B、C、D、E口为高阻输入状态,在该程序中不使用 PORTB=0x00; DDRB=0x00; PORTC=0x00; DDRC=0x00; PORTD=0x00; DDRD=0x00; PORTE=0x00; DDRE=0x00; //设置定时器0的时钟来源为系统晶体 //设置计数周期为8000KHZ,清空计数寄存器 TCCR0=0x00; TCNT0=0x00; OCR0=0x00; //设置定时器1的时钟来源为系统晶体 //设置计数周期为1000KHZ,清空计数寄存器 TCCR1A=0x00; TCCR1B=0x02; TCNT1H=0x00; TCNT1L=0x00; ICR1H=0x00; ICR1L=0x00; OCR1AH=0x00; OCR1AL=0x00; OCR1BH=0x00; OCR1BL=0x00; //使能定时器 TIMSK=0x82; // 串口模数据:8个数据位,1个停止位,无奇偶效验 // 串口使能:发送、接收 // 串口模式:异步 // 串口速率:9600 UCSRA=0x02; UCSRB=0x18; UCSRC=0x86; UBRRH=0x00; UBRRL=0x34; //设置模拟比较器 ACSR=0x80; //使能看门狗,设置喂狗周期为 时钟/2048 WDTCR=0x1F; WDTCR=0x0F; // 打开总中断 #asm("sei") delay_ms(500); putchar(0x0d); putchar(0x0a); putsf("***********************************\r"); putsf("* 3路舵机驱动小程序 *\r"); putsf("* 顺德职业技术学院 机电工程系 *\r"); putsf("* 罗建章 *\r"); putsf("***********************************\r"); while (1) { count=0; putsf("输入舵机编号(1~3):"); putchar(0x0d); n1:i=getchar(); if((i<0x31)||(i>0x38)) { putsf("error\r"); putchar(0x0d); goto n1; } putchar(i); i=i-0x30; putchar(0x0d); putchar(0x0a); putsf("输入舵机位置值(0~127),默认为0:"); putchar(0x0d); c[0]=0;c[1]=0;c[2]=0; n2:j=getchar(); if(j!=0x0d) { if((j<0x30)||(j>0x39)) goto n2; else { putchar(j); c[count++]=j; if(count<3) goto n2; else goto n3; } } n3:k=atoi(c); if(k>127) { putsf("---error\r"); putchar(0x0d); count=0; goto n2; } putsf("---OK\r"); putchar(0x0d); switch (i) { case 1: m0=k; break; case 2: m1=k; break; case 3: m2=k; break; } } } ...展开收缩
(系统自动生成,下载前可以参看下载内容)
下载文件列表
相关说明
- 本站资源为会员上传分享交流与学习,如有侵犯您的权益,请联系我们删除.
- 本站是交换下载平台,提供交流渠道,下载内容来自于网络,除下载问题外,其它问题请自行百度。
- 本站已设置防盗链,请勿用迅雷、QQ旋风等多线程下载软件下载资源,下载后用WinRAR最新版进行解压.
- 如果您发现内容无法下载,请稍后再次尝试;或者到消费记录里找到下载记录反馈给我们.
- 下载后发现下载的内容跟说明不相乎,请到消费记录里找到下载记录反馈给我们,经确认后退回积分.
- 如下载前有疑问,可以通过点击"提供者"的名字,查看对方的联系方式,联系对方咨询.