① 求高手 用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)//等待鬆手
{
//這里編寫按鍵被長時間按下的函數
}
}