久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费
標題:
怎么用stc89c52rc單片機的兩個定時器,一個想用超聲波測距,一個用來pwm調速
[打印本頁]
作者:
學習小白242人才
時間:
2020-12-19 14:05
標題:
怎么用stc89c52rc單片機的兩個定時器,一個想用超聲波測距,一個用來pwm調速
這是PWM的程序
#include<reg52.h>
#define uint unsigned int
#define uchar unsigned char
sbit PWM=P3^7;//PWM
uchar time;
void main()
{
TMOD=0x01;
TH0=0xff;
TL0=0xf7;
EA=1;
ET0=1;
TR0=1;
while(1)
{
}
}
void tim0() interrupt 1 //風速調節
{
TR0=0;
TH0=0xff;
TL0=0xf7;
TR0=1;
time++;
if(time>=100) //1khz
time=0;
if(time<=75) //超高20,高45,中60,低75,80以上無
PWM=1;
else if(time>90)
PWM=1;
else
PWM=0;
}
這是超聲波測距的程序
#include "reg51.h"
#include "LQ12864.h"
#include "CHAO.h"
/***************************主函數****************************************/
void main(void)
{
InitIRQ(); //定時器的初始化
while(1)
{
int num=0; //數字初值為0
StartModule(); //啟動超聲波模塊
while(!ECH0); //當超聲波模塊接收口輸出低電平則等待
TR0=1; //開啟計數
while(ECH0); //當RX為1計數并等待
TR0=0; //關閉計數
num=Conut(); //讀取定時器的值,計算
}
}
#include <intrins.h> /*為了使用_nop_()函數而加*/
sbit ECH0=P3^4; //串行數據ECH0 ---- P1.1
sbit TRIG=P3^5; //串行時鐘TRIG ---- P1.2
unsigned int time=0;
unsigned int Distance=0;//距離
bit flag =0; //中斷溢出標志
/*********** 定時器的初始化 ***********/
void InitIRQ(void)
{
TMOD=0x01;
TH0=0; //定時器T0高八位初始化,用于判斷測距溢出,最大65.536 ms
TL0=0; //定時器T0低八位初始化
ET0=1; //T0中斷允許
TR0=1; //開啟定時器0
EA=1; //開啟總中斷
}
/*********** 觸發超聲波模塊 ***********/
void StartModule() //超聲波模塊Trig控制端給大于10us的高電平觸發模塊測距
{
TRIG=1;
_nop_(); //1_nop_()延遲一個機器周期
_nop_(); //2
_nop_(); //3
_nop_(); //4
_nop_(); //5
_nop_(); //6
_nop_(); //7
_nop_(); //8
_nop_(); //9
_nop_(); //10
_nop_(); //11
_nop_(); //12
_nop_(); //13
_nop_(); //14
_nop_(); //15
_nop_(); //16
_nop_(); //17
_nop_(); //18
_nop_(); //19
_nop_(); //20
TRIG=0;
}
/*********** 定時器T0計數 ***********/
int Conut(void)
{
time=TH0*256+TL0; //定時器T0的低8位加上高八位為計時的時間
TH0=0; //定時器T0高八位初始化,,用于判斷測距溢出,最大65.536 ms
TL0=0; //定時器T0低八位初始化
Distance =(time * 1.87)/100; //CM (見代碼最后注釋) time * 1/58
if(flag==1) //超出測量
{
flag=0;
}
return Distance;
}
/*********** 定時器T0中斷服務函數 ***********/
void Timer0IRQ() interrupt 1 //T0中斷用來計數器溢出,超過測距范圍
{
flag=1;
}
作者:
易照龍
時間:
2020-12-19 14:05
#include "reg52.h"
sbit PWM=P3^7;
unsigned char time1;
void ConfigTimer1()
{
//TMOD&=0x0F;//清空控制位
TMOD|=0x00;//定時器0工作方式0
TH1=0xff;//(65536-10)/256;//賦初值定時
TL1=0xf7;//(65536-10)%256;//0.01ms
EA=1;//開總中斷
ET1=1;//開定時器1中斷
TR1=1;//啟動定時器1
}
void timer0() interrupt 3
{
//TR0=0;//賦初值時,關閉定時器
TH1=0xff;//(65536-10)/256;//賦初值定時
TL1=0xf7;//(65536-10)%256;//0.01ms
//TR0=1;//打開定時器
time1++;
if(time1>=100) //1khz
time1=0;
if(time1<(100-Distance)) //占空比%20,可改
PWM=1;
else if(time1>=99)
PWM=1;
else
PWM=0;
}
用這個定時器試試。
作者:
wwh2382
時間:
2020-12-19 15:43
先用proteus作個仿真看看效果,壇子里有不少實例可參考
作者:
xuanhao
時間:
2021-4-20 22:25
樓主可以分享下程序嗎?我這個調了兩天了還是沒有進展
歡迎光臨 (http://www.zg4o1577.cn/bbs/)
Powered by Discuz! X3.1
主站蜘蛛池模板:
亚洲 精品 综合 精品 自拍
|
一级国产精品一级国产精品片
|
成人激情视频在线观看
|
午夜影院免费体验区
|
国产日韩精品在线
|
羞羞视频在线观看网站
|
一级毛片视频免费观看
|
毛片韩国
|
亚洲一区亚洲二区
|
国产 欧美 日韩 一区
|
日本不卡一区二区三区在线观看
|
亚洲国产精品一区二区第一页
|
97人澡人人添人人爽欧美
|
天天操 夜夜操
|
国产精品一区二区三区四区
|
欧美综合久久
|
亚洲五码久久
|
午夜久久久
|
99免费精品视频
|
欧美自拍第一页
|
99亚洲
|
91久久夜色精品国产网站
|
在线成人
|
aa级毛片毛片免费观看久
|
日韩精品区
|
成人免费视频网站在线看
|
日本久久网
|
欧美精品一区二区三区蜜桃视频
|
91久久国产
|
一区在线视频
|
在线观看国产三级
|
国产激情精品
|
婷婷丁香在线视频
|
国产乱码精品一区二区三区五月婷
|
久久新视频
|
青青草在线视频免费观看
|
国产成人高清成人av片在线看
|
91精品综合久久久久久五月天
|
成人影院免费视频
|
av在线免费观看不卡
|
亚洲欧洲国产视频
|