
用51单片机每0.5秒P1.1输出一个宽度可变脉冲为1ms的倍数,没16个在重复。求大神给个完整的编程,谢谢 30
嗯我是基于c语言的!!如果能副上个原理图最好有AT89S5130uf电容2个20uf1个按键开关2个12M晶振4个电阻...
嗯我是基于c语言的!!
如果能副上个原理图最好
有AT89S51 30uf电容2个 20uf1个 按键开关2个 12M晶振 4个电阻 展开
如果能副上个原理图最好
有AT89S51 30uf电容2个 20uf1个 按键开关2个 12M晶振 4个电阻 展开
展开全部
都没人回答了,帮帮你吧,记得选为满意答案哦
#include<REG51.h>
//#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
typedef signed char s8;
typedef signed int s16;
typedef signed long s32;
#define CNT 1000 //初始值#define WIDTH (u16)500 //脉冲宽度500ms
sbit ClkOut = P1^1;
u8 OutHCnt; //高电平输出次数
u8 ClkH;
u16 ClkL; //输出脉冲高电平和低电平宽度
/************************************************************************************** 函数定义 */
void InitTimer0(void); //timer0初始化函数
/******************************************************************************** timer0中断函数 */
void T0Isr(void) interrupt 1
{
TL0 = (65536 - CNT) % 256;
TH0 = (65536 - CNT) / 256; //初始值
if(ClkOut)
{
if( ++ OutHCnt == ClkH)
{
OutHCnt = 0;
ClkOut = 0;
if(++ ClkH == 16)
ClkH = 1;
ClkL = WIDTH - (u16)ClkH;
}
}
else if(-- ClkL == 0)
ClkOut = 1;
}
/****************************************************************************** timer0初始化函数 */
void InitTimer0(void)
{
ET0 = 0;
TR0 = 0;
TF0 = 0;
ClkH = 1;
ClkL = WIDTH - ClkH;
OutHCnt = 0;
TMOD &= 0xf0; //清除原来设置
TMOD |= 0x01; //设置工作模式:计时器模式1
TL0 = (65536 - CNT) % 256;
TH0 = (65536 - CNT) / 256; //初始值
TR0 = 1;
ET0 = 1;
ClkOut = 0;
}
/************************************************************************************** main函数 */
void main(void)
{
InitTimer0();
EA = 1;
for(;;)
;
}
不至于吧,这么简单的东西也要原理图???
#include<REG51.h>
//#include<intrins.h>
typedef unsigned char u8;
typedef unsigned int u16;
typedef unsigned long u32;
typedef signed char s8;
typedef signed int s16;
typedef signed long s32;
#define CNT 1000 //初始值#define WIDTH (u16)500 //脉冲宽度500ms
sbit ClkOut = P1^1;
u8 OutHCnt; //高电平输出次数
u8 ClkH;
u16 ClkL; //输出脉冲高电平和低电平宽度
/************************************************************************************** 函数定义 */
void InitTimer0(void); //timer0初始化函数
/******************************************************************************** timer0中断函数 */
void T0Isr(void) interrupt 1
{
TL0 = (65536 - CNT) % 256;
TH0 = (65536 - CNT) / 256; //初始值
if(ClkOut)
{
if( ++ OutHCnt == ClkH)
{
OutHCnt = 0;
ClkOut = 0;
if(++ ClkH == 16)
ClkH = 1;
ClkL = WIDTH - (u16)ClkH;
}
}
else if(-- ClkL == 0)
ClkOut = 1;
}
/****************************************************************************** timer0初始化函数 */
void InitTimer0(void)
{
ET0 = 0;
TR0 = 0;
TF0 = 0;
ClkH = 1;
ClkL = WIDTH - ClkH;
OutHCnt = 0;
TMOD &= 0xf0; //清除原来设置
TMOD |= 0x01; //设置工作模式:计时器模式1
TL0 = (65536 - CNT) % 256;
TH0 = (65536 - CNT) / 256; //初始值
TR0 = 1;
ET0 = 1;
ClkOut = 0;
}
/************************************************************************************** main函数 */
void main(void)
{
InitTimer0();
EA = 1;
for(;;)
;
}
不至于吧,这么简单的东西也要原理图???
追问
这个我只学过c语言,对大大的一些用语我看不懂是用汇编语言的吗?希望能得到c语言的
追答
你学过C语言,那不至于连C和汇编都分不清楚吧?
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询