motortest.lst
来自「串口控制8路舵机程序,本程序适用于III型实验板」· LST 代码 · 共 181 行
LST
181 行
C51 COMPILER V7.06 MOTORTEST 08/01/2007 21:31:25 PAGE 1
C51 COMPILER V7.06, COMPILATION OF MODULE MOTORTEST
OBJECT MODULE PLACED IN MotorTest.OBJ
COMPILER INVOKED BY: C:\Keil\C51\BIN\C51.EXE MotorTest.c BROWSE DEBUG OBJECTEXTEND
stmt level source
1 #include "at89x52.h"
2 #include "Motor\Motor.h"
3 #include "series\series.h"
4 #include "LedDigital\LedDigital.h"
5 #include "MotorTest.h"
6
7 //舵机度数控制
8 //uint const code Motion[5] = {0xfc66,0xf8cc,0xf553,0xf199,0xee40};
9
10 //舵机位选指针
11 uchar MotorIndex=0x00;
12
13 //数码管显示数据
14 long LedDisMotorInfo;
15
16 //接收到的舵机控制数组 分别为位选,度数高字节,度数低字节, 接收到的字节数(0-2)
17 uchar MotorCtrl[3]/*={0x00,0xf5,0x53}*/ , RCharCount=0x00;
18
19 //正确接收舵机控制信息发回字符串
20 uchar const code TestStr[]={"test ok!\n"};
21
22 /******************************
23 名称:void Timer0Init(void)
24 功能:定时/计数器0初始化程序
25 计时2。5ms扫描8个舵机
26 ******************************/
27 void Timer0Init(void)
28 {
29 1 TH0=0xee;
30 1 TL0=0x00;
31 1 TMOD|=0x01;
32 1 TR0=1;
33 1 }
34
35 /*****************************
36 名称:void Timer1Init(void)
37 功能:定时/计数器1初始化程序
38 控制正频宽
39 *****************************/
40 void Timer1Init(void)
41 {
42 1 TH1=0x80;
43 1 TL1=0x00;
44 1 TMOD|=0x10;
45 1 TR1=1;
46 1 }
47
48 /****************************
49 名称:void Timer2Init(void)
50 功能:定时/计数器2初始化程序
51 产生波特率
52 ****************************/
53 void Timer2Init(void)
54 {
55 1 RCAP2H=0xff;
C51 COMPILER V7.06 MOTORTEST 08/01/2007 21:31:25 PAGE 2
56 1 RCAP2L=0xb8;
57 1 RCLK=1;
58 1 TCLK=1;
59 1 TR2=1;
60 1 }
61
62 /****************************
63 名称:void CommInit(void)
64 功能:串口初始化程序
65 ****************************/
66 void CommInit(void)
67 {
68 1 SM0=0;
69 1 SM1=1;
70 1 SM2=0;
71 1 REN=1;
72 1 }
73
74 /****************************
75 名称:void SystemInit(void)
76 功能:系统初始化及开中断
77 ****************************/
78 void SystemInit(void)
79 {
80 1 Timer0Init();
81 1 Timer1Init();
82 1 Timer2Init();
83 1 CommInit();
84 1 EA=1;
85 1 ET2=1;
86 1 ES=1;
87 1 ET1=1;
88 1 ET0=1;
89 1 }
90
91 /*****************************
92 名称:void Timer0Server(void)interrupt 1
93 功能:确定正频宽
94 ******************************/
95 void Timer0Server(void)interrupt 1
96 {
97 1 TH0=0xee;
98 1 TL0=0x00;
99 1
100 1 MotorIndex%=8; //舵机位选
101 1 P2=0x01<<MotorIndex;
102 1
103 1 TL1=MotorAngle[MotorIndex];
104 1 TH1=MotorAngle[MotorIndex]>>8;
105 1 MotorIndex++;
106 1
107 1 LedDigitalDisplay(); //在数码管上显示舵机控制信息
108 1 }
109
110 /*****************************
111 名称:void Timer1Server(void)interrupt 3
112 功能:产生正频宽
113 *****************************/
114 void Timer1Server(void)interrupt 3
115 {
116 1 P2=0x00;
117 1 }
C51 COMPILER V7.06 MOTORTEST 08/01/2007 21:31:25 PAGE 3
118
119 /******************************************************
120 名称:void CommInterServer(void)interrupt 4
121 功能:串口中断服务程序
122 *******************************************************/
123 void CommInterServer(void)interrupt 4
124 {
125 1 if(RI==1)
126 1 {
127 2 MotorCtrl[RCharCount]=CommReceive();
128 2 RI=0;
129 2 RCharCount++;
130 2 if(RCharCount==0x03)
131 2 {
132 3 RCharCount=0x00;
133 3 SetMotorCtrl(MotorCtrl); //设置舵机控制信息
134 3
135 3 LedDigitalTransport(MotorCtrlInfoToL(MotorCtrl)); //设置舵机控制信息的显示内容
136 3 //作参数的函数:将uchar数组转换为long型
137 3 CommSendString(TestStr); //发送测试成功字符串
138 3 }
139 2 }
140 1 }
141
142 /********************************************************************************
143 * 名称: main ()
144 * 功能: 主函数,整个程序的入口
145 ********************************************************************************/
146 void main()
147 {
148 1 SystemInit();
149 1 while(1)
150 1 {
151 2 ;
152 2 }
153 1 }
MODULE INFORMATION: STATIC OVERLAYABLE
CODE SIZE = 294 ----
CONSTANT SIZE = 10 ----
XDATA SIZE = ---- ----
PDATA SIZE = ---- ----
DATA SIZE = 9 ----
IDATA SIZE = ---- ----
BIT SIZE = ---- ----
END OF MODULE INFORMATION.
C51 COMPILATION COMPLETE. 0 WARNING(S), 0 ERROR(S)
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?