📄 pca.lst
字号:
C51 COMPILER V7.20 PCA 09/02/2007 21:16:40 PAGE 1
C51 COMPILER V7.20, COMPILATION OF MODULE PCA
OBJECT MODULE PLACED IN pca.OBJ
COMPILER INVOKED BY: C:\KEIL\C51\BIN\C51.EXE pca.c DEBUG OBJECTEXTEND
line level source
1 #include "common.h"
2 #include <stdlib.h>
3 #include "pca.h"
4 //bit leftw_direct;
5 //bit rightw_direct;
6 sbit P6_0=P6^0; //en2
7 sbit P6_1=P6^1; //en1
8 #define leftw_direct P6_1 //控制左轮方向
9 #define rightw_direct P6_0 //控制右轮方向
10 //uchar leftw_direct;
11 //uchar rightw_direct;
12 //sbit ECOM0=PCA0CPM0^6;
13
14 /********/
15 void pca0_ini()
16 {
17 1 temppage = SFRPAGE;
18 1 SFRPAGE=0x00;
19 1 PCA0MD=0x08;//PCA采用系统时钟,且PCA溢出中断禁止
20 1 PCA0CN=0x40;//启动PCA计数器
21 1 EIE1|=0x08;//PCA中断使能,EPCA
22 1 SFRPAGE=temppage;
23 1 }
24
25 /*****CEX0,CEX1为PWM输出*/
26 void pca0_cex0_ini()
27 {
28 1 temppage = SFRPAGE;
29 1 SFRPAGE=0x00;
30 1 PCA0CPM0=0X42; //CEX1为8bit PWM输出模式
31 1 SFRPAGE=temppage;
32 1 }
33 void pca0_cex1_ini()
34 {
35 1 temppage = SFRPAGE;
36 1 SFRPAGE=0x00;
37 1 PCA0CPM1=0X42; //CEX1为8bit PWM输出模式
38 1 SFRPAGE=temppage;
39 1 }
40
41 /************************/
42 void PWM_set(uchar vleft,uchar vright)
43 { //占空比设置,高电平占空比为(256-vleft)/256
44 1 temppage = SFRPAGE;
45 1 SFRPAGE = 0x00;
46 1 PCA0CPH0=vleft;
47 1 PCA0CPH1=vright;
48 1 SFRPAGE=temppage;
49 1 }
50
51 /**********************/
52 void drive_set(char vleft, char vright)//有符号字符型,取值范围-128~+127;
53 //0,-128为速度最大,STOP速度最小,正数正转,负数反转
54 {
55 1
C51 COMPILER V7.20 PCA 09/02/2007 21:16:40 PAGE 2
56 1 uchar m_vleft,m_vright;
57 1 m_vleft=256-2*abs(vleft);
58 1 m_vright=256-2*abs(vright);
59 1 temppage=SFRPAGE;
60 1 SFRPAGE=0x00;
61 1 PCA0CPM0=0X42;
62 1 PCA0CPM1=0X42;
63 1 SFRPAGE=temppage;
64 1 SFRPAGE = 0x0F;
65 1 if(vleft<0)
66 1 {
67 2 leftw_direct=0;
68 2 }
69 1 else
70 1 {
71 2 leftw_direct=1;
72 2 }
73 1
74 1 if(vright<0)
75 1 {
76 2 rightw_direct=0;
77 2 }
78 1 else
79 1 {
80 2 rightw_direct=1;
81 2 }
82 1
83 1 PWM_set(m_vleft,m_vright);
84 1 }
85
86 void go_forward()
87 {
88 1 drive_set(110,0);
89 1 }
90
91 void go_back()
92 {
93 1 drive_set(-110,-110);
94 1 }
95
96 void turn_left()
97 {
98 1 drive_set(-110,110);
99 1 }
100
101 void turn_right()
102 {
103 1 drive_set(110,-110);
104 1 }
105 void turnright90()
106 {
107 1 drive_set(127,-127);
108 1 delay1ms(2000);
109 1 }
110 void turnleft90()
111 {
112 1 drive_set(-110,110);
113 1 delay1ms(2000);
114 1 }
115 void go_fast()
116 {
117 1 drive_set(0,0);
C51 COMPILER V7.20 PCA 09/02/2007 21:16:40 PAGE 3
118 1 }
119 void stop() //清零ECOMn来实现0%,即低电平输出
120 {
121 1 temppage=SFRPAGE;
122 1 SFRPAGE=0x00;
123 1 PCA0CPM0=0X02;
124 1 PCA0CPM1=0X02;
125 1 SFRPAGE=temppage;
126 1
127 1 }
128
129 /*********CEX2,CEX3崭罕哐卮シ⒛J烬
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -