c8051f410-通过超声测得的距离控制PWM输出的代码,不知道哪里错了,求大神帮忙看看

问题描述

通过超声测得的距离控制PWM输出的代码,不知道哪里错了,求大神帮忙看看

#include
#define SYSCLK 24500000 // Internal oscillator frequency in Hz
#define BAUDRATE 9600 // Baud rate of UART in bps
#define uchar unsigned char
#define uint unsigned int

//L298输入控制端定义
sbit IN1 = P2^0;
sbit IN2 = P2^1;

sbit ENA = P0^0;
sbit IN3 = P2^2;
sbit IN4 = P2^3;

sbit ENB = P0^1;
sbit RX=P2^6;

sbit TX=P2^7;
unsigned int time=0;
unsigned char pwm;
float S=0;

void Oscillator_Init (void);

void Port_Init (void);
void PCA0_Init (void);
void Interrupt_Init(void);
void Timer0_Init(void);
void Timer3_Init(void);
void Conut(void);
void Timer_Count(void);
void StartModule(void);

void delay(uchar n) //5*n,机器周期
{
while (n)
n --;

}

void delay_1ms(void) //1ms延时函数
{
unsigned int i;
for (i=0;i<24000;i++);
}

void delay_nms(unsigned int n) //N ms延时函数
{
unsigned int i=0;
for (i=0;i
delay_1ms();
}
/********************************/
/* 主函数 */
/********************************/
main()
{
PCA0MD &= ~0x40; // Disable Watchdog timer
pwm=0;
Oscillator_Init(); // Initialize the system clock
PCA0_Init (); // Initialize PCA0;
Port_Init ();
Interrupt_Init();
Timer0_Init();
Timer3_Init();
Timer_Count();
IN1=1;
IN2=0;
IN3=1;
IN4=0;
while (1){
delay(20);
StartModule();
if(S>=10)
{

pwm=50;
}
else{
pwm=100;
}

}

}

void Port_Init (void)
{

P1     |= 0x03;     // Set port latches for P1.4
                    // and P1.5 to '1'

 P2     |= 0x0F;                                    // Enable crossbar and weak pull-ups

P0MDIN = 0xff;
P0MDOUT = 0xCf;      // Set CEX0 (P0.0) to push-pull
P0SKIP = 0x00;
P0 = 0x03;                               

XBR1    = 0x42;     //    010:CEX0、CEX1  TO P.0,P0.1
XBR0    = 0x01;     //TxdRxd  enable

}
void Oscillator_Init (void)
{
OSCICN = 0x87; // Set internal oscillator to run
// at its maximum frequency
CLKSEL = 0x00;

RSTSRC = 0x04; // enable missing clock detector
}
void PCA0_Init (void)
{
// Configure PCA time base; overflow interrupt disabled
PCA0CN = 0x00; // Stop counter; clear all flags 233

//PCA0MD = 0x08;                      // Use SYSCLK as time base
PCA0MD = 0x00;                      //SYSCLK /12

PCA0CPM0 = 0x42;                    // Module 0 = 8-bit PWM mode

// Configure initial PWM duty cycle = 50%
PCA0CPH0 =228; PCA0CPL0 =228; // 256- (256 * 0.5);

PCA0CPM1 = 0x42;                    // Module 0 = 8-bit PWM mode

// Configure initial PWM duty cycle = 50%
PCA0CPH1 =128; PCA0CPL1 =128; // 256- (256 * 0.5);

// Start PCA counter
CR = 1;
}
void Interrupt_Init(void)
{
IT01CF = 0x07; //P0.7,作为外中断0的输入引脚
EX0= 1;
IT0 = 1;

IP = 0;
EIP1 = 0;
EIP2 = 0;
PT0 = 1;
EA = 1;
}

void Timer0_Init(void)
{
TMOD=0x01;
IE=0x82;
TH0=0xff;
TL0=0x9c;
TR0=1;
}
void Timer0_Int() interrupt 1//中断程序
{
TH0=0xff;
TL0=0x9c;
PCA0CPH0=256-pwm;
PCA0CPH1=256-pwm;

}

void Timer3_Init(void)
{
uchar H3,L3;

//b7:T3MH=0;b6:T3ML=0;
//T3_SYSCLK=24500000/12≈2.042MHz,0.49u;T3SPLIT=0,16位自动重载方式
CKCON &= ~0xC0;

//TR3=0,关闭定时器T3工作
TMR3CN = 0x00;

H3 = 0; // = (65536-2245)/256; //2245*0.49us=1100.05us
L3 = 0; // = (65536-2245)%256;
TMR3RLL = L3;

TMR3RLH = H3;
TMR3L = L3;
TMR3H = H3;
// EIE1 = EIE1 | 0x80; //允许T3中断
}

void Conut(void)
{
time=TMR3H<<8 +TMR3L;
TMR3H = 0;
TMR3L = 0;
S=(time*1.88)/100; //算出来是MM

}

void Timer_Count(void)
{
TMR3CN |= 0x04; //开启计数
while(RX); //当RX为1计数并等待
TMR3CN &= ~0x04; //关闭计数
Conut(); //计算
}
void StartModule(void) //T1中断用来扫描数码管和计800MS启动模块
{
TX=1; //800MS 启动一次模块
delay_nms(800);
TX=0;
}

时间: 2024-09-14 05:58:30

c8051f410-通过超声测得的距离控制PWM输出的代码,不知道哪里错了,求大神帮忙看看的相关文章

控件-求大神帮忙写个函数,以控制datagrideview行列变化

问题描述 求大神帮忙写个函数,以控制datagrideview行列变化 2C 我做一个小程序,里面用到了很多数据库和Datagriedview控件,希望写一个全局函数,控制datagridview的行列宽度变化,以及插入和删除行或列(点击鼠标右键时出现插入和删除行列.以及复制粘贴). 在调用数据库后,能不能实现对数据的多行粘贴和复制. 谢谢了,急求. 解决方案 http://bbs.csdn.net/topics/360108393 解决方案二: 设置datagridview行列格式的函数呢?

求大神帮忙解决,js 控制输入框格式是半角的英文字母(网上好多方法都是只能控制一种状态)

问题描述 js中怎么才能限制输入框的输入内容仅限于半角的英文字母啊数字中文特殊字符全部不能输入. 解决方案 解决方案二:inputonkeyup="value=value.replace(/[^a-zA-Z]/g,'')"onpaste="value=value.replace(/[^a-zA-Z]/g,'')"oncontextmenu="value=value.replace(/[^a-zA-Z]/g,'')">下面供LZ参考http:

spring mvc +hibernate4事务控制问题求大神解答

问题描述 spring mvc +hibernate4事务控制问题求大神解答 web.xml <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="

控制-&amp;amp;lt;s:radio&amp;amp;gt;标签如何实现全选 求大神

问题描述 <s:radio>标签如何实现全选 求大神 JSP代码如下所示: USB设备记录检查: /s:radio USB设备常规检查:??/s:radio USB设备深度检查:??/s:radio /s:if JS代码如下所示: function checkmsContent_8(){ var val8 = $("input[name='ms.content_8']:checked").val(); if(val8 == "1"){ $("i

easy-遇到一个关于键盘控制小球移动的问题,求解教~对大神应该很简单

问题描述 遇到一个关于键盘控制小球移动的问题,求解教~对大神应该很简单 #include #include #include #include #include #include struct BALL { int x; int y; int speed; int number; int style; }; char pr[1],scorepointer[3],ch; float d; int add=10,score=0; BALL Ball[10]; struct Smile { int x

跪求大神-运用VS2005编写16位继电器控制上位机界面

问题描述 运用VS2005编写16位继电器控制上位机界面 继电器板通用通信协议说明: 上位机发送8个字节: 数据头:一个字节,固定为0x55 目的地址:一个字节 如果目标地址为1,则发送1,目标地址是多少就发送多少. 功能码:一个字节 数据内容:四个字节 校验位:一个字节,将前面的所有数据相加,取后八位. 在这个编程中我们用到的功能码是0x13 命令执行 数据中的第三.四个字节,每个字节8位,弓16位代表16路继电器的状态,1代表吸合0代表断开.最后一个字节的第0为代表第一个继电器,以此类推.

数据-PIC单片机I/O口输入信号控制APF开关机,新手,求大神解答

问题描述 PIC单片机I/O口输入信号控制APF开关机,新手,求大神解答 dsp,pic,display搭建的数据传输环境,原本使用显示屏的开关机按键控制APF设备的开机.关机(ON_KEY),现在想要让PIC单片机I/O口输入信号也能控制APF开关机,下面的程序是设置RD12口选择位,选择是按键控制还是输入信号RD1RD2控制,之前我把(DI4为1时选择DI控制,且RD1=1时开机,RD2=1时关机),结果不给DI口信号的话程序运行会直接开机.改成下面这样就不受影响了,这是为什么?还有就是这样

方法-srilm测设问题及显示问题,谢谢大神帮忙!!!!!

问题描述 srilm测设问题及显示问题,谢谢大神帮忙!!!!! 我已近按照您的指导测试了srilm请问如果要想知道ngram-count具体用得什么discounting来计算模型的 比如good-turing discounting 或者用得其他discounting 请问有什么方法知道没有?

acm水题 二叉树模拟 hdu5444,能想到的测试数据都测了还是WA,求大神

问题描述 acm水题 二叉树模拟 hdu5444,能想到的测试数据都测了还是WA,求大神 1)我的代码(题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=5444,也有复制内容在代码下面) #include <iostream> #include <string.h> using namespace std; const int maxn=1010; char record[maxn]; int sum=0; struct tree{ i