
串口还是P10?我下面贴出P10输出PWM的产生代码,希望对你能有帮助。
#include <reg51h># t 10000/100 //修改10000更改周期 单位us T(us)=10^6/f(hz) 至少10000us
# Duty_cycle 10 ///更改此更改占空比 0-100
unsigned char percent=0;
sbit work_pin P1^0;
void Timer0Init() //定时器0初始化
{
TMOD|=0X01;//选择为定时器0模式,工作方式1,仅用TR0打开启动。
TH0=0xff;
TL0=0x9c;
ET0=1;//打开定时器0中断允许
EA=1;//打开总中断
TR0=1;//打开定时器
}
void PWM_work() interrupt 1
{
TH0=0xff;
TL0=0c9c;
percent++;
if(percent<=Duty_cyclet/100)
{
work_pin=1;
if(percent>t) percent=0;
}
else work_pin=0;
}
void main()
{
Timer0Init();
while(1);
}
超声波的话我用的是X宝上的潮汕波模块,这里我写了一个超声波的头文件 我传给你好了,还有头文件上说明,应该能看懂的
传不来 文件 直接发给你好了。
/
头文件说明:
本头文件有三个可以调用的函数
1串口的初始化函数 UESC_UART_Init(uint band)
1)参数是设定的波特率,晶振是12MHz,建议设置为2400
2)注意初始化后要简短延时。
2 UESC_UART_Putchar(char kkk)
该函数可以向上位机发送一个字节的数据,参数就是要发送的数据。
本函数是用到了中断,这样程序在接收数据的时候可以运行其他程序。
单片机通过串口接收到数据之后将8位的数据放在 date 的外部变量中,所以在主函数里可以直接 *** 作接收来的变量;
接收到数据后同时会将外部变量flag置位,以适应不同的应用场合。
注意: 使用到串口是 定时器1不能使用。
发送单个字符的时候记得加 ‘’ 将字符括起来。
记得将flag置一;
第二次修改的内容:
给初始化函数加了晶振的选择,传递的参数就是晶振的频率 12M的晶振就传递12
注意:该函数在12M 24M 24576M测试搜通过。 但是110592死活不成功,不要问为什么,搞得好像我知道似的!
建议在调用之前建议先测试一下该晶振频率能否通过。
第二次修改的内容:
解决了部分晶振频率串口通信失败的问题,现在所有的晶振均测试通过。
同时加了字符串输出函数:UART_PutString(char s) 参数就是要显示的字符串,记得用“”。
作者@Jack_kk
完成日期:2014_4_14
第一次修改时间:2014_5_13
第二次修改时间:2014_5_18
第三次修改时间:2014_5_19
/
#include<reg51h>
#include<stdioh>
#include"UARTh"
char get_char;
bit flag;
unsigned char date;
void UESC_UART_Init(uint band,double MHz)
{
TMOD|=0x20;
TH1=256-(double)(MHz2604)/band;
TL1=TH1;
SM0=0; //和下面的一条语句同时设定串口工作方式
SM1=1;
REN=1; //允许串口接收
EA=1; //总中断
TR1=1; //定时器开始
ES=1; //开串口中断
}
void UESC_UART_Putchar(char kkk)
{
ES=0;
SBUF=kkk;
while(!TI);
TI=0;
ES=1;
}
void UART_PutString(char s)
{
while(s)
{
UESC_UART_Putchar(s++);
}
}
/
void UESC_UART_Getchar(void) //这个部分注释掉是因为 没有用到中断。
{
ES=0; //发送数据之前把串口关闭
// TI=1; //这里是发送一个字符串printf的用法,先关闭窗口中断,然后TI 好就是这样、
// puts(" Please input a letter");
// TI=0;
while(!RI);
RI=0;
get_char=SBUF;
// TI=1;
// printf("The letter you just input is ");
// TI=0;
SBUF=get_char;
while(!TI);
TI=0;
ES=1;
}
/
错了,那是串口头文件 sorry
/
头文件说明
本头文件适用于HC-HR04超声波模块
经封装本头文件可以直接调用的函数是:
1Ultrasound_Init();
初始化定时器0;
2Get_time();
取得距离函数,返回值是距离,单位厘米,声速是240m/s时的测量结果。
示例:
Ultrasound_Init();
while(1)
{
dis=Get_time();
display(dis);
}
注意:
1本头文件占用了定时器0,在主函数里面就不要在使用定时器0了;
2调用本头文件之前记得修改IO口;
3测量周期建议在60ms以上。
作者@Jack_kk
时间:2014_5_14
/
#include"Ultrasoundh"
#include<intrinsh>
#include<reg51h>
sbit Echo=P3^2;
sbit Trig=P1^0;
void Delay15us() //@12000MHz
{
unsigned char i;
i = 42;
while (--i);
}
void Ultrasound_Init()
{
TMOD|=0x09;
TH0=TL0=0;
ET0=1;
TR0=1;
EA=1;
}
unsigned int Get_dis()
{
int timeout=20000;
Trig=1;
Delay15us();
Trig=0;
while(!Echo&timeout)
timeout--;
timeout=20000;
while(Echo&timeout)
timeout--;
timeout=TH0256+TL0; //这里偷了一点懒,将变量防死机变量timeout作为了返回值
TH0=TL0=0;
return timeout0024;
}
1 特征提取:PZ使用的是滤波器组的方法,从频谱上提取特征,而STC则是从时域上提取特征;
2 特征量:PZ提取的特征量比STC少,一般是每一帧的均值、方差、峰值等,而STC提取的特征量更多,包括均值、方差、峰值、偏度、峰度等;
3 计算复杂度:PZ计算复杂度较低,而STC计算复杂度较高。
#include <reg51h>
void delayms(int xms)
{
char i=0;
for(;xms>0;xms--)
for(i=0;i<110;i++)
;
}
main(void)
{
while(1)
{
P1=0xaa;
delayms(1000);
P1=0x55;
delayms(1000);
}
}
if ($kind != 'ReplyTo') {
if (!isset($this->all_recipients[strtolower($address)])) {
array_push($this->$kind, array($address, $name));
$this->all_recipients[strtolower($address)] = true;
return true;
}
1、使用编程器将HEX文件烧录到STC12芯片中。
2、使用ISP编程工具或者仿真器连接STC12芯片与PC机,获取芯片上的程序代码。
3、使用专门的反汇编工具,将HEX文件反汇编为汇编代码或C语言代码。
4、根据反汇编结果,对程序代码进行分析和理解。
STC15是一种常用的单片机,其程序设计需要结合具体的开发板和任务需求来确定。一般来说,要快速写出STC15的程序,可以按照以下步骤进行:
1 确定任务需求。首先要明确需要实现什么功能,例如控制电机、采集温度、检测红外等。
2 编写程序框架。根据任务需求,编写程序的基本框架,包括初始化、配置、中断处理和主程序等。
3 编写功能模块。根据任务需求,编写相应的功能模块,例如驱动电机的模块、采集温度的模块、检测红外的模块等。
4 调试程序。在编写完程序后,需要进行调试,确保程序能够正常运行,并且满足任务需求。
5 优化程序。在程序调试完成后,可以进行程序的优化,包括提高程序的运行效率、减少程序的代码长度等。
需要注意的是,STC15的程序设计需要具备一定的单片机开发经验和相关知识,如果您是初学者,可能需要花费一定的时间和精力来学习和掌握相关知识。另外,STC15的程序设计也需要根据具体的实际情况来确定,不同的任务需求和开发板可能需要不同的程序设计方法。
为了保证您获得最佳体验,请前往 >
以上就是关于STC 89C51,单片机C语言程序,P10输出PWM方波全部的内容,包括:STC 89C51,单片机C语言程序,P10输出PWM方波、跪求一个 用stc12c系列 pca发送40khz 单片机 定时捕捉回波 的超声波测距 c语言程序、pz和stc的区别等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)