📄 main.lst
字号:
C51 COMPILER V7.50 MAIN 03/24/2008 23:07:28 PAGE 1
C51 COMPILER V7.50, COMPILATION OF MODULE MAIN
OBJECT MODULE PLACED IN main.OBJ
COMPILER INVOKED BY: D:\Program Files\keil51\C51\BIN\C51.EXE main.c BROWSE DEBUG OBJECTEXTEND
line level source
1 #include"reg51.h"//包涵头文件
2 //#define ctlout P1//定义P1口为控制输出口
3 #define minangle 500//定义最小脉宽
4 #define maxangle 1800//定义最大脉宽
5 #define Initangle 1100//初始角度-单位均为μm
6 //#define endangle 2200//终止角度
7 #define stepangle 50//定义步进脉宽
8 #define circle 20000//定义舵机周期20ms
9 #define T0MAX 65535//定义定时器定时的最大值
10 void Initinterupt(void);//中断初始化函数
11 sbit ctlout=P1^0;//定义P1.0口为控制输出口
12
13 //全局变量
14 unsigned int angle=Initangle ;//角度
15 bit angleflag=0;//正负向标志为,0标志舵机正向转动,1标志负向转动
16 bit voltflag=0;//输出高低电平(占空)标志位,0标志输出高电平(占),1标志低电平(空)
17 //主函数开始
18 void main(void)
19 {
20 1 Initinterupt();//中断初始化函数
21 1 while(1);//等待中断
22 1 }
23 //外部中断负跳变检测函数
24 void INT0process(void) interrupt 0
25 {
26 1 EX0=0;//关闭外部中断0
27 1 IE0=0;//外部中断标志清0
28 1 TR0=0;//关定时器0
29 1 if(!angleflag)//若果舵机正向转动
30 1 {
31 2 angle=angle+stepangle;//输出角度增加一个不进角
32 2 if(angle>=maxangle)//若果旋转角度大于或等于终止角度
33 2 angleflag=1;//标志负向旋转标志位
34 2 }
35 1 else //否则舵机反向旋转
36 1 {
37 2 angle=angle-stepangle;//输出角度减小一个不进角
38 2 if(angle<=minangle)//如果旋转角度小于或等于起始角度
39 2 angleflag=0;//标志正向旋转标志
40 2 }
41 1 ET0=1;//开定时器T0允许
42 1 TR0=1;
43 1 EX0=1;
44 1 ctlout=0;
45 1 voltflag=1;
46 1 }
47 //中断初始化函数
48 void Initinterupt(void)
49 {
50 1 IT0=1;//将外部中断0设置为下降沿触发方式
51 1 TMOD=0x01;//设置定时器T0工作方式为2计时
52 1 TH0=(T0MAX-(circle-angle))>>8;//送出高8位
53 1 TL0=(T0MAX-(circle-angle))&0x00ff;//送出低八位
54 1 EA=1;//开总中断允许
55 1 ET0=1;//开定时器T0允许
C51 COMPILER V7.50 MAIN 03/24/2008 23:07:28 PAGE 2
56 1 EX0=1;//开放外部中断0
57 1 ctlout=0;
58 1 voltflag=1;
59 1 TR0=1;
60 1 }
61 //定时中断处理程序,
62 void Time0process(void) interrupt 1
63 {
64 1
65 1 TR0=0;//关闭T0中断允许
66 1 TF0=0;//清除中都T0标志位
67 1 if(!voltflag)//如果是高电平输出标志
68 1 {
69 2 ctlout=0;//输出空
70 2 voltflag=1;//标志成低电平标志
71 2 TH0=(T0MAX-(circle-angle))>>8;//送出高8位
72 2 TL0=(T0MAX-(circle-angle))&0x00ff;//送出低八位
73 2
74 2 }
75 1 else//否则输出搞电平
76 1 {
77 2 ctlout=1;//输出占
78 2 voltflag=0;//标志成高电平标志
79 2 TH0=(T0MAX-angle)>>8;//送出高8位
80 2 TL0=(T0MAX-angle)&0x00ff;//送出低八位
81 2 }
82 1 TR0=1;//启动T0中断
83 1 }
84
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 297 ----
CONSTANT SIZE = ---- ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 2 ----
IDATA SIZE = ---- ----
BIT SIZE = 2 ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -