资源简介
用51单片机控制舵机,周期为20ms,我的程序尽量写得简单易懂了,可以通过串口发送1、2、3、4分别控制舵机的不同工作状态。1右转,2左转,3回到初始位置,4自由转动:不断地左转和右转
代码片段和文件信息
#include
#define uchar unsigned char
uchar count;
sbit pwm=P0^0; //PWM信号输出口
uchar jia=1; //角度增加按键检测I/O口
uchar jan=1; //角度减少按键检测I/O口
uchar jd; //角度标识
uchar a;
uchar i;
uchar flag;
void delay(uchar z)
{
uchar xy;
for(x=125;x>0;x--)
for(y=z;y>0;y--);
}
void Com_Init()
{
TMOD=0x21; //T1工作于方式1
TH1=0xfd; //设置波特率为9600
TL1=0xfd;
TR1=1; //启动T1
REN=1; //允许串行口接收
SM0=0; //串口工作方式1
SM1=1;
EA=1; //开放所有中断
ES=1; //允许串行口中断
}
void Time0_Init() //定时器初始化
{
// TMOD=0x01; //定时器0工作在方式1
IE=0x82;
TH0=0xff;
TL0=0xa3; //11.0592MHz晶振,0.1ms
TR0=1; //定时器开始
}
void Time0_Int() interrupt 1
{
TH0=0xff;
TL0=0xa3;
if(count pwm=1; //确实小于,pwm输出高电平
else
pwm=0; //大于则输出低电平
count=(count+1); //0.5ms次数加1
count=count%40; //次数始终保持为40即保持周期为20ms
}
void main()
{
jd=12;
count=0;
Time0_Init();
Com_Init();
while(1)
{
if(flag==4)
{
do
{
if(flag != 4)
break;
jd=5;
count=0;
delay(500);
for(i=1;i<=14;i++)
{
if(flag != 4)
break;
jd++;
count=0;
if(jd==20)
jd=19; //已经是180度,则保持
delay(500);
if(i==14)
{
for(i=1;i<=14;i++)
{
if(flag != 4)
break;
jd--;
count=0;
if(jd==4)
jd=5; //已经是0度,则保持
delay(500);
}
}
}
}while(flag!=4);
}
}
}
void ser() interrupt 4
{
if(RI==0) return;
ES=0; //关闭口中断
RI=0; //清除口接收标志位
a=SBUF; //读取字符
flag=a;
ES=1; //允许串口中断
P2 = ~P2;
if(flag==1)
{
jd++;
count=0; //按键按下 则20ms周期从新开始
if(jd==20)
jd=19; //已经是180度,则保持
}
if(flag==2)
{
jd--;
count=0;
if(jd==4)
jd=5; //已经是0度,则保持
}
if(flag==3)
{
jd=12;
count=0;
}
}
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 7199 2010-08-29 23:32 串口控制舵机\串口控制舵机.LST
文件 2099 2010-08-30 00:10 串口控制舵机\串口控制舵机.c
文件 1348 2010-08-29 23:32 串口控制舵机\串口控制舵机.hex
文件 41 2010-08-29 23:32 串口控制舵机\串口控制舵机.lnp
文件 6232 2010-08-29 23:32 串口控制舵机\串口控制舵机.OBJ
文件 8462 2010-08-29 23:32 串口控制舵机\串口控制舵机.M51
文件 996 2010-08-30 00:10 串口控制舵机\串口控制舵机.Opt
文件 5404 2010-08-29 23:32 串口控制舵机\串口控制舵机
文件 199 2010-08-30 00:10 串口控制舵机\串口控制舵机.plg
文件 2160 2010-08-27 00:34 串口控制舵机\串口控制舵机.Uv2
文件 0 2010-08-26 09:53 串口控制舵机\串口控制舵机_Uv2.Bak
....... 994 2010-08-29 23:34 串口控制舵机\串口控制舵机_Opt.Bak
目录 0 2010-08-29 19:52 串口控制舵机
----------- --------- ---------- ----- ----
35134 13
相关资源
- 51单片机的出租车计价系统
- 串口调试工具sscom5.11
- 51单片机控制GSM模块实现短信控制继电
- ADC0809 C51单片机控制 输出到串口显示
- 在ROS中与其他器件使用十六进制串口
- 串口抓包软件AccesPort
- STM32F407串口IAP
- 51单片机红外遥控风扇
- 精密称重AD7730读写程序,并通过串口
- 基于51单片机音乐播放器
- 51单片机用温度传感器控制直流电机转
- 基于51单片机的密码锁程序
- 51单片机的医院无线护理呼叫系统的设
- 单片机多定时器软件,解决单片机内
- 虚拟串口vuart驱动
- 语音播放WT588D一线串口
- 毕业设计__基于51单片机的公交车自动
- 光电编码器C程序
- 含有串口通讯的LabVIEW万用表上位机
- 基于51单片机的温室大棚温湿度测控系
- 可任意设置非标准波特率的串口调试
- STorM32-BGC串口通讯协议
- ALIENTEK MINISTM32 实验3 串口实验
- 虚拟串口SerialNull V1.7 破解版
- 串口通信的界面交互性的设计与实现
- Atmega128串口485通信
- 串口调试程序485,用于接收发送数据
- linux 串口数据接收 发送
- 基于AT89C2051单片机的智能充电器设计
- 串口通信解决数据乱码和数据丢失
评论
共有 条评论