① 求高手 用51单片机输出产生方波的程序
#include"reg52.h"
sbit PWM=P1^0;//定义输出脚
void main()
{
TMOD=0x01; //定时器0工作方式1
TH0=(65536-10000)/256; //12M晶振10MS计时常数
TL0=(65536-10000)%256;
EA=1; //开总中断
ET0=1; //开定时器0中断
TR0=1; //启动定时器0
while(1);
}
//中断函数,启动后每10MS进入一次中断
void T0_time(void) interrupt 1
{
TH0=(65536-10000)/256; //12M晶振10MS计时常数
TL0=(65536-10000)%256;
if(PWM)PWM=0; //输出脚取反
else PWM=1;
}
② 单片机方波
很明显这位大哥是想做一个频率计模式的东西嘛,想把测量出来的方波频率在数码管上显示出来。
首先肯定是要测量频率,然后就如同一楼大哥所说的那样,把数字用对应的查找表写在单片机中,一旦算出频率,对应查找表找出数字,显示在数码管上就行了,OVER,SO EASY!呵呵!
③ 编写51单片机程序,方波程序,at89s52的单片机
以下程序仿真成功,你试试看。
#include <reg52.h>
#define uchar unsigned char
#define TL_0SET (256 - 25)
sbit P1_0=P1^0;
sbit P1_1=P1^1;
sbit P1_2=P1^2;
sbit P1_3=P1^3;
sbit P1_6=P1^6;
sbit P1_7=P1^7;
bdata uchar x=0;
sbit p16=x^0;
sbit p17=x^1;
sbit flag=x^2;
uchar i, j;
void e0int() interrupt 0 //用外部中断0作控制开关,控制四选一数据选择器的输出
{
x++;
if(x == 4) x = 0;
P1_7 = p16;
P1_6 = p17;
}
void time0() interrupt 1
{
//T0定时25us,T0的中断服务程序
TL0 = TL_0SET + 8;//加8,是对程序做一个误差补偿,因为从进入定时中断,到执行中断里的第一句程序,是有时间间隔的,在此做一个误差补偿
i++;
P1 = i;
P1_7 = p16;
P1_6 = p17;
}
void main()
{
TR0 = 0;
TMOD = 0x02;
TL0 = TL_0SET;
TR0 = 1; //T0定时器开始工作
ET0 = 1;
EX0 = 1;//外部中断0允许
IT0 = 1;//外部中断0由下降沿触发
EA = 1;
P1_0 = 0;
P1_1 = 0;
P1_2 = 0;
P1_3 = 0;
flag = 0;
while(1) {;}
}
④ 单片机产生方波程序
50ms定时中断,计10次,即0.5s。每0.5s,P1.0求反一次,即为所要求的方波
⑤ 单片机汇编程序,生成方波
下面只附12M晶振的,波形口驱动口在P1.0,
6M的自己参照改吧,修改定时器配置寄存器和计数值。
ORG 0000H
LJMP START
ORG 000BH
LJMP Timer0Interrupt
START:
MOV SP,#60H
LCALL InitTimer0
LOOP:
;add your code here!
LJMP LOOP
InitTimer0:
MOV TMOD,#02H
MOV TH0,#00H
MOV TL0,#9CH ;100us中断初值
SETB EA
SETB ET0
SETB TR0
RET
Timer0Interrupt:
PUSH DPH
PUSH DPL
PUSH ACC
;========================
CPL P1.0
;========================
POP ACC
POP DPL
POP DPH
RETI
END
⑥ 解读下面程序(实现单片机输出方波的程序)
ORG 0000H //汇编伪指令,定义复位地址
RESET: LJMP MAIN //标号:长跳转到MAIN标号地址
ORG 000BH//汇编伪指令,定义定时器0中断服务地址
AJMP IT0P//跳转到定时器0中断服务程序
ORG OO1BH//汇编伪指令,定义定时器1中断服务地址
AJMP IT1P//跳转到定时器1中断服务程序
ORG 0100H//汇编伪指令,定义MAIN标号地址
MAIN: MOV SP, #60H//标号:堆栈初始化
ACALL PT0M2//调用PT0M2子程序
LOOP: MOV C, P1.1//标号:暂存P1.1状态
JNC LOOP //如果P1.1 不等于1跳转回标号LOOP
SETB TR1 //开定时器1
SETB ET1 //使能定时器1
HERE: AJMP HERE //Ljmp $ 死循环
PT0M2: MOV TMOD,#25 //标号PT0M2子程序
MOV TL0,#0FFH //定时器0赋初值
MOV TH0,#0FFH
SETB TR0 //开定时器0
SETB ET0 //使能定时器0
MOV TL1,#06H //定时器1赋初值
MOV TH1,#06H
CLR P1.1 //P1.1端口清零
SETB EA //使能全局中断
RET //子程序返回
IT0P: CLR TR0 //定时器0中断服务程序,关定时器0
SETB P1.1 //P1.1置位
RETI //中断返回
IT1P: CPL P1.0 //定时器1中断服务程序,P1.1清零
RETI //中断返回
⑦ 51单片机汇编程序编写方波输出程序
ORG 0000H
LJMP START
ORG 001BH
LJMP Timer1Interrupt
START:
MOV SP,#60H
LCALL InitTimer1
LOOP:
;主循环 添加其他代码
LJMP LOOP
InitTimer1:
MOV TMOD,#10H
MOV TH1,#9EH
MOV TL1,#58H
SETB EA
SETB ET1
SETB TR1
RET
Timer1Interrupt:
PUSH DPH
PUSH DPL
PUSH ACC
MOV TH1,#9EH
MOV TL1,#58H
CPL P1.1//对P1.1进行取反
POP ACC
POP DPL
POP DPH
RETI
END
⑧ 单片机输出方波程序
单片机只能一个IO口输出PWM,如果要两个的话出来的PWM是不完整的。我有一个PWM输出,按键可调频率的程序,不知你要不要。
⑨ 〖急〗89c51单片机,编写方波的c语言程序
还是没太看懂,关于按键检测你可以这样编写
if(!key)//检测按键被按下
{
delay(2);//消抖
if(!key);//确认按键被按下
while(!key)//等待松手
{
//这里编写按键被长时间按下的函数
}
}